Programiranje 2/Blok 3
Pređi na navigaciju
Pređi na pretragu
Kompleksni brojevi
Napisati program u programskom jeziku C za rad sa kompleksnim brojevima. Pretpostaviti da se kompleksni brojevi u memoriji računara čuvaju pomoću sledeće strukture:
typedef struct complexNumber {
double real, imaginary;
} ComplexNumber;
Ova deklaracija se nalazi u fajlu sa nazivom type.h. Prilikom realizacije programa neophodno je uključiti ovaj fajl svugde gde se koristi dati tip. Program realizovati prema sledećim stavkama:
- Napisati potprogram ComplexNumber sum ( ComplexNumber a, ComplexNumber b ); koji sabira dva kompleksna broja a i b i rezultat vraća kao povratnu vrednost funkcije.
- Napisati potprogram void conjugate ( ComplexNumber *a ); koji konjuguje kompleksni broj na koji pokazuje pokazivač a.
- Napisati potprogram void write ( ComplexNumber a ); koji ispisuje kompleksni broj a.
- Napisati potprogram int isNumber ( char *string ); koji proverava da li niz karaktera na koji pokazuje pokazivač string predstavlja validan realan broj.
- Korišćenjem prethodno realizovanih potprograma napisati glavni program koji dobija četiri argumenata preko komandne linije. Glavni program treba da proveri da li su prosledjeni argumenti validni realni brojevi i ukoliko jesu da od prva dva formira jedna kompleksan broj, a od druga dva drugi kompleksni broj. Nakon toga potrebno je naći i ispisati sumu dva kompleksna broja, kao i konjugiovane vrednosti originalnih kompleksnih brojeva. Ukoliko argumenti ne predstavljaju validne realne brojeve potrebno je prekinuti izvršavanje program sa povratnom vrednošću 0.
Prva funkcija
#include <stdio.h>
#include "types.h"
ComplexNumber sum ( ComplexNumber a, ComplexNumber b) {
ComplexNumber c;
c.real = a.real + b.real;
c.imaginary = a.imaginary + b.imaginary;
return c;
}
Druga funkcija
#include "types.h"
void conjugate ( ComplexNumber *a ) {
a->imaginary *= -1;
}
Treća funkcija
#include <stdio.h>
#include "types.h"
void write ( ComplexNumber a ) {
char op = a.imaginary >= 0 ? '+' : '-';
a.imaginary *= (a.imaginary >= 0 ? 1 : -1);
printf("%.4f %c %.4fi", a.real, op, a.imaginary);
}
Četvrta funkcija
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
int isNumber ( char *string ) {
if (string == NULL) {
return 0;
}
int a;
double b;
return sscanf(string, "%*[+-]%lf%n", &b, &a) == 1 && a == strlen(string);
}
Peta funkcija
#include <stdio.h>
#include <stdlib.h>
#include "types.h"
#include <string.h>
int main(int argc, char** argv)
{
for(int i = 1; i < 5; i++)
if(!isNumber(argv[i]))
return 0;
ComplexNumber a, b, c;
a.real = atof(argv[1]);
a.imaginary = atof(argv[2]);
b.real = atof(argv[3]);
b.imaginary = atof(argv[4]);
c.real = a.real + b.real;
c.imaginary = a.imaginary + b.imaginary;
write(c);
putchar('\n');
conjugate(&a);
conjugate(&b);
write(a);
putchar('\n');
write(b);
return 0;
}