athlon64 sri 16.2.2011 20:30

Dakle treba upisati n koji određuje koliko brojeva ćemo upisati , zatim se brojevi upisuju a program treba ispisati najmanji i najveci upisani broj , evo dovrsio sam zadatak , minimum uredno funkcjonira ali max ne pokazuje tocno , jel ga moze netko ispravit ?? btw najvjerojatnije cu kasnije postat jos neke zadatke za pomoć jer se pripremam za nastavak dumpovih predavanja:

 

#include <iostream>
#include <vector>
#include <string>
using namespace std;

int main()
{
    int n;
    int unesenibrojevi;
    int min;
    int max;
    cout << " unesite broj znamenaka koje ce te unijeti" << endl;
    cin >> n;
    cout << "unesite zeljene znamenke"<<endl;

    for (int i=0; i<n; i++)
    {
       cin >> unesenibrojevi;

if (i == 0)
    {
       min = unesenibrojevi;
    }
   

if (unesenibrojevi < min)
    {
       min = unesenibrojevi;
    }
if (i==0)
{
max = unesenibrojevi;
}   
if (max > unesenibrojevi)
{
max = unesenibrojevi;
}
}
    cout << min << "je najmanji uneseni broj"<< endl;
    cout << max << "je najveci uneseni broj" << endl;
}

captain_soap_McTawish sri 16.2.2011 20:42
athlon64 kaže...

Dakle treba upisati n koji određuje koliko brojeva ćemo upisati , zatim se brojevi upisuju a program treba ispisati najmanji i najveci upisani broj , evo dovrsio sam zadatak , minimum uredno funkcjonira ali max ne pokazuje tocno , jel ga moze netko ispravit ?? btw najvjerojatnije cu kasnije postat jos neke zadatke za pomoć jer se pripremam za nastavak dumpovih predavanja:

 

#include <iostream>
#include <vector>
#include <string>
using namespace std;

int main()
{
    int n;
    int unesenibrojevi;
    int min;
    int max;
    cout << " unesite broj znamenaka koje ce te unijeti" << endl;
    cin >> n;
    cout << "unesite zeljene znamenke"<<endl;

    for (int i=0; i<n; i++)
    {
       cin >> unesenibrojevi;

if (i == 0)
    {
       min = unesenibrojevi;
    }
   

if (unesenibrojevi < min)
    {
       min = unesenibrojevi;
    }
if (i==0)
{
max = unesenibrojevi;
}   
if (max > unesenibrojevi)
{
max = unesenibrojevi;
}
}
    cout << min << "je najmanji uneseni broj"<< endl;
    cout << max << "je najveci uneseni broj" << endl;
}

Red označen žuto je problem. Ovdje se trebao napisati:

unesenibrojevi>max.

 

 

NAPOMENA:Uvijek pazi na urednost koda. Jer kad nekto drugi to ispravlja nije mu baš lako.

 

athlon64 sri 16.2.2011 20:51

radi , hvala stari , btw skuzaj nisam pazia na urednost ,, znam da bude drugima zahebano vidit sta pise , nego da te pitam , zasto ova greska utjece ne kod? unesenibrojevi>max je isto sto i max < unesenibrojevi?

captain_soap_McTawish sri 16.2.2011 20:53
athlon64 kaže...

radi , hvala stari , btw skuzaj nisam pazia na urednost ,, znam da bude drugima zahebano vidit sta pise , nego da te pitam , zasto ova greska utjece ne kod? unesenibrojevi>max je isto sto i max < unesenibrojevi?

Ne utječe! Ti si napisao max>unesenibrojevi, a ne max<unesenibrojevi!

athlon64 sri 16.2.2011 20:57
captain_soap_McTawish kaže...
athlon64 kaže...

radi , hvala stari , btw skuzaj nisam pazia na urednost ,, znam da bude drugima zahebano vidit sta pise , nego da te pitam , zasto ova greska utjece ne kod? unesenibrojevi>max je isto sto i max < unesenibrojevi?

Ne utječe! Ti si napisao max>unesenibrojevi, a ne max<unesenibrojevi!

auh , lol koja glupa greska , hvala , evo rjesavam 2. zadatak , napisat cu ako zapnem.

athlon64 sri 16.2.2011 21:12

evo 2. zadatak , upisuju se 2 rijeci i treba provjerit da li je 2, upisana rijec podrijec prve , npr na ulaz ide , Polutka i lutka i program ispiše "DA" ili se upise kristal , zlato , program ispiše "NE" dakle nekako bi vectorom trebalo analizirat obje riječi i slovo po slovo uspoređivati , nesto sam pokusao ali neznam kako da ih usporedim , moze pomoc?

BolestanUm sri 16.2.2011 23:07
athlon64 kaže...

evo 2. zadatak , upisuju se 2 rijeci i treba provjerit da li je 2, upisana rijec podrijec prve , npr na ulaz ide , Polutka i lutka i program ispiše "DA" ili se upise kristal , zlato , program ispiše "NE" dakle nekako bi vectorom trebalo analizirat obje riječi i slovo po slovo uspoređivati , nesto sam pokusao ali neznam kako da ih usporedim , moze pomoc?

 

Ne trebas usporedivati kad je to vec sve netko napravio za tebe: 

 

U biblioteci <string.h>

 

Imas funckiju strstr (rijec, podrijec) koja ti vraca pokazivac na prvo pojavljivanje podrijeci u rijeci:

 

dakle:

if (strstr (rijec, podrijec) != NULL)

 printf("DA");

else

 printf("NE");

 

EDIT: A ako bas želiš sam provjeriti onda to radiš na sljedeći način: Petlja ide po glavnoj 'rijeci' i trazi znak glavne 'rijeci' koji je jednak prvom znaku 'podrijeci'. Ako je nasao, uvodis drugu varijablu (npr. j - šeta po znakovima podrijeci, dok varijablu i koristis za setanje glavnom petljom, a ujedno i šetanje znakovima glavne rijeci) i sada gledas da li sve odgovara (rijec[i] == podrijec[j]) do kraja duljine podrijeci, tj. dok varijabla j ne dođe do veličine koju vraća strlen(podrijec) <- upravo tako je i implementirana gornja funckija strstr 

 

athlon64 sri 16.2.2011 23:12
BolestanUm kaže...
athlon64 kaže...

evo 2. zadatak , upisuju se 2 rijeci i treba provjerit da li je 2, upisana rijec podrijec prve , npr na ulaz ide , Polutka i lutka i program ispiše "DA" ili se upise kristal , zlato , program ispiše "NE" dakle nekako bi vectorom trebalo analizirat obje riječi i slovo po slovo uspoređivati , nesto sam pokusao ali neznam kako da ih usporedim , moze pomoc?

 

Ne trebas usporedivati kad je to vec sve netko napravio za tebe: 

 

U biblioteci <string.h>

 

Imas funckiju strstr (rijec, podrijec) koja ti vraca pokazivac na prvo pojavljivanje podrijeci u rijeci:

 

dakle:

if (strstr (rijec, podrijec) != NULL)

 printf("DA");

else

 printf("NE"); 

 

da ali oni to nas nisu ucili na tih 5 predavanja , ja ovo pokusavam rijesit s znanjem koje imam a to je grananje , petlje , kolekcije , funkcije i naravno ulaz/izlaz one gluposti , evo pogledaj , imas i prezentacije i materijale za skinut cisto ako te zanima : http://www.dump.hr/ciklus/17

BolestanUm sri 16.2.2011 23:23

Onda pokušaj pomoću objašnjenja u EDIT-u mog posta. I ako ti imas nekakav svoj način, ne znači da je kriv. Više ti vrijedi ako rješiš na svoj način sam, nego da pogledas tuđi kod i shvatiš ideju (osim ako te ne zanimaju algortimi razni za poboljšavanje programa).

I sto se tiče programiranja: Uvijek na papiru skiciraj ideju (posebno ako si novi u programiranju) i tek onda kreni programirati. Recimo za taj zadatak: Da ti netko na ulici (nekakva baka koju zanima postoji li grah u riječi grhagrasgrahsgsa) TI bi naravno odmah rekao DA:

Ali kako bi išao korak po korak:
prvo bi pogledao u velikoj riječi (grhagrasgrahsgsa) prvo slovo i je li ono isto kao i prvo slovo grah -> DA, odlicno jos 3 slova za usporediti, drugo slovo r rijeci je jednako drugom slovu podrijeci, precool, jos 2 slova za usporediti, na trecem slovu vidimo da je vrijedi jednakost. Kraj price za i=0!
Idemo dalje:
Promatramo drugo slovo rijeci 'r' i odmah vidimo da ne vrijedi jednakost. Kraj price za i=1; 
i tako za sva slova nase rijeci...


(slozenost je najveca, O(m*n), gdje je m-broj znakova velike rijeci, a n-broj znakova podrijeci)


I kako vidis mi za svako slovo riječi promatramo možemo li od njega pronaći cijelu podriječ.

Pokusaj sam isprogramirati, ako ne uspijes, onda cu ti napisati kod. {#} 

Shody_1994 sri 16.2.2011 23:24

 

 

Neka se riječ zove a, a podriječ b.

 

Jednostavno, pomoću if-a gledaš je li ima istih elemenata u nizu.

 

 

 

   if (b[i]=a[i] && b[i+1]==a[i+1]...b[veličina_podriječi]==a[veličina_podriječi])

    printf("\nDA");

  else

   printf("\n NE");

 

____________________

Nadam se da si razumio što sam htio "reći".

athlon64 sri 16.2.2011 23:42
Shody_1994 kaže...

 

 

Neka se riječ zove a, a podriječ b.

 

Jednostavno, pomoću if-a gledaš je li ima istih elemenata u nizu.

 

 

 

   if (b[i]=a[i] && b[i+1]==a[i+1]...b[veličina_podriječi]==a[veličina_podriječi])

    printf("\nDA");

  else

   printf("\n NE");

 

____________________

Nadam se da si razumio što sam htio "reći".

ah , moje znanje je samo ono sto su nam oni predavali , problem mi je neke stvari mi nisu jasne , tipa trebalo bi mi pojasniti ovo s [] zagradama , sto kockaste zagrade oznacavaju ?? nije mi uopće jasno sta ti ova linija koda gore govori , kad bi mi je preveo na naški shvatio bi vjerojatno , kaze ako je b( podriječ) pa i u kockastoj zagradi , sta to znaci ? = a pa i u kockastoj zagradi ? to sam vidio u dosta zadataka i nije mi jasno kako to for petlja pretrazuje , moze malo pomoci.

Shody_1994 sri 16.2.2011 23:59

Da bi upisao riječ, trebaš je spremiti u neko polje.

npr. a[20] -- s ovim si rezervirao 20 mjesta u memoriji i napravio polje od 20 mjesta (21 mjesto zbog \0).

I sad recimo da imaš riječ automobil.

a[0]=a, a[1]=u, a[2]=t....

BolestanUm čet 17.2.2011 00:03
athlon64 kaže...
Shody_1994 kaže...

 

 

Neka se riječ zove a, a podriječ b.

 

Jednostavno, pomoću if-a gledaš je li ima istih elemenata u nizu.

 

 

 

   if (b[i]=a[i] && b[i+1]==a[i+1]...b[veličina_podriječi]==a[veličina_podriječi])

    printf("\nDA");

  else

   printf("\n NE");

 

____________________

Nadam se da si razumio što sam htio "reći".

ah , moje znanje je samo ono sto su nam oni predavali , problem mi je neke stvari mi nisu jasne , tipa trebalo bi mi pojasniti ovo s [] zagradama , sto kockaste zagrade oznacavaju ?? nije mi uopće jasno sta ti ova linija koda gore govori , kad bi mi je preveo na naški shvatio bi vjerojatno , kaze ako je b( podriječ) pa i u kockastoj zagradi , sta to znaci ? = a pa i u kockastoj zagradi ? to sam vidio u dosta zadataka i nije mi jasno kako to for petlja pretrazuje , moze malo pomoci.

 

Gle, malo je nepraktično ovo sa if-om i && operatorom, zato sto nije poznato koliko ce biti velika podrijec. Uglavnom, [] ti označava član niza, kolekcije itd, pri čemu se unutar zagrada definira index:
Npr. Ako imas char niz[] = "Ovo je niz1". Onda ti kada napises niz[0], dobijes zapravo vrijednost znaka na poziciji 0, a to je slovo 'O'. niz[1] = 'v', dok je naprimjer niz[3] = ' '. Treba tada paziti da ti indeks ne prelazi granice, tako kad bi napisao niz[21] = ??. Ruši se!

Ako ne razumis ove prakticki osnove nizova, onda se nemoj forsirati sa zadacima gdje se zahtjeva dobro poznavanje istog, nego se pozabavi zadacima tipa ispis niza znakova, a da prvo ispises slova na neparnim pozicijama, pa na parnim, ili ispis samo velikih slova iz niza. Ako pak zelis raditi sa nizom cjelih brojeva, napisi program koji zbraja prvi broj sa zadnjim u nizu, drugi s predzadnjim, treci s predpredzadnjim itd., sve do srednjeg itd. 

athlon64 čet 17.2.2011 10:03

iskreno , nismo ucili te nizove i nije mi poznato to , moram se fforsirat s tim zadatcima jer nemogu na nastavak predavanja ako ih ne rijesim , 5 ih je i do 20.2 moram gotov bit , gledao sam sadržaj nastavka predavanja i tu su između ostalog i nizovvi lol , hvala na objašnjenju pokusat cu nesto iskombinirat ili mozda koristit ovu string.h biblioteku tj strstr.

athlon64 čet 17.2.2011 12:11

citao sam o nizovima tutoriale na googleu ali ipak nisam na taj nacin uspio rijesit zadatak , kad ga rijeim na nacin sa strstr podcrtava mi strstr:  dakle u if-u mi je strstr podcrtan ?

 

#include<iostream>
#include<vector>
#include<string>
#include<string.h>
using namespace std;
int main()
{
string rijec;
string podrijec;
if (strstr (rijec,podrijec) != NULL)
{
 printf("DA");
}
else
{
 printf("NE");
}
}

Tom69 čet 17.2.2011 21:47
athlon64 kaže...

svejedno ga podcrtava.

Tko ti ga podcrtava? Onda ti sigurno i piše zašto ga podcrtava.

 

BTW, ako već koristiš C++ i string mogao si umjesto strstr koristiti find: rijec.find(podrijec)

athlon64 pet 18.2.2011 12:07
Luuka kaže...

Da bi na stringu mogao koristiti c-ovske fje sa stringovima, moraš od varijable tipa string napravati c-ovski string pomoću c_str (LINK). Na njemu možeš najnormalnije koristiti c-ovske fje.

to ce oni nas sad ucit na nastavku predavanja , ja sam nasa nacin da ga rijesim , idem ga napisat pa cu vam postat,

Tom69 pet 18.2.2011 12:25
Luuka kaže...

Da bi na stringu mogao koristiti c-ovske fje sa stringovima, moraš od varijable tipa string napravati c-ovski string pomoću c_str (LINK). Na njemu možeš najnormalnije koristiti c-ovske fje.

Nema razloga izvoditi c(rnu) magiju ako može sve s c++ napraviti.

 

Što je bolje:

 

strstr(rijec.c_str(), podrijec.c_str())

 

ili

 

rijec.find(podrijec)

 

?

 

{#}

athlon64 pet 18.2.2011 12:34

evo ovo sam ja sa svojim zanjem iskobimirao , program radi ako se ne upisuju rijeci vece od 10 slova , moga sam iskombinirat i vise al nema smisla , ako neko ima neki bolji algoritam nek mi napise rjesenje:

 

#include<iostream>
#include<vector>
#include<string>
#include<string.h>
using namespace std;
int main()
{
char rijec[50];
char podrijec[50];

cout << " upisite vasu rijec i podrijec " << endl;
vector<string>rijeci;
vector<string>podrijeci;
cin >> rijec;
cin >> podrijec;
rijeci.push_back(rijec);
podrijeci.push_back(podrijec);
if  (rijec[0] == podrijec[0] && rijec[1] == podrijec[1] && rijec[2] == podrijec[2]&& rijec[3] == podrijec[3] && rijec[4] == podrijec[4] &&  rijec[5] == podrijec[5] && rijec[6] == podrijec[6]&& rijec[7] == podrijec[7] && rijec[8] == podrijec[8] && rijec[9] == podrijec[9] )
{
cout << "DA" << endl;
}
else if (rijec[0] == podrijec[0] && rijec[1] == podrijec[1] && rijec[2] == podrijec[2]&& rijec[3] == podrijec[3] && rijec[4] == podrijec[4] &&  rijec[5] == podrijec[5] && rijec[6] == podrijec[6] && rijec[7] == podrijec[7] && rijec[8] == podrijec[8])
{
cout <<"DA"<< endl;
}
else if (rijec[0] == podrijec[0] && rijec[1] == podrijec[1] && rijec[2] == podrijec[2]&& rijec[3] == podrijec[3] && rijec[4] == podrijec[4] &&  rijec[5] == podrijec[5] && rijec[6] == podrijec[6] && rijec[7] == podrijec[7] )
{
cout <<"DA"<< endl;
}
else if (rijec[0] == podrijec[0] && rijec[1] == podrijec[1] && rijec[2] == podrijec[2]&& rijec[3] == podrijec[3] && rijec[4] == podrijec[4] &&  rijec[5] == podrijec[5] && rijec[6] == podrijec[6])
{
cout <<"DA"<< endl;
}
else if (rijec[0] == podrijec[0] && rijec[1] == podrijec[1] && rijec[2] == podrijec[2]&& rijec[3] == podrijec[3] && rijec[4] == podrijec[4] &&  rijec[5] == podrijec[5])
{
cout << "DA" << endl;
}
else if (rijec[0] == podrijec[0] && rijec[1] == podrijec[1] && rijec[2] == podrijec[2]&& rijec[3] == podrijec[3] && rijec[4] == podrijec[4])
{
cout <<"DA"<< endl;
}
else if (rijec[0] == podrijec[0] && rijec[1] == podrijec[1] && rijec[2] == podrijec[2]&& rijec[3] == podrijec[3])
{
cout <<"DA"<< endl;
}
else if (rijec[0] == podrijec[0] && rijec[1] == podrijec[1] && rijec[2] == podrijec[2])
{
cout <<"DA"<< endl;
}
else if (rijec[3] == podrijec[3] && rijec[4] == podrijec[4] &&  rijec[5] == podrijec[5] && rijec[6] == podrijec[6] && rijec[7] == podrijec[7] && rijec[8] == podrijec[8] && rijec[9] == podrijec[9] )
{
cout << "DA" << endl;
}
else if  (rijec[4] == podrijec[4] &&  rijec[5] == podrijec[5] && rijec[6] == podrijec[6] && rijec[7] == podrijec[7]&&  rijec[8] == podrijec[8] && rijec[9] == podrijec[9] )
{
cout << "DA" << endl;
}
else if  (rijec[5] == podrijec[5] && rijec[6] == podrijec[6] && rijec[7] == podrijec[7] && rijec[8] == podrijec[8] && rijec[9] == podrijec[9])
{
cout << "DA" << endl;
}
else if  (rijec[6] == podrijec[6] && rijec[7] == podrijec[7] && rijec[8] == podrijec[8] && rijec[9] == podrijec[9] )
{
cout << "DA" << endl;
}
else if  (rijec[7] == podrijec[7] && rijec[8] == podrijec[8] && rijec[9] == podrijec[9] )
{
cout << "DA" << endl;
}
else if  (rijec[8] == podrijec[8] && rijec[9] == podrijec[9] )
{
cout << "DA" << endl;
}
else
{
cout << "NE" << endl;
}


}


Tom69 pet 18.2.2011 12:46
athlon64 kaže...

evo ovo sam ja sa svojim zanjem iskobimirao , program radi ako se ne upisuju rijeci vece od 10 slova , moga sam iskombinirat i vise al nema smisla , ako neko ima neki bolji algoritam nek mi napise rjesenje:

 

snip

Grozno! {#}

 

Trebaju ti dvije petlje, jedna koja trči po slovima prve riječi i druga koja trči po slovima druge riječi.

Evo slika:

athlon64 pet 18.2.2011 13:14
Tom69 kaže...
athlon64 kaže...

evo ovo sam ja sa svojim zanjem iskobimirao , program radi ako se ne upisuju rijeci vece od 10 slova , moga sam iskombinirat i vise al nema smisla , ako neko ima neki bolji algoritam nek mi napise rjesenje:

 

snip

Grozno! {#}

 

Trebaju ti dvije petlje, jedna koja trči po slovima prve riječi i druga koja trči po slovima druge riječi.

Evo slika:

a kako da to napravim?

Tom69 pet 18.2.2011 15:22
athlon64 kaže...

a kako da to napravim?

S vanjskom petljom ideš od prvog slova rijeci do (broj slova rijeci manje broj slova podrijeci). Dok unutarnja petlja ide od prvog do zadnjeg slova podrijeci i uspoređuje slovo rijeci i podrijeci na toj poziciji. Imaš kao prozor koji se pomiče po rijeci i uspoređuje s podrijeci.

Implementaciju ostavljam tebi za vježbu.

athlon64 pet 18.2.2011 17:32
Tom69 kaže...
athlon64 kaže...

a kako da to napravim?

S vanjskom petljom ideš od prvog slova rijeci do (broj slova rijeci manje broj slova podrijeci). Dok unutarnja petlja ide od prvog do zadnjeg slova podrijeci i uspoređuje slovo rijeci i podrijeci na toj poziciji. Imaš kao prozor koji se pomiče po rijeci i uspoređuje s podrijeci.

Implementaciju ostavljam tebi za vježbu.

prvo slovo u rijeci , ostatak rijeci , ali kako ako se nezna kolika ce bit rijec , korisnik nasumicno upisuje?

Tom69 pet 18.2.2011 17:37

Ako radiš sa string onda imaš rijec.length() koji ti vraća duljinu.

Ako radiš sa poljem char[] onda duljinu dobiješ sa strlen(rijec).

Prvi znak je rijec[0] neovisno što koristiš, a zadnji rijec[duljina-1].

athlon64 pet 18.2.2011 17:51

tesko da cu ja to uspit implementirat , poslat cu ima ga ja na svoj nacin ionako nas drukcije nisu ucili , valjda ce nas na nastavku predavanja ucit to.

Tom69 kaže...

Ako radiš sa string onda imaš rijec.length() koji ti vraća duljinu.

Ako radiš sa poljem char[] onda duljinu dobiješ sa strlen(rijec).

Prvi znak je rijec[0] neovisno što koristiš, a zadnji rijec[duljina-1].

 

Wally pet 18.2.2011 19:29

 

#include <string.h>

#include <stdio.h>

 

bool ASadrziB(char rijec1[], char rijec2[])

{

 int nPoklapanja=0;

 

     for(int i=0; i<strlen(rijec1);i++)

          for(int j=0;j<strlen(rijec2);j++)

          {

            if(rijec1[i+j] == rijec2[j])

               nPoklapanja++;

             else               //razlicita su slova

             {

                 nPoklapanja=0;

                 continue;      //idemo dalje

            }

 

             if(nPoklapanja==strlen(rijec2))

                 return true;     // treba ispisati DA, izlazimo

             }

     return false; 

}

 

void main()

{

char rijec1[20];

char rijec2[20];

 

printf("Unesi prvu rijec:");

scanf("%s",&rijec1);

 

printf("Unesi drugu rijec:");

scanf("%s",&rijec2);

 

if(ASadrziB(rijec1,rijec2))

     printf("DA");

else

     printf("NE");

 

}

 

Ovo bi bilo za C, tek sad vidim da ti treba C++, ne da mi se prepravljati, upotrijebi cin i cout umjesto scanf i printf i mirna bosna, mada ce ti ovo raditi jednako dobro.

Moze se jos optimizirati, ali mislim da nije ovdje bit.