Elkezdtem C-ben programmozni, és nagyon sokszor megakadok itt még az elején for, while ciklus tömbök stb, van egypár dolog ami nehezen megy, mindenkinek ilyen nehezen ment az első nyelvénél a kezdet, vagy csak én vagyok hülye hozzá?
Ne aggódj, ez teljesen természetes. A programozáshoz kell egyfajta gondolkodásmód, amit muszáj megérteni, megismerni, ha programozni akarsz.
Bizonyára van valamilyen feladat, amit meg akarsz oldani, hiszen ezért írsz programot. Legyen ez most az a feladat, hogy kérjünk be életkorokat, majd határozzuk meg, hogy hány éves a legfiatalabb és a legidősebb. Először csak írd le magadnak, hogy ehhez mit kell csinálni, és ha belefutsz valamilyen összetett részbe, azt fejtsd ki.
Kezdésnek:
- Tudnunk kell, hány emberről van szó, és ezt be is kell kérni kezdésnek.
- Be kell kérni az életkorukat.
- Meg kell határozni, hogy hány éves a legidősebb és a legfiatalabb.
- Elmondjuk az eredményt.
A második pontot illetően... vajon ha már bekérem az életkorukat, akkor nem tudom abban a lépésben meghatározni, hogy hány éves a legidősebb és a legfiatalabb? Dehogynem, csak ehhez már menet közben is nyilván kell tartani ezeket:
- Tudnunk kell, hány emberről van szó, és ezt be is kell kérni kezdésnek.
- Tudnunk kell, hogy ki a legidősebb. Ez kezdetben legyen a legkisebb szám, ami "létezik", mert attól mindenki csak idősebb lehet.
- Tudnunk kell, hogy ki a legfiatalabb. Ez kezdetben legyen a legnagyobb szám, ami "létezik", mert attól mindenki csak fiatalabb lehet.
- Be kell kérni az életkorukat és meg kell határozni, hogy éppen ki a legidősebb és a legfiatalabb.
- Elmondjuk az eredményt.
Ebben még mindig van egy pont, ami összetett - beolvasni az életkorokat és közben kalkulálgatni. Ehhez egy további információra van szükségünk, mégpedig arra, hogy hányadik embernél járunk.
- Tudnunk kell, hány emberről van szó, és ezt be is kell kérni kezdésnek.
- Tudnunk kell, hogy ki a legidősebb. Ez kezdetben legyen a legkisebb szám, ami "létezik", mert attól mindenki csak idősebb lehet.
- Tudnunk kell, hogy ki a legfiatalabb. Ez kezdetben legyen a legnagyobb szám, ami "létezik", mert attól mindenki csak fiatalabb lehet.
- Tudnunk kell, hogy eddig hány ember életkorát olvastuk be. Ez kezdetben legyen nulla.
- Amíg nem olvastunk be annyi életkort, mint ahányról szó volt, akkor:
- - Beolvasom és tárolom az életkort.
- - Ha az életkor kisebb, mint az eddig talált legfiatalabb emberé, akkor tárolom, hogy innentől kezdve az éppen beolvasott életkor lesz a legfiatalabb emberé.
- - Ha az életkor nagyobb, mint az eddig talált legidősebb emberé, akkor tárolom, hogy innentől kezdve az éppen beolvasott életkor lesz a legidősebb emberé.
- - Tárolom, hogy még egy ember életkorát beolvastam.
- Elmondjuk az eredményt.
Nos, ez így már olyan elemi lépésekből áll, amit lényegében csak le kell fordítani C nyelvre. Hasonlóan, mintha magyarról angolra fordítanál.
#include <stdio.h>
#include <limits.h> //Ebben van benne a "létező" legkisebb és legnagyobb szám
int main() {
.. //Tudnunk kell, hány emberről van szó, és ezt be is kell kérni kezdésnek.
.. int emberek_szama;
.. printf("Emberek száma: ");
.. scanf("%d", &emberek_szama);
.. //Tudnunk kell, hogy ki a legidősebb. Ez kezdetben legyen a legkisebb szám, ami "létezik", mert attól mindenki csak idősebb lehet.
.. int legidosebb = INT_MIN;
.. //Tudnunk kell, hogy ki a legfiatalabb. Ez kezdetben legyen a legnagyobb szám, ami "létezik", mert attól mindenki csak fiatalabb lehet.
.. int legfiatalabb = INT_MAX;
.. //Tudnunk kell, hogy eddig hány ember életkorát olvastuk be. Ez kezdetben legyen nulla.
.. int beolvasva = 0;
.. //Amíg nem olvastunk be annyi életkort, mint ahányról szó volt, akkor:
.. while (beolvasva < emberek_szama) {
.. .. //Beolvasom és tárolom az életkort.
.. .. int aktualis_eletkor;
.. .. printf("%d. életkor: ", beolvasva + 1);
.. .. scanf("%d", &aktualis_eletkor);
.. ..
.. .. //Ha az életkor kisebb, mint az eddig talált legfiatalabb emberé, akkor tárolom, hogy innentől kezdve az éppen beolvasott életkor lesz a legfiatalabb emberé.
.. .. if (aktualis_eletkor < legfiatalabb) legfiatalabb = aktualis_eletkor;
.. ..
.. .. //Ha az életkor nagyobb, mint az eddig talált legidősebb emberé, akkor tárolom, hogy innentől kezdve az éppen beolvasott életkor lesz a legidősebb emberé.
.. .. if (aktualis_eletkor > legfiatalabb) legidosebb = aktualis_eletkor;
.. ..
.. .. //Tárolom, hogy még egy ember életkorát beolvastam.
.. .. beolvasva++;
.. }
.. //Elmondjuk az eredményt.
.. printf("Legfiatalabb: %d\n", legfiatalabb);
.. printf("Legidosebb: %d", legidosebb);
.. return 0;
}
Arra akarnék rávilágítani, hogy mielőtt nekiesel, gondold át magyarul, hogy mit akarsz csinálni és fejtsd ki olyannyira, hogy azt már a géppel is meg tudd értetni. Aztán ha tanulsz a for ciklusok működéséről, rájöhetsz, hogy ezt egyszerűsítheted vele és érteni is fogod, hogy miért. Ha sok programot írsz, idővel azt fogod érezni, hogy ez a fajta magyar nyelvű kifejtés teljesen felesleges, hiszen csípőből jön, hogy mit kell csinálni. Akkor viszont azt is észreveszed, hogy nem az ilyen kis dolgokon fogsz agyalni, hanem egyre bonyolultabb dolgokon.
(Jöhetnek a lepontozások.)
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!