Програмирање 2/Блок 3
Комплексни бројеви
Написати програм у програмском језику C за рад са комплексним бројевима. Претпоставити да се комплексни бројеви у меморији рачунара чувају помоћу следеће структуре:
typedef struct complexNumber {
double real, imaginary;
} ComplexNumber;
Ова декларација се налази у фајлу са називом тyпе.х. Приликом реализације програма неопходно је укључити овај фајл свугде где се користи дати тип. Програм реализовати према следећим ставкама:
1. Написати потпрограм ЦомплеxНумбер сум ( ЦомплеxНумбер а, ЦомплеxНумбер б ); који сабира два комплексна броја а и б и резултат враћа као повратну вредност функције. 2. Написати потпрограм воид цоњугате ( ЦомплеxНумбер *а ); који коњугује комплексни број на који показује показивач а. 3. Написати потпрограм воид wрите ( ЦомплеxНумбер а ); који исписује комплексни број а. 4. Написати потпрограм инт исНумбер ( цхар *стринг ); који проверава да ли низ карактера на који показује показивач стринг представља валидан реалан број. 5. Коришћењем претходно реализованих потпрограма написати главни програм који добија четири аргумената преко командне линије. Главни програм треба да провери да ли су проследјени аргументи валидни реални бројеви и уколико јесу да од прва два формира једна комплексан број, а од друга два други комплексни број. Након тога потребно је наћи и исписати суму два комплексна броја, као и коњугиоване вредности оригиналних комплексних бројева. Уколико аргументи не представљају валидне реалне бројеве потребно је прекинути извршавање програм са повратном вредношћу 0.
Прва функција
#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;
}
Друга функција
#include "types.h"
void conjugate ( ComplexNumber *a ) {
a->imaginary *= -1;
}
Трећа функција
#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);
}
Четврта функција
#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);
}
Пета функција
#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;
}