Mi a hiba a feladatban?
Komplex számokat kéne összeadni, kivonni, szorozni és kiiratni "a+bi" formában. Az összeadás, kivonás, szorzás függvényeknél azt írja ki futtatáskor, hogy 'Komplex'et vár, de int-et kap.
#include <stdio.h>
/* Feladat: Definialj egy 'Komplex' nevu strukturat
ami egy komplex szamot kepes reprezentalni.
A 'Komplex' strukturanak ketto eleme van:
* 'valos': a komplex szam valos reszet tartalmazza
* 'kepzetes': a komplex szam kepzetes reszet tartalmazza
Minden elem legyen valos tipusu.
Komplex szamok a "vadonban" az alabbi formaban vannak:
a + bi
Ahol 'a' a valos resze es 'b' a kepzetes resze a komplex szamnak.
Az 'i' pedig a kepzetes reszt "suffixe".
*/
typedef struct Komplex{
int valos;
int kepzetes;
} Komplex;
Komplex komplex_osszeadas(Komplex left, Komplex right)
{
/* Feladat: 'left' es 'right' komplex szamok osszeadasa es
az osszeadott komplex szamot visszadani.
Komplex szamok osszeadasa:
(a+bi) + (c+di) = (a+c) + (b+d)i
*/
return (left.valos+right.valos)+(left.kepzetes+right.kepzetes);
}
Komplex komplex_kivonas(Komplex left, Komplex right)
{
/* Feladat: 'left' es 'right' komplex szamok kivonasa es
az eredmennyel visszaterni.
Komplex szamok kivonasa:
(a+bi) - (c+di) = (a-c) + (b-d)i
*/
return (left.valos-right.valos)+(left.kepzetes-right.kepzetes);
}
Komplex komplex_szorzat(Komplex left, Komplex right)
{
/* Feladat: 'left' es 'right' komplex szamok osszeszorzasa
es az eredmennyel visszaterni.
Komplex szamok szorzasa:
(a+bi) * (c+di) = (a*c - b*d) + (b*c - a*d)i
*/
return ((left.valos*right.valos)-(left.kepzetes*right.kepzetes))+((left.kepzetes*right.valos)-(left.valos*right.kepzetes));
}
void komplex_print(Komplex value)
{
/* Feladat: A 'value' komplex szam kiiratas az stdout-ra az
alabbi formaban:
a + bi
*/
printf("%d", &value);
}
int main()
{
char muvelet;
printf("Muvelet [+, -, *]: ");
scanf("%c", &muvelet);
/*****/
Komplex left;
scanf("%d %d", &left.valos, &left.kepzetes);
Komplex right;
scanf("%d %d", &right.valos, &right.kepzetes);
/* Feladat: Belovasni egy komplex szamot a 'left' valtozoba stdin-rol */
/* Feladat: Beolvasni egy komplex szamot a 'right' valtozoba stdin-rol */
/*****/
Komplex result;
switch (muvelet) {
case '+':
result = komplex_osszeadas(left, right);
break;
case '-':
result = komplex_kivonas(left, right);
break;
case '*':
result = komplex_szorzat(left, right);
break;
default:
printf("Ervenytelen muvelet.\n");
return -1;
}
printf("Eredmeny: ");
komplex_print(result);
printf("\n");
return 0;
}
Létrehozol a függvényben egy komplexet, annak adod értékül, és azt adod vissza.
Tessék, összeadásra: a többit írd meg!
Komplex komplex_osszeadas(Komplex left, Komplex right)
{
Komplex eredmeny;
eredmeny.valos=left.valos+right.valos;
eredmeny.kepzetes=left.kepzetes+right.kepzetes;
return eredmeny;
}
A komplex_print(Komplex value) így néz ki nálam:
Komplex result;
printf("%d+%di", value.valos, value.kepzetes);
És az outputom így, ha + 2 3 4 5 az input:
Muvelet [+, -, *]: Eredmeny 6+8i
Az inputnak előszőr a Muvelet [+, -, *] kéne kiírni, nem a végén. Ez miért lehet?
Kapcsolódó kérdések:
Minden jog fenntartva © 2025, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!