Forum » Programiranje » [C++] Problem pri nalogi v šoli
[C++] Problem pri nalogi v šoli
gremla ::
Lep pozdrav!
Torej rabil bi pomoč pri naslednjem problemu:
V šoli smo dobili nalogo da naj napišemo program kateri sprejme neke podatke jih obdeluje in izpiše rezultat (nebom zaj šel v podrobnosti ker sem to naredil in deluje)
Nadalna navodila pravijo da morajo biti vnešeni podatki samo cela ali realna števila ter ta števila ne smejo biti manjša od nič in večja od sto. Torej če bi ob vnosu podatkov stisnil kakšno črko, ločilo, štvilo+čtko, ... ter manjšo št. od nič in večjo od sto bi moral program javit napako in se ponovno postavit na položaj za vnos podatkov.
Problem s manjšo od nič in večjo od sto sem rešil, ne znam pa rešit problema s črko, ločilo, .... Kakšen ukaz moram za to vstavit ???
Moram pa povedet da sem začetnik in nimam veliko znanja.
Hvala za pomoč.
// Popravil naslov, da odraža vsebino teme - moderator
Torej rabil bi pomoč pri naslednjem problemu:
V šoli smo dobili nalogo da naj napišemo program kateri sprejme neke podatke jih obdeluje in izpiše rezultat (nebom zaj šel v podrobnosti ker sem to naredil in deluje)
Nadalna navodila pravijo da morajo biti vnešeni podatki samo cela ali realna števila ter ta števila ne smejo biti manjša od nič in večja od sto. Torej če bi ob vnosu podatkov stisnil kakšno črko, ločilo, štvilo+čtko, ... ter manjšo št. od nič in večjo od sto bi moral program javit napako in se ponovno postavit na položaj za vnos podatkov.
Problem s manjšo od nič in večjo od sto sem rešil, ne znam pa rešit problema s črko, ločilo, .... Kakšen ukaz moram za to vstavit ???
Moram pa povedet da sem začetnik in nimam veliko znanja.
Hvala za pomoč.
// Popravil naslov, da odraža vsebino teme - moderator
- spremenil: Mavrik ()
c0dehunter ::
char vhod; ... if(vhod < 48 && vhod > 57) //prebral si nekaj drugega kot število
Zakaj mora biti med 48 in 57? Poglej si ASCII oz. UTF8 tabelo.
I do not agree with what you have to say,
but I'll defend to the death your right to say it.
but I'll defend to the death your right to say it.
Zgodovina sprememb…
- spremenilo: c0dehunter ()
win64 ::
float stevilka; cout << " ponovno vnesi: "; while (!(cin >> stevilka)) //operator >> vrne false, če je pri vnosu bila napaka (fail flag) { cout << "Ni stevilka, ponovno vnesi:" << endl; cin.clear(); cin.ignore(numeric_limits<streamsize>::max(), '\n'); }
amacar ::
#include <string> #include <iostream> using namespace std; int main () { string a; bool naprej; do { cin>>a; naprej=true; for(int x=0;x<a.size();x++) { if (!isdigit(a[x])) { if(a[x]!='.') if(a[x]!=',') naprej=false;; } } } while(naprej==false); return 0; }
To bi blo pogojno ok. Zakaj pogojno, ker sprejme tudi nize kot so (",."),(",0"),("4 5") itd...
gremla ::
Hvala za odgovore. Bom vstavil v moj program da vidim kak to deluje, pa javim, če mi bo kaj nejasnega :))
Hvala
Hvala
gremla ::
amacar in win64 hvala vama za odgovor, obe kodi delujeta super.
Imam pa eno veliko prošnjo za vaju. Prosil bi vaju če bi lahko napisala korak za korakom kaj pomeni določen ukaz in za kaj je napisan. Določene stvari so mi razumljive ne pa vse in rad bi razumel celo kodo za nadaljne programe. Prosim in haval.
Imam pa eno veliko prošnjo za vaju. Prosil bi vaju če bi lahko napisala korak za korakom kaj pomeni določen ukaz in za kaj je napisan. Določene stvari so mi razumljive ne pa vse in rad bi razumel celo kodo za nadaljne programe. Prosim in haval.
win64 ::
cin je tipa istream(input stream):
http://www.cplusplus.com/reference/iost...
operator >> formatira prebrane podatke v dane spremenljivke. Operator si lahko zamisliš kot metodo in jo lahko kličeš tudi tako: cin.operator >>(stevilka). Vrača pa referenco do samega sebe, v tem primeru cin. Če ovrednotimo to vrednost, dobimo vrednost 0 ali nekaj kar ni nič(ali bool v nekaterih implementacijah).
Za dodatne informacije o metodah poglej zgornji naslov.
http://www.cplusplus.com/reference/iost...
operator >> formatira prebrane podatke v dane spremenljivke. Operator si lahko zamisliš kot metodo in jo lahko kličeš tudi tako: cin.operator >>(stevilka). Vrača pa referenco do samega sebe, v tem primeru cin. Če ovrednotimo to vrednost, dobimo vrednost 0 ali nekaj kar ni nič(ali bool v nekaterih implementacijah).
while (!(cin >> stevilka)) //while((cin.operator >>(stevilka)) == 0) // dokler je vnešena vrednost pravilna { cout << "Ni stevilka, ponovno vnesi:" << endl; // ponovno pozovemo za vnos cin.clear(); // izpraznimo fail flag(ignoriramo napako) cin.ignore(numeric_limits<streamsize>::max(), '\n'); // izpraznimo vse kar je bilo vnešeno }
Za dodatne informacije o metodah poglej zgornji naslov.
amacar ::
naprej=true; //predpostavimo, da je ok vpisano for(int x=0;x<a.size();x++) // za vse znake v stringu preverimo { if (!isdigit(a[x]))// preverimo če ni številka { if(a[x]!='.') // če znak ni . if(a[x]!=',') // če znak ni , naprej=false; //če torej vnešen znak ni ne številka, pika ali vejica, vnešeno ni bilo število in zato ponovimo zanko za vnos števila } }
win64 ::
sicer je ta druga rešitev pravilna, če se pričakuje, da uporabnik ne vnese . ali vejice 2krat.
Tako primeri, kot so: 1...4 4,555..4 ...,..., program obravnava kot pravilne
Tako primeri, kot so: 1...4 4,555..4 ...,..., program obravnava kot pravilne
prox ::
#include <iostream> #include <cstdlib> using namespace std; int s[10]; void vnos() { cout << "Vnesi 10 stevil \n\n"; for(int i=0; i<10; i++) cin >> s[i]; } void vrni_najmanjse() { int min = s[0]; for(int i=1; i<10; i++) { if(s[i] < min) min = s[i]; } return min; int main() { vnos(); cout << "Najmanjse stevilo je: " << vrni_najmanjse()"\n\n"; system("PAUSE"); return 0; }
Zanima me kaj bi tu lahko bilo narobe? Napiše mi da je napaka v int main().
Tako je naredil učitelj v šoli in je delalo, meni pa ne dela, pa sem iskal napake..
Vidi kdo kje kakšno napako? Hvala.
>>Rajš sn od slo-tech/a odvisn kot pa od Facebooka<<
|Asus K55VJ | Intel i5-3210m | 8Gb ram | nVidia GT635m|
|Asus K55VJ | Intel i5-3210m | 8Gb ram | nVidia GT635m|
amacar ::
Napako imaš, da je funkcija vrni_najmanjse void, ti pa vračaš int. Pozabil si } za zaključit funkcijo vrni_najmanjše, pozabil si
Spodnja koda deluje.
<<pred
"\n\n"
Spodnja koda deluje.
#include <iostream> #include <cstdlib> using namespace std; int s[10]; void vnos() { cout << "Vnesi 10 stevil \n\n"; for(int i=0; i<10; i++) cin >> s[i]; } int vrni_najmanjse() { int min = s[0]; for(int i=1; i<10; i++) { if(s[i] < min) min = s[i]; } return min; } int main() { vnos(); cout << "Najmanjse stevilo je: " << vrni_najmanjse()<<"\n\n"; system("PAUSE"); return 0; }
Zgodovina sprememb…
- spremenil: amacar ()
prox ::
Uf..hvala lepa, sploh nisem opazil.
>>Rajš sn od slo-tech/a odvisn kot pa od Facebooka<<
|Asus K55VJ | Intel i5-3210m | 8Gb ram | nVidia GT635m|
|Asus K55VJ | Intel i5-3210m | 8Gb ram | nVidia GT635m|
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | programiranje krožek(pomoč)Oddelek: Pomoč in nasveti | 2774 (1762) | Marat |
» | [C++] vprašanja (strani: 1 2 3 4 5 6 7 8 9 )Oddelek: Programiranje | 27443 (11989) | aljazko1995 |
» | Pomoč pri programiranju v C++Oddelek: Programiranje | 1824 (1391) | amacar |
» | vprasanje c++Oddelek: Programiranje | 2481 (2480) | Volk| |
» | c++ datotekeOddelek: Programiranje | 4061 (3550) | Vesoljc |