Програмирање 2/Блок 3 — разлика између измена
Пређи на навигацију
Пређи на претрагу
(ovako je bolje) |
м (Ovako je još bolje) |
||
| Ред 10: | Ред 10: | ||
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: | 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=== | ===Prva funkcija=== | ||
<syntaxhighlight lang = "c"> | <syntaxhighlight lang = "c"> | ||
Верзија на датум 28. јул 2020. у 20:28
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;
}