Forum » Programiranje » [Naloga][C++] polje(znaki,cifre)
[Naloga][C++] polje(znaki,cifre)
cosa nostra ::
Ko podam samo cifre deluje ok.ko podam pa še črke pa mi jih šteje pod cifre ter sešteva (vsota) Mogo bi pretvorit samo nevem kje.lp hvala
int main() { string bes; short a; a=0; short j; j=0; short vsota; vsota=0; short i; i=0; cout<<"Podaj poljubno besedilo"<<endl; getline(cin,bes); do { if(bes[j]>='0' and bes[j] <='9'); { j=j+1; } vsota=vsota+j; if((bes[i]>='A'and bes[i]<='Z') and (bes[i]>='a'and bes[i]<='z')); { i=i+1; } a=a+1; }while(bes[j]!='\0'); cout<<"V BESEDILU JE "<<a<<"ZNAKOV"<<endl; cout<<"V BESEDILU JE "<<j<<"CIFER"<<endl; cout<<"VSOTA CIFER JE "<<vsota<<endl; cout<<"V BESEDILU JE "<<i<<"CRK"<<endl; system("pause");// da is ogledam rezultate na zaslonu return 0; }
kuall ::
in spremeni
vsota=vsota+j;
v
vsota=vsota+bes[j]-'0';
ker če si pogledaš http://www.asciitable.com/ boš videl da je '0' v resnici številka 48, '
1' je 49, '2' je 50 itd.
pa spremeni imena spremenljivk za božjo voljo:)
j v stCifer, a v stZnakov, i v stCrk, za boljšo preglednost kode.
vsota=vsota+j;
v
vsota=vsota+bes[j]-'0';
ker če si pogledaš http://www.asciitable.com/ boš videl da je '0' v resnici številka 48, '
1' je 49, '2' je 50 itd.
pa spremeni imena spremenljivk za božjo voljo:)
j v stCifer, a v stZnakov, i v stCrk, za boljšo preglednost kode.
Zgodovina sprememb…
- spremenilo: kuall ()
cosa nostra ::
[st.citat p4006945]in spremeni
vsota=vsota+j;
v
vsota=vsota+bes[j]-'0';
Če naredim tako mi še cifer ne pravilno sešteva. 1+2+3 =-43.
Problem mam tudi da če podam 123ab mi šteje kao 5 cifer in 5 črk.)
vsota=vsota+j;
v
vsota=vsota+bes[j]-'0';
Če naredim tako mi še cifer ne pravilno sešteva. 1+2+3 =-43.
Problem mam tudi da če podam 123ab mi šteje kao 5 cifer in 5 črk.)
GupeM ::
Vse napake:
Podpičja za if stavki: Neglede na to, ali if stavek drži ali ne, tisto kar je za njim se ti bo vedno izvedlo, ker si dodal podpičje takoj za if stavkom.
V if stavkih ne uporabljaj bes[j] in bes[i], ker i in j se povečata samo takrat, kadar pogoj drži. Uporabljaj bes[a], ki se poveča pri vsaki iteraciji.
Glej prejšnji popravek tudi za while(...) del.
vsota=vsota+j; mora biti znotraj prvega if stavka (povečaš jo samo če je cifra).
vsota=vsota+j; ni pravilno zapisana: v tem primeru vsoti prišteješ zaporedno številko cifre.
Drugi if stavek se izvede samo če je črka med A in Z IN HKRATI med a in z. Kar pa ne bo nikoli. Izvesti se mora če je črka med A in Z ALI med a in z.
To pa mislim da je tudi vse
Podpičja za if stavki: Neglede na to, ali if stavek drži ali ne, tisto kar je za njim se ti bo vedno izvedlo, ker si dodal podpičje takoj za if stavkom.
V if stavkih ne uporabljaj bes[j] in bes[i], ker i in j se povečata samo takrat, kadar pogoj drži. Uporabljaj bes[a], ki se poveča pri vsaki iteraciji.
Glej prejšnji popravek tudi za while(...) del.
vsota=vsota+j; mora biti znotraj prvega if stavka (povečaš jo samo če je cifra).
vsota=vsota+j; ni pravilno zapisana: v tem primeru vsoti prišteješ zaporedno številko cifre.
Drugi if stavek se izvede samo če je črka med A in Z IN HKRATI med a in z. Kar pa ne bo nikoli. Izvesti se mora če je črka med A in Z ALI med a in z.
To pa mislim da je tudi vse
cosa nostra ::
Deluje vse
int main() { string bes; short a; a=0; short j; j=0; short vsota; vsota=0; short i; i=0; short n; n=0; cout<<"Podaj poljubno besedilo"<<endl; getline(cin,bes); do { if(bes[a]>='0' and bes[a] <='9') { j=j+1; vsota=vsota+bes[a]-48 ; } if((bes[a]>='A'and bes[a]<='Z') or (bes[a]>='a'and bes[a]<='z')) { i=i+1; } if(bes[a]>='!'and bes[a]<='/') { n=n+1; } a=a+1; }while(bes[a]!='\0'); cout<<"V BESEDILU JE "<<a<<"ZNAKOV"<<endl; cout<<"V BESEDILU JE "<<j<<"CIFER"<<endl; cout<<"VSOTA CIFER JE "<<vsota<<endl; cout<<"V BESEDILU JE "<<i<<"CRK"<<endl; cout<<"V BESEDILU JE "<<n<<" drugih znakov"<<endl; system("pause");// da is ogledam rezultate na zaslonu return 0;
roba87 ::
Super, da ti deluje, ampak čimprej se poskušaj navadit na neko obliko, ko pišeš kodo. Uporabljaj Visual Studio, če imaš Windows. Izogni se uporabi "and" "or" in jih zamenjaj z "&&" "||". Koda pa naj izgleda približno tako...
#include <iostream> #include <string> using namespace std; int main() { string bes; short int a = 0; short int j = 0; short int vsota = 0; short int i = 0; short int n = 0; cout <<"Podaj poljubno besedilo"<< endl; getline(cin,bes); do { if (bes[a] >= '0' && bes[a] <='9') { j = j + 1; vsota = vsota + bes[a] - 48; } if ((bes[a] >= 'A'&& bes[a] <= 'Z') || (bes[a] >= 'a' && bes[a] <= 'z')) { i = i + 1; } if (bes[a] >= '!' && bes[a] <= '/') { n = n + 1; } a = a + 1; } while(bes[a] != '\0'); cout <<"V BESEDILU JE "<< a <<"ZNAKOV"<< endl; cout <<"V BESEDILU JE "<< j <<"CIFER"<<endl; cout <<"VSOTA CIFER JE "<< vsota << endl; cout <<"V BESEDILU JE "<< i <<"CRK"<< endl; cout <<"V BESEDILU JE "<< n <<" drugih znakov"<< endl; system ("pause");// da is ogledam rezultate na zaslonu return 0; }
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | Pomoč pri sestavi algoritmaOddelek: Programiranje | 9280 (8111) | mihy11 |
» | c# - pretvorba short[2] v floatOddelek: Programiranje | 3845 (3458) | KernelPanic |
» | Rabim pomoc!Oddelek: Programiranje | 1095 (904) | FrEaKmAn |
» | Založbe zahtevale za 75 bilijonov odškodnine od p2p ponudnika LimeWireOddelek: Novice / Avtorsko pravo | 8000 (6249) | MrStein |
» | [Java] programiranje "praštevila"Oddelek: Programiranje | 2533 (2411) | blaz_ |