Csak félig működik a programom, elakadtam nem tduom hogyan kellene tvább? (c nyelv)
Maga a feladat: Írj programot, mely a billentyűzetről beolvas két egész számot, majd eldönti, hogy a nagyobb osztója-e a kisebbnek. Ha igen kiírja, ha nem akkor kiírja a hányadost és az osztási maradékot. A feladat megoldása során ne használj elágazást! (Gondolj a feltételes értékadásra!)
Ameddig jutottam :
#include <stdio.h>
int main()
{
int a,b,c;
printf("Adj meg 2db pozitiv szamot:\n");
scanf("%d\t%d",&a,&b);
c=( a>b && a%b==0 ? a/b : b/a );
printf("%d es %d hanyadosa: %d",a,b,c);
getchar();
return 0;
}
Tehát már csak az kellene, hogy ha nem osztható akkor kiírja a hányadost és a maraadékot, mivel nem osztható igy biztos hogy 0,xxxx lesz de ezt értékadó operátornak hogy "mondja meg"??
A printf sort cseréld ki erre:
(a % b == 0) ? printf("%d es %d hanyadosa: %d",a,b,c) : printf("Hanyados: %d, maradek: %d",c,a%b);
// Tegyük fel, hogy a nulla osztást nem kell figyelni.
// ..
int a,b,hanyados,maradék;
printf("Adj meg 2db pozitiv szamot:\n");
scanf("%d\t%d",&a,&b);
hanyados = a>b ? a/b : b/a;
maradek = a>b ? a%b : b%a;
printf("%d es %d hanyadosa: %d\nmaradek: %d\n%s",
a,b,hanyados,maradek,
maradek==0 ? "maradek nelkul oszthato" : ""
);
getchar(); // stb...
ez esetleg:
#include <stdio.h>
#include <stdlib.h>
main()
{
float a,b,c,hanyados,maradek;
float x,y;
printf("Adj meg 2db egesz szamot!\n");
scanf("%f\n",&a);
scanf("%f\n",&b);
x=a/b;
y=b/a;
c=(a>b ? printf("a ket szam hanyadosa: %f",x) : printf("%f es %f hanyadosa: %f",a,b,y) );
return 0;
}
de a printf("%f es %f hanyadosa: %f",a,b,y) nem ad pontos eredményt.
Amúgy a float típusnál a tizedesjegyeket hogyan lehet korlátozi, hogy csak pl 2 tizedesig legyen látható ?
Na végre :
#include <stdio.h>
int main()
{
int a,b,c;
int maradek;
int null;
printf("Adj meg 2db pozitiv szamot:\n");
scanf("%d\t%d",&a,&b);
maradek=(a%b);
null=0;
c=(a>b && a%b==0 ? printf("%d es a(z) %d hanyadosa: %d",a,b,a/b) :
printf("A szam hanyadosa: %d!\n",null) && printf("A hanyados maradeka: %d!\n",maradek));
getchar();
return 0;
}
Így jó ? a hanyados maradéka lényegében mindig a kissebbik szám lesz az (vagy is vagy 'a' változó) ?
AZ előző kommenteket kérem ne vegyétek figyelmbe!
(Nem nagyon gondoltam át a dolgokat)
#include <stdio.h>
int main()
{
int a,b,c;
int maradek;
int null;
printf("Adj meg 2db pozitiv szamot:\n");
scanf("%d\t%d",&a,&b);
maradek=(a%b);
null=0;
c=(a>b || a%b==0 ? printf("%d es a(z) %d hanyadosa: %d\n",a,b,a/b) && printf("A maradeka: %d",maradek) :
printf("A szam hanyadosa: %d!\n",null) && printf("A hanyados maradeka: %d!\n",maradek));
getchar();
return 0;
}
ez a sor: "printf("A maradeka: %d",maradek)" (első utasítás második fele) csak akkor jelenjen meg ha a maradék nem nulla
(1)pl: 50/2=25, de kiírja hogy a maradék : 0
(2)pl: 600/124 hanyados : 4 , maradek : 104--> így jó,
de az első pl-ban valahogy kilehetne "szedni", hogy a maradek:0 ne írodon ki ?
vagy nem, mivel ha kiszedem akkor a 2.pl-ban nem jelenik meg hogy 104 a maradek ami baj.
Nem tudom hogy az "elágazás" mire utal, de ezt legrövidebben így lehet megoldani
[...]
(a > b) ? (a % b == 0) ? printf("A(z) %d osztója a(z) %d -nak.", b, a) : printf("%d és %d hányadosa: %d", a, b, a%b) : (b % a == 0) ? printf("A(z) %d osztója a(z) %d -nak.", a, b) : printf("%d és %d hányadosa: %d", b, a, b%a);
[...]
Hát igen, a ?: operátor valójában egy elágazás, csak nem annyira látszik, mint egy if-nél. :)
Szóval ha a ? után utasításokat teszünk, az sima elágazás lesz.
Fentebbi válaszomban direkt próbáltam ezt elkerülni.
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!