Forum » Programiranje » [C++] Pomoč pri nalogi
[C++] Pomoč pri nalogi
Insane123 ::
Zdravo,
jaz bi potreboval pomoč pri tej nalogi. Načrt že imam ampak probleme imam kako bi jo izvedel. V mislih imam, da bi štel znake vsake besede saj je možno pri številih od 1 do 9 samo imeti 3,4 ali 5 znakov/črk. Potem pa bi to primerjal s besedami katere so si podobne. Ampak nevem kako bi to napisal. Mi lahko kdo pomaga prosim?
BESEDILO NALOGE:
Uporabnik vnese cifro s besedo. Izpiši besedo enkrat več na zaslon v ločene vrstice.
Izpise loči z vejico.
Načrt:
Primer: uporabnik vnese šest, mi izpišemo šestkrat na zaslon besedo šest
šest
šest, šest
šest, šest, šest
šest, šest, šest, šest
šest, šest, šest, šest, šest
šest, šest, šest, šest, šest, šest
Imamo šest vrstic, v vsaki vrstici je ena beseda več.
Število besed je toliko, v kateri vrstici smo.
jaz bi potreboval pomoč pri tej nalogi. Načrt že imam ampak probleme imam kako bi jo izvedel. V mislih imam, da bi štel znake vsake besede saj je možno pri številih od 1 do 9 samo imeti 3,4 ali 5 znakov/črk. Potem pa bi to primerjal s besedami katere so si podobne. Ampak nevem kako bi to napisal. Mi lahko kdo pomaga prosim?
BESEDILO NALOGE:
Uporabnik vnese cifro s besedo. Izpiši besedo enkrat več na zaslon v ločene vrstice.
Izpise loči z vejico.
Načrt:
Primer: uporabnik vnese šest, mi izpišemo šestkrat na zaslon besedo šest
šest
šest, šest
šest, šest, šest
šest, šest, šest, šest
šest, šest, šest, šest, šest
šest, šest, šest, šest, šest, šest
Imamo šest vrstic, v vsaki vrstici je ena beseda več.
Število besed je toliko, v kateri vrstici smo.
- spremenil: bluefish ()
BlackDeath ::
Na hitro v c++ brez vejic :)
Za vejice samo še en pogojni stavek daš v while zanko pa imaš še vejice.
Za vejice samo še en pogojni stavek daš v while zanko pa imaš še vejice.
for (int i = 1; i <= n; i++) { j = 0; while (j != i) { cout << niz; j++; } cout << endl; }
Zgodovina sprememb…
- spremenilo: BlackDeath ()
Insane123 ::
Pisal bom v c++
Drugace pa blackdeath hvala za pomoc ampak finta je v tem kolkokrat se ponovi mi uporabnik ne vpise s cifro 6 ampak z besedo sest in v tem je problem kak bi to pretvoro pa vse nevem:/ ker program more delat ce mi uporabnik vpise tri z besedo
Tri
Tri, tri
Tri, tri, tri
Drugace pa blackdeath hvala za pomoc ampak finta je v tem kolkokrat se ponovi mi uporabnik ne vpise s cifro 6 ampak z besedo sest in v tem je problem kak bi to pretvoro pa vse nevem:/ ker program more delat ce mi uporabnik vpise tri z besedo
Tri
Tri, tri
Tri, tri, tri
Math Freak ::
Lahko nardiš recimo tako: najprej daš uporabniku na voljo, da vpiše številko z besedo. Potem primerjaš to besedo z vsako od devetih cifer. Ko najdeš pravo cifro, shraniš koliko krat se mora ponoviti ta beseda. Potem pa izpišeš zadevo v for zanki.
V Pythonu bi lahko koda izgledala tako:
Primer:
V Pythonu bi lahko koda izgledala tako:
def cifra(): cifra = input("Vtipkaj cifro od ena do devet: ").lower() if cifra == "ena": print("\nena") return elif cifra == "dva": ponovitev = 2 elif cifra == "tri": ponovitev = 3 # itd ... # elif cifra == "devet": ponovitev = 9 else: print("Ni cifra.") return besedilo = cifra print("\n" + besedilo) for i in range(ponovitev-1): besedilo += ", " + cifra print(besedilo)
Primer:
>>> cifra() Vtipkaj cifro od ena do devet: devet devet devet, devet devet, devet, devet devet, devet, devet, devet devet, devet, devet, devet, devet devet, devet, devet, devet, devet, devet devet, devet, devet, devet, devet, devet, devet devet, devet, devet, devet, devet, devet, devet, devet devet, devet, devet, devet, devet, devet, devet, devet, devet >>>
Insane123 ::
Hvali ti math freak bom probal se iz tega vun znajt in pretvorit v c++. Ali bi ti mogoče znal to c ++ ? Res hvala :)
Math Freak ::
Žal v c/c++ nisem nič programiral, samo verjamem, da ti ne bo problem pretvorit =p.
Razen da moraš deklarirat spremenljivke,
print je verjetno cout,
elif je verjetno else if,
for i in range(ponovitev-1): for (int i = 0; i < n - 1; i++) {,
input pa verjetno Console.Readline ali kaj takega.
Razen da moraš deklarirat spremenljivke,
print je verjetno cout,
elif je verjetno else if,
for i in range(ponovitev-1): for (int i = 0; i < n - 1; i++) {,
input pa verjetno Console.Readline ali kaj takega.
Zgodovina sprememb…
- spremenilo: Math Freak ()
Insane123 ::
Trenutno imam tak kaki predlogi prosim?
Pa kak bi naredo da če je napačen vnos da sploh nebi šlo v zanko pa bi moral ponoviti vnos?
Aja pa rabo bi še če ti uporabnik vpiše: THRee in to bi mogla brat se kot three in pol izpisat.
Pa kak bi naredo da če je napačen vnos da sploh nebi šlo v zanko pa bi moral ponoviti vnos?
Aja pa rabo bi še če ti uporabnik vpiše: THRee in to bi mogla brat se kot three in pol izpisat.
int main(int argc, char* argv[]) { const int NUM_DIGITS= 10; string lookup[NUM_DIGITS] = {"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"}; string someStringFromUser; cout<<"Enter number from 0-9 with word:"<<endl; getline(cin, someStringFromUser); int intVersionOfUserInput; for(int i = 0; i < NUM_DIGITS; i++) { if(someStringFromUser == lookup[i]) { intVersionOfUserInput = i; break; } } string number; number=someStringFromUser; for (int i = 0; i < intVersionOfUserInput; i++) { cout<<someStringFromUser<<endl; someStringFromUser=someStringFromUser+", "+number; } system("pause"); return 0; }
Zgodovina sprememb…
- spremenil: Insane123 ()
Math Freak ::
Ponavljaj vnos besed, dokler beseda ni ena izmed cifer:
Spet v Pythonu bi izgledalo tako:
Pretvori v majhne črke
Spet v Pythonu bi izgledalo tako:
while cifra not in ("ena","dva","tri", ...): cifra = input("Napačen vnos. Vtipkaj cifro od ena do devet: ").lower()
Pretvori v majhne črke
BlackDeath ::
Jaz bi na tvojem mestu pretvoril v lower case in imaš problem rešen ...
std::transform(niz.begin(), niz.end(), niz.begin(), ::tolower);
std::transform(niz.begin(), niz.end(), niz.begin(), ::tolower);
Insane123 ::
hvala oba za odgovore :) Glede pretvarjanja se mi že nekaj sanja pa lahko si še tudi pogledam naloge, ki smo jih že nekaj reševali na to temo v šoli sedaj edino nevem kak bi še naredil tisto, da me nebi vrglo v zanko, če bi bil napačen vnos ampak problem je, da komaj v zanki preverja, če je isto..
Math Freak ::
getline(cin, someStringFromUser);
Za tem stavkom se shrani beseda v someStringFromUser.
Sedaj bi jaz dal:
Neki na to foro.
Za tem stavkom se shrani beseda v someStringFromUser.
Sedaj bi jaz dal:
while someStringFromUser not in lookup: cout<<"Wrong number. Enter number from 0-9 with word:"<<endl; getline(cin, someStringFromUser);
Neki na to foro.
Insane123 ::
Idejo približno vem samo problem je, da se v c++ drugače zapiše in mi to dela težave :P
technolog ::
Evo, popolna rešitev, ki te sprašuje za številko, dokler ne vpišeš česarkoli s seznama
Na isti način reši v C++.
x = ['nič', 'ena', 'dva', 'tri', ...] vnos = nil while vnos.nil? puts 'Vpiši številko:' vnos = x.index gets.strip end vnos.times {|i| puts [x[vnos]] * (i+1) * ', '}
Na isti način reši v C++.
Zgodovina sprememb…
- spremenil: technolog ()
technolog ::
Ni, ampak je postopek isti. Mam temo odprto še od takrat, ko še ni bilo napisano jezika.
1. Inciializiraš array.
2. Dokler je it enak iterator#end, ponavljaš branje in iskanje s std::find.
3. For zanka ena v drugi, s tem da pazi, da greš v notranji za eno manj in dodaš zadnji vpis izven zanke, brez vejice.
1. Inciializiraš array.
2. Dokler je it enak iterator#end, ponavljaš branje in iskanje s std::find.
3. For zanka ena v drugi, s tem da pazi, da greš v notranji za eno manj in dodaš zadnji vpis izven zanke, brez vejice.
technolog ::
Tu je edina fora, da zadnji element v vrstici obravnavaš posebej (to pa pomeni, da greš z notranjo for zanko za ena manj).
int ponovitev = 6; string zbesedo = "šest"; for (int i=0; i<ponovitev; ++i) { for (int j=0; j<i; ++j) cout << zbesedo << ", "; cout << zbesedo << endl; }
Zgodovina sprememb…
- spremenil: technolog ()
Pimoz ::
#include <iostream> #include <string> #include <cctype> #include <algorithm> #include <map> using namespace std; int main () { map<string,int> m; m["zero"] = 0; m["one"] = 1; m["two"] = 2; m["three"] = 3; m["four"] = 4; m["five"] = 5; m["six"] = 6; m["seven"] = 7; m["eight"] = 8; m["nine"] = 9; cout << "Enter number from 0-9 with word:" << endl; string input; getline(cin, input); transform(input.begin(), input.end(), input.begin(), ::tolower); for (int i = 1; i <= m[input]; i++) { for (int j = 1; j <= i; j++) { cout << input << ' '; } cout << endl; } cin.get(); return EXIT_SUCCESS; }
Insane123 ::
Primoz hvala za pomoc ampak rad bi te vprasal kaj tisti cin.get(); na koncu pomeni? Drugace pa bi mi lahko malo opisal delovanje te zanke saj je nene popolnoma razumem. Drugače pa bi še te rad vprašal kaj pa bi še naredil če uporabnik vpiše npr. !"&#%$/) da mora ponovit vnos?
Pimoz ::
Popravljena koda še za napačen vnos:
system("pause") je zlobna funkcija. Uporabljal cin.get().
Povej kaj točno ne razumeš pa ti razložim. Ker zanka je precej enostavna.
#include <iostream> #include <string> #include <cctype> #include <algorithm> #include <map> using namespace std; int main () { map<string,int> m; m["zero"] = 0; m["one"] = 1; m["two"] = 2; m["three"] = 3; m["four"] = 4; m["five"] = 5; m["six"] = 6; m["seven"] = 7; m["eight"] = 8; m["nine"] = 9; string input; while (true) { cout << "Enter number from 0-9 with word:" << endl; getline(cin, input); transform(input.begin(), input.end(), input.begin(), ::tolower); if (input != "zero" && m[input] == 0) { cout << "Wrong entry!" << endl; } else break; } for (int i = 1; i <= m[input]; i++) { for (int j = 1; j <= i; j++) { cout << input << ' '; } cout << endl; } cin.get(); return EXIT_SUCCESS; }
system("pause") je zlobna funkcija. Uporabljal cin.get().
Povej kaj točno ne razumeš pa ti razložim. Ker zanka je precej enostavna.
technolog ::
Tisti cin.get() je slaba praksa, ignoriraj. System pause je pa še 100x slabše. Ko program zaključi, zaključi s kodo 0. Da pričakuješ še nek gibberish na koncu samo zato, ker user ne zna imet odprtega terminala, je absurdno.
Pimoz, besede so ločene z vejcami, ne presledki. Drugič, mapo se da lepš inicializirat s C++11.
Ta vrstica je absolutno napačna:
pravilno je:
Pimoz, besede so ločene z vejcami, ne presledki. Drugič, mapo se da lepš inicializirat s C++11.
Ta vrstica je absolutno napačna:
if (input != "zero" && m[input] == 0) {
pravilno je:
if (m.find(input) == m.end())
Zgodovina sprememb…
- spremenil: technolog ()
Insane123 ::
Hvala fanta za pomoč :)
Ne razumem kje se seštevajo številke kje pa vrstice? Ponavadi sem delal da sem v zanki dal
To je nek primer na hitro.
Ne razumem kje se seštevajo številke kje pa vrstice? Ponavadi sem delal da sem v zanki dal
cout<<input<<endl; input=input+", four"; i=i+1;
To je nek primer na hitro.
Zgodovina sprememb…
- spremenil: Insane123 ()
technolog ::
Če uporabiš plus med dvema številkama, je to navadno seštevanje
6 + 7 // (to je 13)
če pa med dvema stringoma, je to stikanje nizov:
"Hello " + "World!" // "Hello Wolrd!"
6 + 7 // (to je 13)
če pa med dvema stringoma, je to stikanje nizov:
"Hello " + "World!" // "Hello Wolrd!"
Insane123 ::
Ja samo kje pa se input sešteva med dvema zankama? Vem, da sem že tečen samo bi rad podrobno vedel kako deluje program. Ne razumem kaj dela j
Zgodovina sprememb…
- spremenil: Insane123 ()
technolog ::
Aja, to misliš. Input se ne sešteva, ampak se v vsaki vrstici izpiše na novo, od prvega do i-tega elementa.
Pa s tole rešitvijo si ne boš mogel pomagat, ker ločuje s presledki. Moral boš skombinirat z mojo zgoraj.
Pa s tole rešitvijo si ne boš mogel pomagat, ker ločuje s presledki. Moral boš skombinirat z mojo zgoraj.
Zgodovina sprememb…
- spremenil: technolog ()
Pimoz ::
@technolog
Prosim predlagaj alternativo cin.get()
"Absolutno" je zelo huda beseda :) Sem pa popravil.
Prosim predlagaj alternativo cin.get()
"Absolutno" je zelo huda beseda :) Sem pa popravil.
#include <iostream> #include <string> #include <cctype> #include <algorithm> #include <map> using namespace std; int main () { map<string,int> m = {{"zero", 0}, {"one", 1}, {"two", 2}, {"three", 3}, {"four", 4}, {"five", 5}, {"six", 6}, {"seven", 7}, {"eight", 8}, {"nine", 9}}; string input; while (true) { cout << "Enter number from 0-9 with word:" << endl; getline(cin, input); transform(input.begin(), input.end(), input.begin(), ::tolower); if (m.find(input) == m.end()) { cout << "Wrong entry!" << endl; } else break; } for (int i = 1; i <= m[input]; i++) { for (int j = 1; j <= i; j++) { cout << input; if (j != i) cout << ", "; } cout << endl; } cin.get(); return EXIT_SUCCESS; }
technolog ::
Tole je super koda.
Alternativa cin.get() je naučit učence, kako se poganja kodo, da ti ostane terminal odprt po koncu programa.
Alternativa cin.get() je naučit učence, kako se poganja kodo, da ti ostane terminal odprt po koncu programa.
Pimoz ::
Haha :D Ok sem se nasmejal :) Na žalost niso vsi rojeni za sistemce :) Tako kot eni nismo rojeni za programerje :)
Insane123 ::
Za map je napisalo da ne more convertat {} ali kaj so tak da sem tam zgoraj anredil tako kot si že imel prej.
To pa ce prav razumem pravi dokler j ni enak i izpise vejice?
if (j != i) cout << ", ";
To pa ce prav razumem pravi dokler j ni enak i izpise vejice?
Zgodovina sprememb…
- spremenil: Insane123 ()
Pimoz ::
To pa ce prav razumem pravi dokler j ni enak i izpise vejice?
Da.
-std=c++11
To je flag (parameter) prevajalniku, da naj uporabi standard C++11 (v katerem so dodali zgornji način inicializacije spremenljivke tipa map)
mallard ::
@technolog
Aha, OP zdaj zadevo razume, ne zna pa dat prevajalniku pravilne kode? :)
Aha, OP zdaj zadevo razume, ne zna pa dat prevajalniku pravilne kode? :)
Zgodovina sprememb…
- spremenilo: mallard ()
Pimoz ::
Madona prepucavanje za brezveze...
Settings -> Compiler -> Compiler Flags
Kljukica pri opciji "Have g++ follow the C++11 ISO C++ language standard"
Settings -> Compiler -> Compiler Flags
Kljukica pri opciji "Have g++ follow the C++11 ISO C++ language standard"
Insane123 ::
haha :D hvala fantje :)
Ima mogoče kdo razlago kako deluje ukaz map? :)
Ima mogoče kdo razlago kako deluje ukaz map? :)
Zgodovina sprememb…
- spremenil: Insane123 ()
Vesoljc ::
haha :D hvala fantje :)
Ima mogoče kdo razlago kako deluje ukaz map? :)
map ni ukaz, ampak template objekt.
map je asociativna struktura, ki vsebuje pare [kljuc, vrednost], se pravi nek logicen kljuc asociiras z neko poljubno vrednostjo. kot array, le da kljuc ni index tipa int, ampak poljubna "vrednost".
http://www.cplusplus.com/reference/map/...
pogugli hash map
Abnormal behavior of abnormal brain makes me normal...
Insane123 ::
Kak pa bi izpisal potem v piramidi originalni vnos?
Npr. če uporabnik vnese ThRee, da bo izpisovalo kot
ThRee
ThRee, ThRee
ThRee, ThRee, ThRee
in ne kot:
three
three, three
three, three, three
Namreč vnos se prvo mora spremenit v male črke, da se lahko kasneje primerja samo me zanima, če je kakšen ukaz, ki da vnos nazaj, kot je bil prvotno?
Npr. če uporabnik vnese ThRee, da bo izpisovalo kot
ThRee
ThRee, ThRee
ThRee, ThRee, ThRee
in ne kot:
three
three, three
three, three, three
Namreč vnos se prvo mora spremenit v male črke, da se lahko kasneje primerja samo me zanima, če je kakšen ukaz, ki da vnos nazaj, kot je bil prvotno?
#include <iostream> #include <string> #include <cctype> #include <algorithm> #include <map> using namespace std; int main () { map<string,int> m = {{"zero", 0}, {"one", 1}, {"two", 2}, {"three", 3}, {"four", 4}, {"five", 5}, {"six", 6}, {"seven", 7}, {"eight", 8}, {"nine", 9}}; string input; while (true) { cout << "Enter number from 0-9 with word:" << endl; getline(cin, input); transform(input.begin(), input.end(), input.begin(), ::tolower); if (m.find(input) == m.end()) { cout << "Wrong entry!" << endl; } else break; } for (int i = 1; i <= m[input]; i++) { for (int j = 1; j <= i; j++) { cout << input; if (j != i) cout << ", "; } cout << endl; } cin.get(); return EXIT_SUCCESS; }
mallard ::
Naredi kopijo stringa input preden greš čezenj s funkcijo transform. Pa jaz bi, preden se spraviš string pretvarjat v male črke, preveril da ni daljši od najdaljše besede v map-u, ker ga je brez pomena pretvarjat, če že vnaprej veš, da vnos ne bo veljaven. (Kaj, če nekdo pošlje besedilo Hamleta v standardni vnos? Defensive programming,ftw).
Zgodovina sprememb…
- spremenilo: mallard ()
Pimoz ::
#include <iostream> #include <string> #include <cctype> #include <algorithm> #include <map> using namespace std; int main () { map<string,int> m = {{"zero", 0}, {"one", 1}, {"two", 2}, {"three", 3}, {"four", 4}, {"five", 5}, {"six", 6}, {"seven", 7}, {"eight", 8}, {"nine", 9}}; string input, transformedInput; while (true) { cout << "Enter number from 0-9 with word:" << endl; getline(cin, input); transformedInput = input; transform(transformedInput.begin(), transformedInput.end(), transformedInput.begin(), ::tolower); if (m.find(transformedInput) == m.end()) { cout << "Wrong entry!" << endl; } else break; } for (int i = 1; i <= m[transformedInput]; i++) { for (int j = 1; j <= i; j++) { cout << input; if (j != i) cout << ", "; } cout << endl; } cin.get(); return EXIT_SUCCESS; }
Pimoz ::
Ne :) Ker je fun :D Sploh pa če goljufa, goljufa sam sebe. Ne rabim bit proxy za njegovo učenje.
Invictus ::
Pismo ...
Koliko enih postov za problemček začetniškega programerja za 10 minut ...
Koliko enih postov za problemček začetniškega programerja za 10 minut ...
"Life is hard; it's even harder when you're stupid."
http://goo.gl/2YuS2x
http://goo.gl/2YuS2x
Insane123 ::
Hvala za odgovor. Joj oprosti, če še nismo jemali ukaza transform pa me pač malo zanima kako bi lahko naredil, saj nebom več pisal...
Pimoz ::
U še tole sem spregledal:
EXIT_SUCCESS ni gibberish, je le prečudovit makro.
Ko program zaključi, zaključi s kodo 0. Da pričakuješ še nek gibberish na koncu samo zato, ker user ne zna imet odprtega terminala, je absurdno.
EXIT_SUCCESS ni gibberish, je le prečudovit makro.
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | en mali sloncek... (strani: 1 2 3 4 … 261 262 263 264 )Oddelek: Loža | 305295 (10015) | janez_valva |
» | Izstreljen drugi evropski satelit za širokopasovni internetOddelek: Novice / Znanost in tehnologija | 7924 (6414) | Pyr0Beast |
» | C++ nalogeOddelek: Programiranje | 1149 (944) | BigWhale |
» | COddelek: Programiranje | 955 (834) | Matako |
» | Velikanski DDoS napad v AmerikiOddelek: Novice / Varnost | 2700 (2700) | d0rK |