Hogy kellene ezt a programot megírni?
A feladat az, hogy beírsz egy N számot, ezután a program bescannel N számot (tehát pl N=3 nál sorba bescannel 3 számot) és utána ellenőrzi őket, úgy, hogy az első számnak 0 és 10 között kell lenni, a többi számnak meg pl fele akkorának mint az utána lévő. Ha ezek a feltételek megvannak akkor kiírja hogy jó, ha nem teljesünek akkor rossz.
Nem kérem hogy írjátok meg a programot, csak a gondolatmenetbe segítseket...
Addig eljutottam hogy egy while ciklussal bescanneli az N számot ( while (i<N){i++; blabla}), de az ellenőrzésre nem jöttem rá...
próbáltam a while-on belül if-et használni, sikertelenül..
valahogy úgy kéne hogy amikor az i=1, tehát amikor az első számot olvassa, akkor azt ellenőrzi...
A switch parancsra gondoltam még, de azt még csak úgy használtam ha getchar-volt és karaktereket ellenőrzött...
Ötletek?
Az if-es miért nem ment?
Így lehetne például:
if (i == 1) {
// ...
} else {
// ...
}
Lehet, hogy a == helyett =-et használtál (előbbi az egyenlőségvizsgálat, utóbbi pedig az értékadás).
Az első számot ki is szervezheted a ciklusból.
1. bekéri N-et
2. bekéri az első számot, megvizsgálja
3. bekéri a 2..N számokat, megvizsgálja őket közben
A 2..N számok vizsgálatánál meg mindig eltárolod az előzőt, és az aktuálisat annak a feléhez hasonlítod.
Nem igazán értem a feladatot, pl mindig a szám kétszeresét kell beírni, vagy mi?
Mondjuk erre teljesen jó lenne, hogyha mindig eltárolnád az előzőt ("int elozo" vagy vmi), esetleg az, hogy volt-e előző (if (i)).
Az első számon mit ellenőrizne?
esetleg egy szemléletes tail recursion, bár elég légből kapott ötlet és felesleges, de valahogy így képzeltem(C nyelven lesz, mert nem tudom miben kell):
int N, elso;
scanf("%d", &N);
scanf("%d", &elso);
printf("%s", expect(elso*2, N)?"jo":"rossz");
a csodálatos függvény:
int expect(int mit, int melyseg) {
__int szam;
__scanf("%d", &szam);
__if (szam!=mit) return 0;
__if (!melyseg) return 1;
__return expect(mit*2, melyseg-1);
}
Nah szóval, egy olyan oldalon kell megírnom a programot, ahol az input már adott, tehát azon nem változtatok.
Konkrétan ezrt írja be a gép :
3
5
7
9
Az első szám az N, ami meghatározza hány szám van, és utána a többi szám. A konkrét feltétlek pedig : Első szám 0-10 között, a többire pedig érvényes hogy : 1. nem nagyobb mint az előtte lévő szám kétszerese, és nem kisebb mint az utána lévő szám fele.
Ha ezek a feltételek mind teljesülnek akkor kiírja hogy jó a feladat.
eddig ezt írtam :
int main()
{
int i=1,n,a;
scanf("%d\n",&n);
while (i<=n){
i++;
scanf("%d\n",&a);
}
return 0;
}
Persze ezen belül próbálkoztam sokmindennel, de ez a rész ami eddig biztos működik.
Ennél a feladatnál még nem vettük a fügvényeket, szóval kb ezekkel kellene megoldani : for, if, else, while, do-while, switch
A függvények nagyon új dolgot nem hoznak, mármint csak szebb lesz tőlük a program (sokkal, sokkal szebb..), ugyanez igaz a loopokra, ha már az egyiket tudod, kb. mindet(hátultesztelőt elöltesztelővel lehet gyártani, meg mindből mindet).
A feladathoz:
Az első számnak különleges a funkciója, tehát a kapcsolódó dolgokat vedd ki a loopból, tedd elé, ott ellenőrizd egy if-fel.
- A while feltétele jó, legalábbis egynek.
- Javasoltam egy korábbi hszben, hogy külön tárold el az előző számot(vagy az éppen beolvasottat, mit bánom én kell egy plusz változó), lényeg, hogy legyen _kettűűű_ darab számod, amit össze tudsz _hasonlítani_, másképp nem fog menni.
- Ha nem felel meg a feltételeknek (ez alapján gyanús, hogy if kell), akkor beállítasz egy változót(tehát kell még egy plusz változó), hogy nem jó.
- Amint vége a ciklusnak, megnézed ezt a változót, hogy jó, vagy nem jó (mondjuk 0<->1, ha nincs boolean)
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!