palindrom

Teme vezane za console/GUI programiranje u C/C++ jeziku
8 post(ov)a • Stranica: 1/1.

palindrom

PostPostao/la laptopp » 31 kol 2015, 14:24

pozdrav..
ako moze pomoc oko zadatka..
Napisati program u kojem se unosi jedna recenica i potom se ispisuju samo one rijeci recenice koje su palindromi.
Za provjeru da li je rijec palindrom napisati korisnicku funkciju.

cpp code
#include<iostream>
#include<cstdlib>
using namespace std;
int palindrom(string rijec){
string obrnuta;
int d=rijec.size();
for(int i=0;i<d;i++)
obrnuta[i]=rijec[d-1-i];
if(rijec==obrnuta) return 1;
else return 0;
}

int main()
{
string recenica;
getline(cin,recenica);
int d=recenica.size();
for(int i=0;i<d;i++)
if(recenica[i]==' ' & recenica[i+1]!=' ')
if(palindrom(recenica[i])) /*izbacuje gresku */
cout<<recenica[i]<<endl;

system ("PAUSE");
return EXIT_SUCCESS;
}


ovako smo radili na vjezbama,ali uvijek izbacuje pogresku
Zadnja izmjena: Jasko; 31 kol 2015, 15:42; ukupno mijenjano 1 put/a.
Razlog: Ispravljen prikaz koda.

Re: palindrom

PostPostao/la Jasko » 31 kol 2015, 15:55

Kako ja ovdje vidim tvoj problem je, da funkciji palindrom trebas predati string, a ti joj dajes char.

Mogao bi taj problem izbjec, tako sto predas pojnter na trenutnu lokaciju iteratora, sto ce gresku sintaksicki ispravit, ali logicka greska koda ostaje, zbog koje ti program i dalje nece raditi zeljeno.

Ispravka sintakse:
cpp code
/* ...*/
if(palindrom(&recenica[i])) /* ovako uspjeva kompilacija */
cout<<recenica[i+1]<<endl;
/* ....*/
Postoji 10 vrsta ljudi na zemlji. Oni koji razumiju binarni sistem i oni koji ga ne razumiju!
Posjetite moj YouTube kanal za gledanje za programiranje i druge teme oko računara.

Re: palindrom

PostPostao/la laptopp » 31 kol 2015, 16:22

sad ne izbacuje nikakvu gresku,ali kad upisem recenicu program prestaje raditi,tj ne ispisuje rijeci koje su palindromi

Re: palindrom

PostPostao/la Jasko » 31 kol 2015, 16:49

Evo preradio sam kod za tebe. Stim da sam radio sa ponudjenim stvarima koje si ti vec pisao kako bi bilo jasnije.

Evo Code:
cpp code
#include<iostream>
#include<cstdlib>

using namespace std;

int palindrom(string rijec){
if (rijec == string(rijec.rbegin(), rijec.rend()))
return 1;
else
return 0;
}

int main()
{
string recenica;
cout<<"Unijeti recenicu (*obavezno na kraju recenice staviti tacku+)!" << endl;
getline(cin,recenica);
int d=recenica.size();
cout<<recenica<<endl;
int k = 0; /* oznacava index pocetka nove rijeci */
for(int i=0;i<d;i++){
if((recenica[i]==' ' && recenica[i+1]!=' ') || recenica.length()==i+1){
string tmp(recenica, k, i-k);
cout<<"Rijec:" << tmp <<endl;
k=i+1; /* pomjeri index na pocetak naredne rijeci */
cout<<"k:" << k <<endl;
if(palindrom(tmp))
cout<<"Pronadjen palindrom: *** " << tmp << " *** " << endl;
}
}



system ("PAUSE");
return EXIT_SUCCESS;
}


Ubacio sam dodatne ispise kako bi izvodjenje koda lakse razumio. Prvo sam ispravio gresku da u funkciju palindrom saljes char, tako sto sam stvorio varijablu tipa string pod nazivom tmp.
ta varijabla memorise trenutnu rijec koja se treba ispitati.
Problem je jos bio da ti se na ovaj nacin ne ispituje posljednja rijec u recenici, te sam u if-u postavio jos jedan uslov, sa tim da svaka recenica treba zavrsit interpunkcijskim znakom jer se kod zadnje rijeci ovako kako je kod napisan pojede zadnji znak, sto nije tragicno ako je to znak interpunkcije.

Ako treba jos sta objasniti samo pitaj.

POzz
Postoji 10 vrsta ljudi na zemlji. Oni koji razumiju binarni sistem i oni koji ga ne razumiju!
Posjetite moj YouTube kanal za gledanje za programiranje i druge teme oko računara.

Re: palindrom

PostPostao/la laptopp » 31 kol 2015, 17:12

hvala ti puno :)

Re: palindrom

PostPostao/la Jasko » 31 kol 2015, 18:03

A moze i ovako bez obavezne tacke na kraju:

cpp code
#include<iostream>
#include<cstdlib>

using namespace std;

int palindrom(string rijec){
if (rijec == string(rijec.rbegin(), rijec.rend()))
return 1;
else
return 0;
}

int main()
{
string recenica;
cout<<"Unijeti recenicu: " << endl;
getline(cin,recenica);
int d=recenica.size();
cout<<recenica<<endl;
int k = 0;
for(int i=0;i<d;i++){
if(recenica[i]==' ' && recenica[i+1]!=' '){
string tmp(recenica, k, i-k);
cout<<"Rijec:" << tmp <<endl;
k=i+1;
if(palindrom(tmp)) /*izbacuje gresku */
cout<<"Pronadjen palindrom: *** " << tmp << " *** " << endl;
continue;
}
}
string tmp(recenica, k, recenica.length()-k);
cout<<"Rijec:" << tmp <<endl;
if(palindrom(tmp))
cout<<"Pronadjen palindrom: *** " << tmp << " *** " << endl;

system ("PAUSE");
return EXIT_SUCCESS;
}


sto naravno stvara novi problem, sta ako je zadnja rijec palindrom, a mi stavimo tacko koja se onda interpretira kao dio rijeci, nasa rijec nece biti prepoznata kao palindrom.

Pa i zato ima rjesenje, trazimo odredjeni znak u stringu i brisemo ga, u ovom slucaju tacku ili neki drugi znak interpunkcije, za to bi se morala napravit dodatna funkcija koja to uzima u obzir.

No kao u svakom programu moramo korisniku predstaviti pravila unosa kako bi mogao ocekivati pravilan rezultat, ili unutar koda raditi ispitivanje gresaka.

Pozz
Postoji 10 vrsta ljudi na zemlji. Oni koji razumiju binarni sistem i oni koji ga ne razumiju!
Posjetite moj YouTube kanal za gledanje za programiranje i druge teme oko računara.

Re: palindrom

PostPostao/la laptopp » 31 kol 2015, 19:00

ahaa,hvala..
a ima jos jedan zadatak kojeg ne znam ni poceti,znaci:
Program uvijek iznova unosi 15 cijelih brojeva,sve dok zbroj najveceg i najmanjeg unesenog broja ne bude veci od 50.
Nakon toga ispisuju se uneseni brojevi i poruka o broju pokusaja iz kojeg je uvjet za prestanak unosa zadovoljen.

pa eto ako moze netko pomoci,ispit prekosutra,zadnji rok,treba za uvjet u visu godinu

Re: palindrom

PostPostao/la Jasko » 31 kol 2015, 20:23

Evo zadatak, realno mislim da je laksi ovaj zadatak nego prvi!

cpp code
#include<iostream>
#include<cstdlib>

using namespace std;


int main()
{
int min = 0, max = 0, unos;
int MAX_BR_POKUSAJA = 15, pokusaj = 0;
while(min+max<=50){
if(!(pokusaj % MAX_BR_POKUSAJA)) min = max = 0;
cout<<"Unesi broj: " << endl;
cin >> unos;
pokusaj++;
if(unos < min || min == 0) min = unos;
if(unos > max) max = unos;
/* cout << "Zbir min + max = " << (min+max) << endl;*/
}
cout << "Ukupan broj pokusaja: " << pokusaj << endl;


system ("PAUSE");
return EXIT_SUCCESS;
}


POZZ
Postoji 10 vrsta ljudi na zemlji. Oni koji razumiju binarni sistem i oni koji ga ne razumiju!
Posjetite moj YouTube kanal za gledanje za programiranje i druge teme oko računara.


8 post(ov)a • Stranica: 1/1.

Na mreži

Trenutno korisnika/ca: / i 1 gost.