
Legenda si. Respect

Legenda si. Respect
Pozdrav ljudi, zadatak iz C++ mi glasi ovako
Korisnik unosi 10 različitih slova u polje. Ukoliko korisnik unese 2 puta isto slovo
potrebno je unos poništiti i zatražiti ponovni unos slova.
Kod mi ne izbacuje greske, ali ne radi kako treba kada unesem 2 ista slova
Bio bih Vam zahvalan ako mi mozete predloziti ili me ispraviti kako treba kod funkcionirati
#include <iostream>
#include <cstdlib>
using namespace std;
int main()
{
char a[10];
int i = 0;
cout << "unesi znak :" << i <<": ";
cin >> a[i];
int j = 1;
bool nadjen;
do
{
do
{
cout << "unesi znak " << j <<" :";
cin >> a[j];
bool nadjen = false;
int k = 0;
while(!nadjen && k < j)
{
if(a[k] == a[j]) nadjen = true;
else k++;
}
}while(nadjen == true);
j++;
}while(j < 10);
system("pause");
return 0;
}
Jel ovo ok?
edit
#include <iostream>
#include <cstdlib>
using namespace std;
int main()
{
char a[10];
int i = 0;
cout << "unesi znak :" << i <<": ";
cin >> a[i];
int j = 1;
bool nadjen;
do
{
cout << "unesi znak " << j <<" :";
cin >> a[j];
bool nadjen = false;
int k = 0;
while(!nadjen && k < j)
{
if(a[k] == a[j]) nadjen = true;
else k++;
}
if(nadjen){
cout << "isti znak, ponovi unos" << endl;
}else{
j++;
}
}while(j < 10);
system("pause");
return 0;
}
A jesi si stvarno zakomplicirao život. Rađe koristi for petlju ako već znaš koliko ti je veliko polje jer tvoj kod je praktički nečitljiv.
#include <iostream>
using namespace std;
int main() {
char polje[10];
for (int i = 0; i < 10; i++) {
cin >> polje[i];
for (int j = 0; j < i; j++)
if (polje[j] == polje[i])
return 0;
}
system("pause");
return 0;
}
A jesi si stvarno zakomplicirao život. Rađe koristi for petlju ako već znaš koliko ti je veliko polje jer tvoj kod je praktički nečitljiv.
#include <iostream>
using namespace std;
int main() {
char polje[10];
for (int i = 0; i < 10; i++) {
cin >> polje[i];
for (int j = 0; j < i; j++)
if (polje[j] == polje[i])
return 0;
}
system("pause");
return 0;
}
Ja isto za takve slučajeve preferiram for petlju radi preglednosti, ali na koncu, bitno je rješenje i kreativnost 
Jest on malo zakomplicirao, ali je riješio, ovaj dvostruki for ne rješava zadatak, unosa može biti više od brojača vanjske for petlje a program ne bi trebao završavati kod unosa duplikata nego omoguđiti ponovni unos.
Trust nobody, become the best !
Bool je tip varijable zvan boolean koja ima dva stanja, true i false.
while(bool) znači da se petlja vrti dok je ta bool varijabla true
if(bool) znači da se izvršava ta naredba grananja ako je bool varijabla true
operator uskličnik je logički operator koji znači NOT, dakle negaciju boolean varijable
!false = true
Trust nobody, become the best !
Inače primjena tog operatora uskličnik zna održati nekakvu logiku programa, kao u ovom primjeru ovdje.
Evo, stavit ću taj zadatak ovdje da ovi momci pokušaju rješiti zadatke ovog tipa po nekoj logičkoj matrici ubuduće, to nije teško, brzo prijeđe u rutinu.
Dakle, vanjsku petlju vrtimo dok ne dobijemo deset različitih upisa, a unutarnjom petljom provjeravamo da li je tekući upis duplikat.
Da bi to mogli izvrsti brojač vanjske petlje koji je ujedno i index za tekući upis u polje inkrementiramo jedino ako je boolean varijabla dupli false.
To smo mogli postići i izjavom dupli == false, mogli smo i vanjsku while petlju umjesto nepotpune for petlje, a mogli smo i potpunu for petlju pa dektement ako imamo duplih.
#include <iostream>
using namespace std;
int main() {
bool dupli;
char polje[10];
for (int i = 0; i < 10;) {
cin >> polje[i];
dupli = false;
for (int j = 0; j < i; j++)
if (polje[j] == polje[i])
dupli = true;
if (!dupli) i++;
}
return 0;
}
Svidjaju mi se primjeri i objasnjenja, na istom principu je kao i while i do-while petlja. Hvala vam svima :)
Kako bi vi zapisali koliko se puta pojavljuje koji znak u polje, ucili smo na predavanju binarno pomicanje sa brojevima, ima li tko kakav primjer ili drugaciji prijedlog za brojanje znakova u polju ?
Kako bi vi zapisali koliko se puta pojavljuje koji znak u polje, ucili smo na predavanju binarno pomicanje sa brojevima, ima li tko kakav primjer ili drugaciji prijedlog za brojanje znakova u polju ?
Imaš li neki konkretan primjer, zadatak ?
Ja bi zapisao u neku varijablu, napravija brojač
Kako bi vi zapisali koliko se puta pojavljuje koji znak u polje, ucili smo na predavanju binarno pomicanje sa brojevima, ima li tko kakav primjer ili drugaciji prijedlog za brojanje znakova u polju ?
Imaš li neki konkretan primjer, zadatak ?
Ja bi zapisao u neku varijablu, napravija brojač
E evo ti primjera
Korisnik unosi 10 slova (može biti i više istih). Potrebno je sortirati polje koristeći
sortiranje umetanjem u silaznom obliku i ispisati polje na ekran. Zatim je
potrebno ispisati broj pojavljivanja svakog pojedinog različitog slova u polju.
Potrebno je zatim ispisati pozicije svakog suglasnika u polju.
Ovo mi je cijeli zadatak a mene zanima ovaj podcrtani dio, jel bi se moglo rijesiti jos na koji nacin ?
Ovak' iz glave drito na forum: incijaliziraš int polje sa 25 ćlanova(npr. govorimo o engleskoj abecedi), te ako je slovo 'A' ili 'a', onda povećaš prvi član polja za jedan, ako je slovo b u igri, onda drugi član polja za jedan,itd Znači imaš svojevrsno polje brojač, te ovisno o poziciji slova u slijednom redu, povećap na tom mjestu član tog polja za jedan.
Na kraju ispiše to polje brojač, te ovisno o poziciji člana tog polja, znaš o kojem se slovu radi.
U uvjetima, ako se radi o malom slovu, pretvori ga u veliko, te onda samo to slovo oduzmeš sa 65, kako bi dobio broj pozicije tog slova u brojaču pojavljivanja slova.
...

#include <iostream>
#include <cstdlib>
using namespace std;
int main()
{
char a[10];
for(int i = 0; i < 10; i++)
{
cout << "unesi " << i << ": ";
cin >> a[i];
}
cout << endl;
cout << "sortiranje umetanjem" << endl;
// 4 5 9 2
for(int i = 1; i < 10; i++)
{
int j = i - 1;
float pom = a[i];
while(j >= 0 && a[j] < pom)
{
a[j+1] = a[j--];
}
a[j+1] = pom;
}
cout << endl;
for(int i = 0; i < 10; i++)
{
cout << a[i] << " ";
}
cout << endl;
int suma = 0;
int j = 0;
for(int i = 0; i < 10; i++)
{
if(a[i] == a[j++] )
{
suma++;
}
}
system("pause");
return 0;
}
Ovo je do kuda sam dosao... nisam napisao dalje, zanima me princip koda
Ovo je do kuda sam dosao... nisam napisao dalje, zanima me princip koda
int suma = 1;
for (int i = 0; i < 10; i++)
{
//usporedujemo uvijek jedan znak desno, pa ako smo dosli do zadnjega(i=9) vise nemamo s kime usporedivati i samo ispisujemo zadnju vrijednost sume
if (a[i] == a[i+1] && i!=9)
{
suma++;
}
else {
cout << "Slovo " << a[i] << " je uneseno " << suma << " puta" << endl;
suma = 1;
}
}
Ako sam te dobro skužio, mislio si napravit nešto ovakvo.
Ovo je do kuda sam dosao... nisam napisao dalje, zanima me princip koda
int suma = 1;
for (int i = 0; i < 10; i++)
{
//usporedujemo uvijek jedan znak desno, pa ako smo dosli do zadnjega(i=9) vise nemamo s kime usporedivati i samo ispisujemo zadnju vrijednost sume
if (a[i] == a[i+1] && i!=9)
{
suma++;
}
else {
cout << "Slovo " << a[i] << " je uneseno " << suma << " puta" << endl;
suma = 1;
}
}
Ako sam te dobro skužio, mislio si napravit nešto ovakvo.
#include <iostream>
#include <cstdlib>
using namespace std;
int main()
{
char a[10];
for(int i = 0; i < 10; i++)
{
cout << "Znak " << i+1 <<". :";
cin >> a[i];
}
cout << endl;
cout << "Sortiranje umetanjem" << endl;
for(int j = 1; j < 10; j++)
{
int poc = j - 1;
float pom = a[j];
while(a[poc] < pom && poc >= 0 )
{
a[poc + 1] = a[poc--];
}
a[poc + 1] = pom;
}
cout << endl;
for(int i = 0; i < 10; i++)
{
cout << a[i] << " ";
}
cout << endl;
int suma = 1;
for(int i = 0; i < 10; i++)
{
if(a[i] == a[i+1] && i != 9)
{
suma++;
}
else
{
cout << "Slovo " << a[i] << " je uneseno " << suma <<" puta" << endl;
suma = 1;
}
}
cout << endl;
cout << "Pozicija svakog suglasnika" << endl;
for(int i = 0; i < 10; i++)
{
if(!(a[i]=='a' || a[i]=='e' || a[i]=='i' || a[i]=='o' || a[i]=='u'))
{
cout << a[i] << " se nalazi na poziciji " << i << endl;
}
}
system("pause");
return 0;
}
Evo rjesenja... hvala basso533
Stavim kod u kod format i onda moram stiskat enter da poslozim kod , jel ima koja bolja opcija
Kako znaš mogu li trenutno skinuti Visual? Zar to što si napisao ne možeš primijeniti na 90% pitanja ovdje?
Došao sam na forum u kojem je tema programiranje u C++ programskom jeziku.
I gle čuda, tražim pomoć oko zadataka iz C++ programskog jezika. Nevjerojatno.
Postavljam pitanja o C++ programskom jeziku na razini koju mi dopušta moje trenutno znanje.
Ako možeš i želiš pomoći. pomozi i hvala ti, ako ne možeš i ne želiš, ignoriraj. Nisi obavezan pomoći mi.
Na forumu se javljam ponajviše jer ne mogu dočekati konzultacije sa profesorom a na internetu nisam našao odgovor.
Drugo, od 104 zadatka iz zbirke, objavio sam ako se ne varam 2. Još bih možda trebao 2-3. I to nakon mnogobrojnih samostalnih pokušaja pronalska rješenja. Zar je to problem?
Treće, prošli zadatak je specifičan jer je rješenje kopirano iz zbirke - i ne radi.
Četvrto, uskoro se možda javim sa nekim novim nejasnoćama.
Pozdrav.
Ekipa, jel znate strukture?
Imam jedan problem oko zadatka
Znamo sve ako ti znas sto tocno ne znas ;)
https://www.dropbox.com/s/zdts97ldgc7gbam/zbirka_oop_13rev.pdf?dl=0
Nadam se da dijeljenje nije ilegalno.
Imam neka pitanja za sve koji žele pomoći:
Razlike između:
getline(cin, varijabla)
cin.getline(niz tipa char, broj)
Zašto mi je odjednom zatrebao cin.ignore(), ne sjećam se da mi je ikad prije zatrebao?
I to zatrebao mi je baš onda kad sam se u kratkom kodu zabavljao isključivo s tom funkcijom.
Da li se drugi zapis koristi samo za c-string? Jer funkcija ne prima argument tipa klase string.
Prvu verziju funkcije sam koristio bezbroj puta u zadacima. Uglavnom za upis stringa sa razmacima.
Drugu verziju nikad.
Drugo,
može li mi netko objasniti koja je fora sa izjavama koje imaju uvjete tipa:
if(a=0)
if(c-a)
if(a)
Idu mi na živce. Da li netko ima nekih primjera sa baš takvim zadacima? Ja sam kopao po internetu i sve se uglavnom svodi na one jednostavne uvjete, ==, <=, >=, !=.
Nešto malo sam vidio na SoloLearnu.
Ako sam dobro shvatio, ovo u zagradi je true ako je različito od nule. Prvo se obavi operacija u zagradi, nakon te operacije vrši se provjera, da li je stanje true ili false. Ako je true, obavlja se ono iz tijela izjave.
Čudno je kad razumiješ virtualne funkcije a još uvijek nisi načisto sa uvjetima iz petlja i izjava :D
Treće pitanje, zašto u CodeBlocksu ne mogu pozvati funkcije iz zagljavlja <string>: stod, stof, to_string...?
Ništa, kao da ne postoje. Jel do compilera ili?
Funkcije iz zaglavlja <cstdlib> koje obavljaju istu zadaće (atof, atoi, strod...) pozovem bez problema.
Nadam se da ne pitam gluposti.
1. ne radim s tim nikad, pa ne znam, ali google pomaze https://stackoverflow.com/questions/4745858/stdcin-getline-vs-stdcin
2. if (a=0) - u a se upisuje 0, uvjet je uvijek false, bezveze.
Drugi uvjeti mogu imati smisla, izracuna se izraz unutar zagrada pa se to pretvara u bool
3. Mozda ti fali #include <string> ?
1) Nije mi jasno kako nisam naletio na ovaj odgovor na Stacku. Ako je to to, onda me sa cin objektom ne može ništa iznenaditi. Jedino još trebam razjasniti ovo sa cin.ignore()
2) Hvala.
3) Ne, to mi je već ušlo u naviku. Jednom u 50 puta zaboravim uključiti zaglavlje.
Jedno pitanje za zajebanciju, zašto se svaki ozbiljniji programer ruga onima koji pišu "using namespace std"? :D
Fala za zbirku, ovako na brzaka, kad je već vrijeme za spavanje:
Učitani tekst se sprema u objekt, te standardna funkcija getline() učitava sav tekst do znaka za novi redak, a ne samo tekst do prve prazinine(slučaj kada se koristi operator >>)
cin.getline(string, duljina stringa) - učitava string u duljini kojoj si zadao iza prvog zareza. Uključujući i prazine.
cin.ignore() preskaču se znakovi na ulaznom toku. Prima 2 arugmenta: broj znakova koliko treba preskočiti, te znak kojim se preskanjanje znakova može prekinuti.
Pogledaj primjere po netu za te fje, bit će ti jasnije.

Jedno pitanje za zajebanciju, zašto se svaki ozbiljniji programer ruga onima koji pišu "using namespace std"? :D
Valjda ne kuzim zajebanciju, ali nisam primijetio da se itko rugao zbog koristenja using namespace std-a.
Nitko se ne ruga, ali korištenje cijelog namespacea se ne smatra dobrom praksom.
Učitavanjem cijelog namespacea zbog samo nekoliko funkcija (npr. cin i cout), ucitavas sve sto je sadrzano u tom namespaceu. I ako u programu (slucajno) definiras neku funkciju koja ima isto ime kao i neka iz namespacea std, doci ce do problema.
Ako ti trebaju npr. samo cin i cout, mozes ih pokupiti pomocu using std::cin; i using std::cout;
Pozdrav svima,evo tek sam se registrovao tu,pa ako trebam negdje drugo postat,usmjerite me ..
Naime,radim jedan zadatak sa nizovima,mislim da uopste zadatak nije tezak,al evo vec na samom startu sam zapeo..
Evo o cemu se radi,
@KKT
Vrtiš petlju, sve dok te interni brojač unutar nje ne izbaci sa break naredbom van, kada je uvjet unutar naredbe if ispunjen, odnoso brojač == 30.
Velika slova i brojke kontroliš sa naredbom if pomoću samih znakova( npr. 'A' il preko ASCII vrijednosti znaka, npr za slova A, broj 65).