Mi a hiba a programomban?
Készítsen programot, amely tetszőleges számú téglalap területét számítja ki. A számolást a program addig végezze, amíg bármelyik bemenő adat nem nulla. A feladatot elöl tesztelő ciklussal oldja meg!
ez a feladat és én így oldottam meg de vmi nem jó és nem tudom hogy mi
#include <stdio.h>
#include <stdlib.h>
int main ()
{
int a,b,terulet;
printf("\n Kerem a: "); scanf("%d",&a);
printf("\n kerem b: "); scanf("%d",&b);
b=a;
while(a!=0 || b!=0)// a program 0-ra áll le .
{
terulet=a*b;
printf("terulet: %d \n",terulet);
printf("\n Kerem a: ");scanf("%d",&a);
printf("kerem b: "); scanf("%d",&b);
}
printf("\n terulet : %d \n",terulet);
system("Pause");
}
#include <stdio.h>
#include <stdlib.h>
int main ()
{
int a,b,terulet;
printf("a = ");
scanf("%d",&a);
printf("b = ");
scanf("%d",&b);
while(a!=0 && b!=0)// a program 0-ra áll le .
{
terulet=a*b;
printf("terulet: %d\n",terulet);
printf("a = ");
scanf("%d",&a);
printf("b = ");
scanf("%d",&b);
}
system("Pause");
}
én a helyedbe ugy csinálnám hogy elkezdem a ciklust, bekérem kiszámolom kiirod, és aztán a feltétel.
az elöltesztelős cikls meg igy néz ki: do
{amit a ciklsba irsz}
while (feltétel)
Két hiba van.
1. A bekérés után az a oldalnak újra értéket adsz, így konkrétan egy négyzetet számolsz.
2. a Ciklus feltétele helytelen, ÉS operátort kell használnod, hiszem ha bármelyik nulla meg kell állnod.
Amúgy az elöl tesztelő ciklus nem a legjobb megoldás
Nem tudok C-ben programozni, de szerintem ez kábé azt csinálja, amit szeretnél:
#include <stdio.h>
int main ()
{
int a,b,terulet;
terulet=1;
while(terulet!=0)// a program 0-ra áll le .
{
printf("Kerem az a oldal hosszusagat: "); scanf("%d",&a);
printf("Kerem a b oldal hosszusagat: "); scanf("%d",&b);
terulet=a*b;
if (terulet!=0)
{printf("Terulet: %d\n",terulet); printf("\n");}
else
printf("Vege a programnak.\n");
}
getchar();
return 0;
}
Engedelmeddel átírtam az idétlen „Kerem a:”, „Kerem b:” bekéréseket is. Szerintem egyébként nem elegáns, hogy a program akkor is bekéri a második értéket, ha elsőre megkapta a nullát, tehát biztosan ki kell lépnie.
„Ciklus feltétele helytelen”
Az speciel helyes... Ha OR helyett ÉS lenne, csak akkor lépne ki, ha mindkét érték 0 volna.
Módosítás, amelyik első nullára is kilép:
#include <stdio.h>
int main ()
{
int a,b;
a=1;
while(a!=0){
printf("Kerem az a oldal hosszusagat: "); scanf("%d",&a);
if(a!=0){
printf("Kerem a b oldal hosszusagat: "); scanf("%d",&b);
a=a*b;
if(a!=0){printf("Terulet: %d\n",a); printf("\n");}
}
}
printf("Vege a programnak.\n");
getchar();
return 0;
}
Hátultesztelős ciklussal, a negatív terület kiküszöbölésével:
#include <stdio.h>
#include <stdlib.h>
int main ()
{
int a,b; a=1;
do{
printf("Kérem az a oldal hosszúságát: "); scanf("%d",&a);
if(a!=0){
printf("Kérem a b oldal hosszúságát: "); scanf("%d",&b); a=a*b;
if(a!=0){printf("Terület: %d\n",abs(a)); printf("\n");}
}
}while(a!=0);
printf("Vége a programnak.\n"); getchar(); return 0;
}
Ha nem akarod az abs() miatt becsatolni a <stdlib.h>-t:
#include <stdio.h>
int main ()
{
int a,b; a=1;
do{
printf("Kérem az a oldal hosszúságát: "); scanf("%d",&a);
if(a!=0){
printf("Kérem a b oldal hosszúságát: "); scanf("%d",&b);
a=a*b; if (a<0) a=a*-1;
if(a!=0){printf("Terület: %d\n",a); printf("\n");}
}
}while(a!=0);
printf("Vége a programnak.\n"); getchar(); return 0;
}
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, 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!