Програмирање 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;
}