Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++: Apua ohjelmointiin

Sivun loppuun

ohjelmointipoika [28.03.2010 08:46:26]

#

Hei,

minun tulisi tehdä ihan alkeellisia ohjelmointi juttua c++:lla, tarvitsisin tälläiset koodit; (KOKONAISUUDESSAAN, ALUSTA LOPPUUN)

1. Ohjelma, joka pyytää käyttäjää antamaan joko vastaukseksi luvun 1 tai 2. Jos käyttäjä antaa luvun 1, ohjelma tulostaa "oikein", jos käyttäjä antaa luvun 2 ohjelma tulostaa "väärin"

2. Ohjelma, joka kysyy käyttäjältä kolme kokonaislukua ja tallettaa ne muuttujiin a, b ja c. Lopuksi ohjelma kertoo, onko luku c lukujen a ja b välissä vai välin ulkopuolella. Huomioi, että ohjelman pitäisi toimia riippumatta siitä onko a suurempi kuin b vai toisinpäin.

3. Pieni peli. Peli arpoo luvun väliltä 0-9 ja antaa käyttäjän arvata arvottua lukua. Käyttäjä arvaa niin kauan kunnes arvaus on oikein tai hän antaa syötteeksi jonkin muun kuin luvun väliltä 0-9 (esim. kirjain tai suurempi luku) Lopuksi peli kertoo oikean luvun ja arvausten lukumäärän.

4. Ohjelma, joka kysyy käyttäjältä kysymyksen "Oletko täysi-ikäinen? Vastaa k(kyllä) tai e(en)" , johon vastaus on kyllä (k) tai ei (e). Ohjelma kysyy samaa kysymystä käyttäjältä niin kauan kunnes vastaus on oikein.

RQ [28.03.2010 09:13:21]

#

Tästä voit lähteä liikkeelle. Noin alkeellisen koodin ohjelmoimisen oppimiseen ei kauheasti tarvitse vaivaa nähdä, riittää että lukee em. oppaan 3 ensimmäistä osaa. Kukaan toivottavasti ei anna valmista koodia, jos et jaksa edes yrittää itse.

ohjelmointipoika [28.03.2010 09:23:14]

#

Tässä aikaansaannokseni

#include <iostream>

int main(){
int 1;
int 2;

cin >> 1;

if(1 == 1){
cout << "Oikein";
}else{
cout << Väärin";
}
return 0;
}

Tulee vain hirveä kasa virheitä

Mod. lisäsi kooditagit

Teuro [28.03.2010 09:32:32]

#

Kääntäjäsi kertoi takuulla lähes samat virheet. Lisäksi vertailu on periaatteessa oikein, mutta tuo on aina tosi, joten else haaraa ei käsitellä koskaan...

Metabolix [28.03.2010 10:52:51]

#

Lue oppaita, niissä opetetaan. Kaikkea ei tarvitse oppia ensimmäisellä lukukerralla. Lue uudestaan ja tee kokeiluja oppaan esimerkkiohjelmilla; toisto kannattaa. (Jos et millään opi, olet varmaan valinnut vääränlaisen kurssin.)

Foorumin periaatteisiin kuuluu, että valmista koodia ei anneta ilman syytä, ja kysyjän laiskuus ei ainakaan ole hyvä syy. Olet itse mennyt ohjelmointikurssille, joten saat myös itse suorittaa sen; muuten et opi mitään etkä myöskään ole ansainnut kurssista saatavaa merkintää tai opintopisteitä. Selviytymällä itse ensimmäisestä ohjelmointikurssistasi opit toivottavasti myös yhden tärkeimmistä asioista: valmis koodi ei putoa taivaalta eikä myöskään synny arpomalla, vaan sen eteen on nähtävä jonkin verran vaivaa, aivan kuten matematiikan- tai fysiikantehtävienkin ratkaisujen. (Toki taitojen kasvaessa vaivat pienenevät; esimerkiksi nuo neljä ohjelmaa syntyisivät minulta ehkä nopeammin kuin tämä viesti.)

Apua noihin tehtäviin löytyy suoraan C++-oppaista, ja lisäksi olet varmasti saanut oppilaitoksen puolesta muuta materiaalia, oppitunteja tai luentoja. Oppaissa on myös runsaasti esimerkkejä, joita voit soveltaa omiin ongelmiisi.

Saa toki kysyä, jos jokin asia ei oppaiden huolellisen lukemisen jälkeenkään selviä. Asiaksi ei kuitenkaan kelpaa "miten teen tällaisen ohjelman", vaan ongelma pitäisi pystyä rajaamaan johonkin yksittäiseen kohtaan.

ohjelmointipoika [28.03.2010 20:15:56]

#

No hyvä tajusin jotenkin tuon vertailun, mutta miten toinen tehtävä on mahdollista suorittaa. Jos a = 1 ja b = 10 ja c = 8, niin tuo on ihan helppo se on välissä. Mutta jos a = 10 ja b = 1 ja c = 8, niin itse näen, että se on välissä, mutta tuloste on silti ulkopuolella. Tämä on kai joku kompa vai?

Metabolix [28.03.2010 20:18:06]

#

Ei, ei ole mikään kompa. Älä nyt hätäile vaan lue lisää. Esimerkiksi tuossa useaan kertaan linkitetyssä opassarjassa kerrotaan vertailuista ja niiden yhdistelystä JA- ja TAI-operaatioilla. Käytä paperia ja kynää ja kirjoita asiat matemaattisina kaavoina tai edes sanallisesti. Arvailemalla et saa mitään aikaan, vaan ohjelmoinnin perustana on oltava logiikka.

Mistä itse tiedät, että luku 8 on lukujen 10 ja 1 välissä? Mitä välissä oleminen oikeastaan tarkoittaa? Selitä.

ohjelmointipoika [28.03.2010 20:23:41]

#

Metabolix kirjoitti:

Mistä itse tiedät, että luku 8 on lukujen 10 ja 1 välissä? Selitä.

No 8 on enemmän kuin 1 ja vähemmän kuin 10 ihan helppoa.

vehkis91 [28.03.2010 20:53:35]

#

Nonni, nyt vaan muodostat ehdon, joka tarkistaa tuon...

Metabolix [28.03.2010 21:07:34]

#

ohjelmointipoika kirjoitti:

No 8 on enemmän kuin 1 ja vähemmän kuin 10 ihan helppoa.

Hienoa! Kirjoita tämä sitten muuttujilla a, b ja c ja C++:n operaattoreilla <, > ja &&. Mieti sitten, miten saat tarkistettua mainitsemasi kaksi tapausta (kun a ja b vaihtavat paikkaa), ja yhdistä nämä tapaukset ||-operaattorilla.

Edit. Ennen kuin kysyt kolmannen tehtävän arpomisesta, lue se kurssimateriaali ja tämä aiempi keskustelu.

ohjelmointipoika [28.03.2010 21:37:27]

#

Ajatelin jotakin tällaista, mutta nyt se sanoo, että on aina ulkopuolella, vaikka c arvo olisi ihan mikä vain. Ideana olisi siis noiden a:n ja b:n vaihto jos a on suurempi kuin b.

#include <iostream>

using namespace std;

int main(){

int a = 10 ;
int b = 1;
int c = 6;

if(a > b){
	b = a;
	a = b;
}

if(a < c && c < b){
	cout << "Välissä" << endl;
}else{
	cout << "Ulkopuolella" << endl;
}

return 0;
}

Metabolix [28.03.2010 21:42:29]

#

Mieti uudestaan tuota kohtaa, jossa yrität vaihtaa a:n ja b:n. Ajatus on oikea, mutta mitä vaihtokoodissa nyt tapahtuukaan? (Mitkä ovat muuttujien arvot ensimmäisen sijoituksen b = a jälkeen?) Ongelmaan on myös hyvin yksinkertainen ratkaisu.

Toinen vaihtoehto on, kuten aiemmin sanoin, tehdä varsinainen välissäolotarkistus kummallekin tapaukselle erikseen. Kannattaa toki oppimisen vuoksi toteuttaa kummatkin ratkaisut.

ohjelmointipoika [29.03.2010 19:52:32]

#

Muuttujien arvot ovat samat, joten vaihto ei ollut noin helppo. En ole varma saako apumuuttujaa käyttää, mutta otin riskin ja tällaisen tuloksen sain aikaan.

#include <iostream>

using namespace std;

int main(){

int a = 1 ;
int b = 10;
int c = 4;

if(a > b){
	int d;
	d = a;
	a = b;
	b = d;
}

if(a < c && c < b){
	cout << "Välissä" << endl;
}else{
	cout << "Ulkopuolella" << endl;
}

return 0;
}

Tulokset ovat ainakin ihan ok.

Metabolix [29.03.2010 19:59:55]

#

Aivan oikea ratkaisu, ja olisi outoa, jos tuota ei sallittaisi. Kokeile nyt kuitenkin harjoituksen vuoksi selvitä myös ilman arvojen vaihtamista. Tämä onnistuu tietenkin muokkaamalla jälkimmäistä if-lausetta niin, että se tarkistaa kummatkin tapaukset.

ohjelmointipoika [29.03.2010 20:07:19]

#

Näinkö?

#include <iostream>

using namespace std;

int main(){

int a = 10;
int b = 1;
int c = 4;

if(a < c && c < b){
	cout << "Välissä" << endl;
}else if(a > c && c > b){
	cout << "Välissä" << endl;
}else{
	cout << "Ulkopuolella" << endl;
}

return 0;
}

Metabolix [29.03.2010 20:16:50]

#

Tuo on yksi tapa. Voit myös yhdistää ehdot ||-operaattorilla, joka tarkoittaa "tai":

if ((ehto_acb) || (ehto_bca)) {
  // Välissä
} else {
  // Ulkopuolella
}

Muuten, kannattaisi sisentää myös main-funktion sisältöä yksi taso (kuten oppaiden esimerkeissä). Nyt se ei ehkä tunnu vielä tärkeältä, mutta kun ohjelmassa on useampi funktio, sisennys selkeyttää.


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta