tätä pähkäilen.ei sytytä.
Eka arvotaan joku luku 0 ja 100 väliltä.
Sitten kysytään onko luku pienempi(p) vai suurempi(s) kuin 50.
Tulostetaan arvasit oikein tai arvasit väärin.
joitain neuvoja mielellään otan vastaan, en hae valmista koodia.
#include <stdio.h> #include <stdlib.h> #include <time.h> int main(void) { int x; int arvaus; int s,p; srand(time(NULL)); { x = rand() % 100; while (x!=arvaus) { printf("Onko luku pienempi (p) vai suurempi (s) kuin 50\n"); if (x==arvaus) { printf("\nArvaus oli aivan oikein:\n"); } if (x<arvaus) { printf("Arvaus oli väärin:\n"); } } } }
Kuka arvaa, kone vai sinä?
Mieti mitä tapahtuu ruudulla ja koneen sisällä joka rivin kohdalla.
Milloin arvaus
saa arvonsa ja miten?
Käytä debuggeria, joka näyttää mikä rivi on menossa, askella rivi kerrallaan, tutki debuggerilla muuttujien sisältöä.
kone arpoo ja pyytää käyttäjää arvaamaan.
Tuostahan puuttuu täysin käyttäjältä syötteen pyytäminen, pyydä se scanf():n kanssa. Kun olet saanut merkin, tutki onko merkki p, jos se on p ja arvottu luku on pienempi kuin 50, ohjelma tulostaa "Kyllä, se oli pienempi!". Taaseen, jos syöte oli p ja arvottu luku on suurempi kuin syöte, voit laittaa ohjelmasi tulostamaan "Ei ei, luku on kylläkin suurempi". Muista tehdä kanssa suuremmalle samat funktiot. Helpostihan tuossa tulee bugi, jos luku onkin 50, joten siihenkin voisi laittaa jonkin ratkaisun (kysyä esim, onko luku suurempi vai pienempi kuin 50,5).
Voisit kyselyn rakentaa vaikkapa näin:
JOS(syöte==p) { JOS(arvottuluku < 50,5) TULOSTA("Arvasit oikein! se oli pienempi"); MUUTEN TULOSTA("Ei ei, sehän oli suurempi kuin 50,5"); }
Varmasti joku guru tekisi tämän tehokkaammin, mutta noin minä ajattelisin sen :) Varmaankin on parasta tehdä niinkuin itse hoksaa. Esimerkki on tehty tuollaisella kuvitteellisella kielellä, koska et halunnut valmista koodia, ohjelmointi-iloa :D
Hei taas!
Tässä mietiskelly tätä ohjelmaa. En ole ihan päässyt jyvälle. Vinkkejä?:)
#include <stdio.h> #include <conio.h> #include <stdlib.h> #include <time.h> int main(void) { int x; //arvottu luku int p; int s; srand(time(NULL)); { x = rand() % 100; { printf("Arvaa onko luku suurempi(s) vai pienempi(p) kuin 50:\n"); scanf("%s"); if(x == p) { if (x < 50,5) { printf("\nArvasit oikein!!\n"); } else { printf("Arvasit väärin!!\n"); } } if(x == s) { if (x > 50,5) { printf("\nArvasit oikein!!\n"); } else { printf("Arvasit väärin:\n"); } } } } }
Eikai vaan oo joku koulutehtäväs?:)
Suosittelisin että luet ajatuksella edelliset viestit ja toimit niiden mukaan. Itse varmaan toteuttaisin ohjelman seuraavasti:
1: Muuttuja esittelyt ja alustukset
2: Tulostetaan ruudulle ("Arvaa onko luku suurempi(s) vai pienempi(p) kuin 50:")
3: Luetaan käyttäjän syöte
4: tarkistetaan
JOS (KäyttäjänSyöte == 's')
JOS (luku > 50,5) tulostetaan ("Arvasit aivan oikein!")
MUUSSATAPAUKSESSA tulostetaan ("Arvasit väärin!")
JOS (KäyttäjänSyöte == 'p')
JOS (luku < 50,5) tulostetaan ("Arvasit aivan oikein!")
MUUSSATAPAUKSESSA tulostetaan ("Arvasit väärin!")
Eli ei paljoa tarvi muokata tota sun koodia että noin toimisi. Vinkkinä vielä että mieti mitä noissa sun ehtolauseissa (if else) vertaillaan, sitä että missä noita { } merkkejä tarvitaan ja mikä on minkäkin muuttujan tarkoitus. Nii ja huomaa että sun main funktion ois tarkotus palauttaa int joten return 0; lopussa ois paikoillaan ja koska sulla on tuolla toi conio.h ni voisit sieltä käyttää semmosta ku getch(); ohjelman lopussa ni ohjelma jää odottelemaan käyttäjän painallusta eikä vain välähdä.
Edit:Säätö
on on, nimenomaan koulutehtävä, mutta jos painit jonkun ongleman kanssa niin eikai sillä oo väliä mistä hakee neuvoja.
valmista koodia en edelleenkään hae.
scanf("%s");
Eihän tuossa ole lainkaan muuttujaa, johon luet!! Marssi oppaista kertaamaan scanf():n syntaksi. Muutappa muuttujien nimet kuvailevammaksi, jolloin ajatuksesi alkavat luonaamaan paremmin. Tarvitset ainakin seuraavia:
unsigned short int arvottuLuku; char syote;
Sitten tutkit vaikkapa näin:
JOS(arvottuLuku < 50,5) { TUTKINTA(syote) { TAPAUKSESSA 's': TULOSTA "se ei ollut suurempi, vaan pienempi" POISTU TAPAUKSESSA 'p': TULOSTA "aivan oikein!! se oli pienempi" POISTU OLETUS: TULOSTA "syötteesi oli virheellinen, tarkista syöte" POISTU } } jne
Tarkista näin sitten myös, jos luku onkin suurempi kuin 50,5. TUTKINTA rakenteen vastine C-kielessä on switch-rakenne. Valmista koodia en antanut nytkään, mutta erittäin johdattelevaa. Kotiläksyksi jää järjen selventäminen ja mietiskely, miten asia käy. Kirjoita vaikkapa tuollaisella "järkikielellä" tekstitiedostoon, mitä aiot koodata. Koodaa sitten sen jälkeen, kun olet ajatellut, miten ohjelma rakentuu.
Älä käytä getch():iä, vaan suorita ohjelmasi komentorivillä. Parempi opetella olemaan ilman tuota funktiota. Jos koodaisit C++:lla, niin voisit käyttää cin.get() funktiota näpäytyksen odottelemiseen.
Ota hyvä C-opas käteen ja opettele seuraavia: switch, if-else, scanf ja kertauksen vuoksi printf, vaikka siinä ei näyttänyt olevan ongelmia (en silti tiedä, pahemmin kun kerta en ole tutustunut C:hen, koska C++ on se, mitä itse käytän ja pidän järkevänä käyttää.
Tulipas pitkä viesti, toivottavasti siitä oli jotain apua.
Tee ohjelma vaihe kerrallaan. Jokaisen vaiheen jälkeen aja ohjelma ja katso toimiiko se.
Nuo kaikki pitäisi kyllä osata, ja jos et osaa, niin sitten opettelet jostakin perusoppaasta. Vaihe kerrallaan (vaikka kaikki erillisinä ohjelmina ensin) on mahdollisuuksiakin oppia. Aivan turha kirjoittaa noin virheellistä koodia paljon kerralla.
Siis lyhyissä pätkissä ja tiheästi käännöksiä ja testausta. Kannattaa opetella myös kääntäjän antamia virheitä lukemaan. (Jos jotakin tyhmää VIOPEa käytät, niin hanki ihmeessä oikea kääntäjä.)
Aihe on jo aika vanha, joten et voi enää vastata siihen.