Programiranje u C++-u - pitanja i odgovori izdvojena tema

poruka: 7.285
|
čitano: 1.588.340
|
moderatori: Lazarus Long, XXX-Man, vincimus
+/- sve poruke
ravni prikaz
starije poruke gore
11 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
Znači ovdje se koristi bubble sort??
14 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
HA-HA-HA-HA kaže...
Znači ovdje se koristi bubble sort??

Ako govoriš još uvijek o onom zadatku o kojem si pričao, onda da.

 

Ili da budem opširniji: ne moraš baš bubble sort, to je samo jedan od algoritama za sortiranje (najsporiji i najjednostavniji). Zadatak traži sortiranje liste pilota, dakle morat ćeš upotrijebiti neki algoritam za sortiranje. Zgooglaj si buble sort, insertion sort, shell sort. quick sort... pronaći ćeš hrpetinu primjera i opisa rada tih algoritama. To je stvarno tema za koju ne možeš reći da nema ništa o tome na netu.

What Andy giveth, Bill taketh away.
14 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori

Imam pitanje, vezano uz pokazivače.

 

npr.

 

void funkcija (int * pointer)

{

  *pointer = 10;

}

 

int main()

{

int a = 0;

funkcija(&a);

}

 

 

Sad ne kužim, pošto je ovo pointer, da li treba koristiti naredbu delete ili što (radi memory leaka) ?

Poruka je uređivana zadnji put pon 5.8.2013 23:42 (NiGHT_RiDER92).
14 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
NiGHT_RiDER92 kaže...
Sad ne kužim, pošto je ovo pointer, da li treba koristiti naredbu delete ili što (radi memory leaka) ?

Memory leak ne nastaje od pointera samih po sebi.

 

Memory leak nastane kada heap memoriju, koju si alocirao za svoj program, ne oslobodiš. Operacijski sustav uništava procesov adresni prostor nakon što proces završi sa izvođenjem, što znači da zatvaranje procesa oslobađa svu memoriju koju je on zauzeo za sebe (pa i onu koja je "procurila").

 

Jednostavan primjer memory leaka. Alocirao si memoriju u nekoj funkciji, na kraju funkcije ta memorija ti više nije potrebna (nećeš ju više koristii za ništa drugo) ali ju nisi ispraznio. Pointer koji je pokazivao na taj blok memorije je bio lokalna varijabla te funkcije i na završetku funkcije on nestaje, čime nestaje i svaka veza sa alociranim komadom memorije. Više mu ne možeš pristupiti i osloboditi ga:

 

void f1()
{
    char *p = malloc(4096); // alociramo 4096 bajta memorije
    /* ovdje vršimo nekakvo računanje */

    // funkcija je gotova, ali smo zaboravili osloboditi memoriju
}

int main()
{
    funkcija();

    // funkcija main ne zna ništa o pointeru 'p' iz funkcije 'f1'
    // komad memorije na koji je 'p' pokazivao je izgubljen jer
    // više ne postoji referenca na njega. Stoga više ne možemo
    // ni čitati/pisati po toj memoriji, a ne možemo ju ni osloboditi

    return 0;
}

 

What Andy giveth, Bill taketh away.
13 godina
neaktivan
offline
Programiranje u C++-u - pitanja i odgovori

naišao sam kod jedne rekurzije na: return (polje[a][b][c] = najveci)
tu mi nije jasno da li se tu vrši samo dodjeljivanje, ili dodjeljivanje+vraćanje broja ili nešto treće. 

Moj PC  
0 0 hvala 0
14 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
etnes kaže...

naišao sam kod jedne rekurzije na: return (polje[a][b][c] = najveci)
tu mi nije jasno da li se tu vrši samo dodjeljivanje, ili dodjeljivanje+vraćanje broja ili nešto treće. 

dodjeljivanje + vraćanje broja

 

pazi ovo:

int a, b, c;
a=b=c=4;
printf("a=%d b=%d c=%d\n", a, b, c);

 

ili ovo:

FILE *fh;
if (!(fh = fopen("nekadatoteka.txt", "r")))
{
   printf("datoteka ne postoji!\n");
}
else
{
    printf("datoteka otvorena.\n");
    fclose(fh);
}

 

ili ovo:

int broj=0;
printf("%d\n", broj=3+2);
printf("broj=%d\n", broj);

 

ili ovo:

int a, b, c;
a = 3 + ( b = 2 + (c = 4));
printf("a=%d, b=%d, c=%d\n", a, b, c);

 

To možeš raditi zato što operacija dodjeljivanja vrijednosti ujedno i vraća vrijednost koja je dodjeljena.

An assignment operator stores a value in the object designated by the left operand. An assignment expression has the value of the left operand after the assignment, but is not an lvalue.

What Andy giveth, Bill taketh away.
Poruka je uređivana zadnji put sri 7.8.2013 13:22 (rustweaver).
14 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
etnes kaže...

naišao sam kod jedne rekurzije na: return (polje[a][b][c] = najveci)
tu mi nije jasno da li se tu vrši samo dodjeljivanje, ili dodjeljivanje+vraćanje broja ili nešto treće. 

U c/c++ "=" je operarator. Svaki operator vraća rezultat pa tako i ovaj (rezultat koji vraca je vrijednost izraza s desne strane). Specifično za ovaj operator je to što ima i "side effect" tj. mijenja vrijednost operanda.
U tvom slucaju prvo se vrijednost varijable najveci dodjeli elementu niza polje i nakon toga funkcija vrati rezultat operatora dodjele tj. vrati vrijednost varijable najveci
http://en.wikipedia.org/wiki/Side_effect_(computer_science)#Example 

11 godina
neaktivan
offline
Programiranje u C++-u - pitanja i odgovori

E može pomoć oko ovoga Bubble sorta.. nešto kužim ali s pojedinim djelovima ovoga zadatka nisam upoznat..Volio bih kad bi mi neko objasnio ove dijelove koje sam obiljezio!!

 

Neka je data datoteka sa izgledom sloga: 

struct korisnik { 

 int id; 

 char Ime[20]; 

 char Prezime[20]; 

 char Br_tel[20]; 

}; 

I neka je napunjena datoteka imenik.dat sa korisnicima koji nisu sortirani.

Napisati program koji će napraviti novu tekstualnu datoteku imenik.txt sa sortiranim korisnicima.

Zadatak riješiti korištenjem bubble sorta!!

 

Prvi dio zadatka:

teststruct.cpp kreira i puni datoteku imenik1.dat sa nesortiranim zapisima

 

 

#include <iostream> 

#include <fstream> 

using namespace std; 

int filesize(); 

struct teststruct 

 int id; 

 char Ime[20]; 

 char Prezime[20]; 

 char Br_tel[20]; 

}; 

#define VELICINA_STRUKTURE 64 

main() { 

///////// upis strukture u fajl ////////// 

teststruct ts[] = { 6, "Smajos", "Ibrahimos", "068-111-111", 

 5, "Igoros", "Prses", "069-222-333", 

 4, "Edhemaga", "Burzukos", "067-444-555", 

 3, "Ilijus", "Mrvikos", "067-999-888", 

 2, "Ilkos", "Marelikoz", "067-777-797", 

 1, "Ilkos", "Marelikos", "069-756-981" }; 

ofstream of("imenik1.dat"); 

of.write((char *)(&ts),sizeof(ts))

of.close(); 

//////// citanje strukture iz fajla //////// 

int i; 

int n = filesize()/VELICINA_STRUKTURE; 

ifstream in("imenik1.dat"); 

i=0; 

while (i<n) { 

 in.read((char *)(&ts[i]), sizeof(ts))

 i++; 

in.close(); 

////// kontrolni ispis na ekran /////////// 

cout << "Struktura ima " << n << " zapisa:" << endl << endl; 

i=0; 

while (i<n) { 

 cout << ts[i].id << endl; 

 cout << ts[i].Ime << endl; 

 cout << ts[i].Prezime << endl; 

 cout << ts[i].Br_tel << endl << endl; 

 i++; 

cout << endl; 

system("pause"); 

 

int filesize(){ 

ifstream in; 

in.open ("imenik1.dat", ios::binary ); 

if (in.good()==false) {cout << "Datoteka se ne moze otvoriti!\n";} 

in.seekg (0, ios::end)

int bajtova= in.tellg()

in.close (); 

if (in.good()==false) {cout << "Datoteka se ne moze zatvoriti!\n";} 

return bajtova; 

 

 

Drugi dio zadatka!!

 

bsortimenik.cpp radi "bubble-sort" algoritam nad datotekom 

imenik1.dat i sprema sortiranu strukturu po prezimenu u imenik1.txt

 

 

 

#include <iostream> 

#include <fstream> 

using namespace std; 

struct korisnik 

 int id; 

 char Ime[20]; 

 char Prezime[20]; 

 char Br_tel[20]; 

}; 

#define VELICINA_STRUKTURE 64 

int filesize(); 

void zamjeni(korisnik& x, korisnik& y); 

void bsort(korisnik niz[], int duzinaNiza); 

main() { 

int i; 

int n = filesize() / VELICINA_STRUKTURE; 

korisnik *ts = new korisnik[n]

 

/* citanje strukture iz fajla */ 

ifstream in("imenik1.dat"); 

i=0; 

while (i<n) { 

 in.read((char *)(&ts[i]), sizeof(ts[n]))

 i++; 3

in.close();

/* kontrolni ispis na ekran */ 

cout << "Datoteka 'imenik1.dat' sadrzi " << n << " zapisa:" << endl << endl; 

i=0; 

while (i<n) { 

 cout << ts[i].id << endl; 

 cout << ts[i].Ime << endl; 

 cout << ts[i].Prezime << endl; 

 cout << ts[i].Br_tel << endl << endl; 

 i++; 

 

bsort(ts, n); 

cout << endl << "Izgled zapisa nakon sortiranja po prezimenu: " << endl << endl; 

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

cout << ts[i].Prezime << endl; 

cout << ts[i].Ime << endl; 

cout << ts[i].id << endl; 

cout << ts[i].Br_tel << endl << endl; 

/* spremanje u datoteku 'imenik1.txt' */

ofstream out; 

out.open("imenik1.txt"); 

if (out.good()==false) {cout << "GRESKA: Datoteka se ne moze otvoriti!\n";} 

i=0; 

while (i<n) { 

out.write((char *)(&ts[i]), sizeof(ts[n])); 

i++; 

out.close(); 

if (out.good()==false) {cout << "GRESKA: Datoteka se ne moze zatvoriti!\n";} 

cout << endl; 

system("pause"); 

 

/* odredjivanje velicine fajla */

int filesize(){ 

ifstream in; 

in.open ("imenik1.dat", ios::binary ); 

if (in.good()==false) {cout << "GRESKA: Datoteka se ne moze otvoriti!\n";} 

in.seekg (0, ios::end)

int bajtova = in.tellg()

in.close (); 

if (in.good()==false) {cout << "GRESKA: Datoteka se ne moze zatvoriti!\n";} 

return bajtova; 

 

/* zamjena elemenata */

void zamjeni(korisnik& x, korisnik& y) { 

korisnik z = x; 

x = y; 

y = z; 

 

/* bubble-sort po prezimenu */

void bsort(korisnik niz[], int duzinaNiza) { 

int i, j, k; 

for (i=duzinaNiza-1; i>0; i--) { 

for (j=0; j<i; j++) { 

k=0; 

while (niz[j].Prezime[k] == niz[j+1].Prezime[k]) { 

 k++;} 

if (niz[j].Prezime[k] > niz[j+1].Prezime[k]) {zamjeni(niz[j], niz[j+1]);} 

}

 
0 0 hvala 0
11 godina
neaktivan
offline
Programiranje u C++-u - pitanja i odgovori

Može li mi tko reci zasto ovaj program pravilno ne ispisuje rijeci nego samo prva slova rijeci?

 

#include <iostream>

#include <cstring>

#include <stdio.h>

using namespace std;

int main()

{

   int n,i;

   cout<<"Unesite koliko zelite rijeci"<<endl;

   cin>>n;

   char r[256];

   for(i=0;i<n;i++)

     {

     cout<<"Unesite "<<i+1<<". rijec"<<endl;

     fflush(stdin);

     cin>>r[i];

     }

     cout<<"Isps rijeci"<<endl;

     for(i=0;i<n;i++)

       cout<<r[i]<<endl;

   return 0;

}

 
0 0 hvala 0
14 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
HA-HA-HA-HA kaže...

Može li mi tko reci zasto ovaj program pravilno ne ispisuje rijeci nego samo prva slova rijeci?

 

#include <iostream>

#include <cstring>

#include <stdio.h>

using namespace std;

int main()

{

   int n,i;

   cout<<"Unesite koliko zelite rijeci"<<endl;

   cin>>n;

   char r[256];

   for(i=0;i<n;i++)

     {

     cout<<"Unesite "<<i+1<<". rijec"<<endl;

     fflush(stdin);

     cin>>r[i];

     }

     cout<<"Isps rijeci"<<endl;

     for(i=0;i<n;i++)

       cout<<r[i]<<endl;

   return 0;

}

Ako je 'r' polje znakova, onda je r[i] jedan jedini znak. Prema tome što bi ti napravio da ti netko kaže uneseš, a kasnije i ispišeš jedan znak?

What Andy giveth, Bill taketh away.
12 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
HA-HA-HA-HA kaže...

Može li mi tko reci zasto ovaj program pravilno ne ispisuje rijeci nego samo prva slova rijeci?

Zato što i unosiš po jedan karakter - char.

 

Ukoliko želiš polje za riječi moraš napraviti polje stringova, pa onda unositi riječi.

 

I jedna primjedba, dozvoljavaš korisniku da unese koliko želi riječi, a dole polje ograničiš na 256, ili dinamički alociraj polje ili ograniči unos na 256.

 

EDIT: Pretekao me rustweaver. :)

Poruka je uređivana zadnji put pet 9.8.2013 16:02 (royalhero).
11 godina
neaktivan
offline
Programiranje u C++-u - pitanja i odgovori

može pomoć!!! ovako: Zadatk glasi. Unesi pet recenica i sortiraj ih po brojuslova tj. znakova.

Nece mi da sortira .

 

#include <iostream>

#include <cstring>

#include <stdio.h>

#define MAX 5

#define DUZINA  80

using namespace std;

int main()

{

   int i,j;

   char rec[MAX][DUZINA];

   for(i=0;i<MAX;i++)

     {

     cout<<"Unesite "<<i+1<<". recenicu"<<endl;

     fflush(stdin);

     cin.getline(rec[i],DUZINA);

     }

     char *pom;

     for(i=0;i<MAX-1;i++)

       {

       for(j=i+1;j<MAX;j++)

         if(strlen(rec[j])>strlen(rec[i]))

         pom=rec[i];

        rec[j]=rec[i];

        rec[j]=pom;

       }

     cout<<"Isps recenica"<<endl;

     for(i=0;i<MAX;i++)

       cout<<rec[i]<<endl;

   return 0;

}

 
0 0 hvala 0
13 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori

Ne možeš koristiti operator = pri radu s char nizovima već strcpy.

Kada lajavci laju onda završe ovako: http://i471.photobucket.com/albums/rr77/toropreto/2012-07-0813_30_07.gif
11 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
da da sjetio sam se!!! svejedno hvala!
11 godina
neaktivan
offline
Programiranje u C++-u - pitanja i odgovori

al je opet nešto krivo u zadatku.

#include <iostream>

#include <cstring>

#include <stdio.h>

#define MAX 10

#define DUZINA  80

using namespace std;

int main()

{

   int i,j;

   char rec[MAX][DUZINA],pom[DUZINA];

   for(i=0;i<MAX;i++)

     {

     cout<<"Unesite "<<i+1<<". recenicu"<<endl;

     fflush(stdin);

     cin.getline(rec[i],DUZINA);

     }

     for(i=0;i<MAX-1;i++)

       {

       for(j=i+1;j<MAX;j++)

         if(strlen(rec[j])>strlen(rec[i]))

         strcpy(pom,rec[i]);

         strcpy(rec[i],rec[j]);

         strcpy(rec[j],pom);

       }

     cout<<"Isps recenica"<<endl;

     for(i=0;i<MAX;i++)

       cout<<rec[i]<<endl;

   return 0;

}

 
0 0 hvala 0
16 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
WAYY kaže...
da da sjetio sam se!!! svejedno hvala!

Čini mi se da ni taj selection sort nije ispravan

 

for(i =0; i<MAX; i++)

{

   for(j  = i + 1; j <MAX; j++)

   {

      if(strlen(rijec[j] < strlen(rijec[i])

      {

        strcpy(pom, rijec[j];

        strcpy(rijec[j], rijec[i]); 

        strcpy(rijec[i], pom);

      }

     }

}

11 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
ma sorry nisam vidio zaboravio zagrade zatvoriti sve je ok.. sam sa mnom nesto nije ok!! :P
13 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
Floki kaže...

Čini mi se da ni taj selection sort nije ispravan

Bubble sort.

Kada lajavci laju onda završe ovako: http://i471.photobucket.com/albums/rr77/toropreto/2012-07-0813_30_07.gif
Poruka je uređivana zadnji put pet 9.8.2013 19:43 (TracerCPP).
16 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
TracerCPP kaže...
Floki kaže...

Čini mi se da ni taj selection sort nije ispravan

Bubble sort.

što bubble ne zamjenjuje samo po indexima unutarnje petlje, a selection uvodi index vanjske petlje kao minimalan član.

13 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori

Ah da, istina. U pravu si.

 

Zbunilo me što su dvije for petlje odmah jedna ispod druge tj. minimalni član nije posebno spremljen u neku varijablu, već se umjesto toga ispitivao direktno preko indeksa "i".

 

Iako, ja svejedno ne bih tu implementaciju tako napisao jer je previše zamjena... Brže bi bilo napraviti originalno kako selection sort radi;

1) spremi i-ti element

2) pronađi najmanji u ostatku polja

3) zamjeni i-ti i najmanji u ostatku (ako je potrebno).

 

for (i = 0; i < MAX; i++) {
    min = i;   
    for (j = i + 1; j < MAX; j++)
       if (polje[j] < polje[min]) min = j; // brže nego svaki put zamjena
    pom = polje[i];   
    polje[i] = polje[min];
    polje[min] = pom;   
}

Kada lajavci laju onda završe ovako: http://i471.photobucket.com/albums/rr77/toropreto/2012-07-0813_30_07.gif
Poruka je uređivana zadnji put pet 9.8.2013 19:40 (TracerCPP).
16 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
TracerCPP kaže...

Ah da, istina. U pravu si.

 

Zbunilo me što su dvije for petlje odmah jedna ispod druge tj. minimalni član nije posebno spremljen u neku varijablu, već se umjesto toga ispitivao direktno preko indeksa "i".

Sve 5, nisam ni ja najprije primjetio da uspoređuje i i j indexe, pa sam se onda čudio zašto ne poveća drugi index za 1, ovako mu i vanjska petlja treba ići do MAX, a ne MAX - 1

A najbolje da napiše original selection, kako si napisao.

Poruka je uređivana zadnji put pet 9.8.2013 19:54 (Floki).
11 godina
neaktivan
offline
Programiranje u C++-u - pitanja i odgovori

Ima li razile u korištenju:

 

std::cout<<""<<endl; i

 

using namespace std;

 

cout<<""<<endl;

 

Negdje sam pročitao mozda na stackoverflowu da je bolji prvi način, zašto?

 
0 0 hvala 0
16 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
Xyloto kaže...

Ima li razile u korištenju:

 

std::cout<<""<<endl; i

 

using namespace std;

 

cout<<""<<endl;

 

Negdje sam pročitao mozda na stackoverflowu da je bolji prvi način, zašto?

Konkretne razlike nema, nece se brze kod izvrsavati, manje memorije koristiti ili slicno.

Razlika je u citljivosti koda. S prvim nacinom znas iz kojeg je namespacea neki objekt, s drugim ne znas odmah, vec trebas traziti using deklaracije po kodu.

Perhaps today IS a good day to die. PREPARE FOR RAMMING SPEED!
15 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
WAYY kaže...

može pomoć!!! ovako: Zadatk glasi. Unesi pet recenica i sortiraj ih po brojuslova tj. znakova.

Nece mi da sortira .

 

#include <iostream>

#include <cstring>

#include <stdio.h>

#define MAX 5

#define DUZINA  80

using namespace std;

int main()

{

   int i,j;

   char rec[MAX][DUZINA];

   for(i=0;i<MAX;i++)

     {

     cout<<"Unesite "<<i+1<<". recenicu"<<endl;

     fflush(stdin);

     cin.getline(rec[i],DUZINA);

     }

     char *pom;

     for(i=0;i<MAX-1;i++)

       {

       for(j=i+1;j<MAX;j++)

         if(strlen(rec[j])>strlen(rec[i]))

         pom=rec[i];

        rec[j]=rec[i];

        rec[j]=pom;

       }

     cout<<"Isps recenica"<<endl;

     for(i=0;i<MAX;i++)

       cout<<rec[i]<<endl;

   return 0;

}

 

Evo ti još jedan način. HINT:: probaj polako uvoditi ako ne već klase onda bar defaultne c++ std biblioteke.

 

http://ideone.com/grHcKY

 

#include <iostream>
#include <algorithm>
#include <vector>
 
using namespace std;
 
enum Task
{ PRINT, COLLECT };
 
/***shared memory***/
vector < string > recenice;
string recenica;
/**********************/
 
void job(Task task)
{
  for (unsigned int i = 0; i < 5; i++)
  {
        if (task == PRINT)
        {
          cout << i << ". " << recenice[i] << endl;
        }
        else if(task == COLLECT)
        {
          getline(cin, recenica);
          recenice.push_back(recenica);
        }
 
  }
}
 
struct Sorter
{
  bool operator() (string s0, string s1)
  {
    return s0.size() < s1.size();
  }
}
sorter;
 
 
 
int main()
{
  cout << "unesi 5 recenica\n";
 
  job(COLLECT);
  sort(recenice.begin(), recenice.end(), sorter);
  job(PRINT);
 
 
  return 0;
}

 

 

 

 

Xyloto kaže...

Ima li razile u korištenju:

 

std::cout<<""<<endl; i

 

using namespace std;

 

cout<<""<<endl;

 

Negdje sam pročitao mozda na stackoverflowu da je bolji prvi način, zašto?

 

Tehnički gledano nema razlike jer oboje rade isto ali u realnosti prvi je način daleko bolji jer "using namespace std;" više manje koristi se samo u kodu edukativnog karaktera.U nakakvim imalo ozbiljnijim projektima često koristiš framework-e koji imaju svoje namespaceove , radiš s libovima koji ne trebaju inkludati cijeli std namespace , ... itd , da ne duljim , dobro si pročitao.

http:/https://play.google.com/store/apps/details?id=org.kde.necessitas.example.SMASHHH
Poruka je uređivana zadnji put pet 9.8.2013 22:02 (nik_02).
12 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori

Zar ne bi bilo čitljivije umjesto multipraktik funkcije job koristiti dvije, collect i print?

11 godina
neaktivan
offline
Programiranje u C++-u - pitanja i odgovori

Može pomoć oko još jednog zadatka... sličan prijašnjem, samo se traži soritranje rečenica po broju riječi a ne znakova... ja znam prebrojati riječi svake rečenice al neznam kako ubaciti obični sort za rečenice?? može li mi ko ubaciti taj sort??

 

 

#include <iostream>

#include <stdio.h>

#include <cstring>

using namespace std;

#define MAX 5

int broji_rijeci(char *recenica,int duz);

int main()

{

   int i,br_rec;

   char rec[MAX][256];

     for(i=0;i<MAX;i++)

       {

     cout<<"Unesi "<<i+1<<" recenicu: "<<endl;

     cin.getline(rec[i],256);

}

cout<<endl;

  for(i=0;i<MAX;i++)

       {

       br_rec=broji_rijeci(rec[i],MAX);

       cout<<i+1<<". recenica ima "<<br_rec<<" rijeci"<<endl;

       }

       cout<<endl;

 

   return 0;

}

int broji_rijeci(char *recenica,int duz){

   int i,razmak=1;

   for(i=0;i<duz;i++)

     {

       while(recenica[i]!='\0'){

       if(recenica[i]==' '||recenica[i]=='\t'){

       razmak++;

       }

     recenica++;

     }

     }return razmak;

}

 

 
0 0 hvala 0
16 godina
neaktivan
offline
Programiranje u C++-u - pitanja i odgovori

Onaj prvi možemo riješiti i preko klase Recenice, kad je već bila riječ o C++.

Metod sort je standardni metod stl-a, i sortira rečenice po abecedi, a metod sortL sortira rečenice po duljini.

 

 


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

 class Recenice
{
private:
    vector<string> recenice;
    string recenica;
public:
    void unos();
    void sortL();
    void sort();
    void ispis();
};
void Recenice::unos()
{
    for(int i = 0; i < 5; i++)
    {
       getline(cin, recenica);
       recenice.push_back(recenica);
    }
}
bool sortiraj(string st1, string st2)
{
    return st1.length() < st2.length();
}
void Recenice::sortL()
{
    std::sort(recenice.begin(), recenice.end(), sortiraj);
}
void Recenice::sort()
{
    std::sort(recenice.begin(), recenice.end());
}
void Recenice::ispis()
{
    for(vector<string>::iterator it = recenice.begin(); it != recenice.end(); it++)
       cout<< *it << endl;
    cout<< endl;
}
int main()
{
    Recenice skup;
    skup.unos();
    skup.ispis();
    skup.sort();
    skup.ispis();
    skup.sortL();
    skup.ispis();
    return 0;
}

Poruka je uređivana zadnji put sub 10.8.2013 16:02 (Floki).
 
1 0 hvala 0
16 godina
neaktivan
offline
Programiranje u C++-u - pitanja i odgovori

Vidio si onaj gore selection sort.

 

 

if(brojRijeci(rijec[j]) < brojRijeci(rijec[i]))

 

Slijedi zamjena sa strcpy ako je uvjet ispunjern.

 

Dakle, umjesto strlen, staviš poziv tog svog metoda.

Poruka je uređivana zadnji put sub 10.8.2013 16:01 (Floki).
 
0 0 hvala 0
11 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori

Pokuso sam ali nest nije htjelo stoga sam i pito...pa sam pokuso na ovaj način, ali mi samo ispise prvu rečenicu!!

 

#include <iostream>

#include <stdio.h>

#include <cstring>

using namespace std;

#define MAX 5

int broji_rijeci(char *recenica,int duz);

int main()

{

   int i,j;

   char rec[MAX][256],pom[256];

     for(i=0;i<MAX;i++)

       {

     cout<<"Unesi "<<i+1<<" recenicu: "<<endl;

     fflush(stdin);

     cin.getline(rec[i],256);

}

cout<<endl;

  for(i=0;i<MAX-1;i++)

       {

         for(j=i+1;j<MAX;j++)

           {

       if(broji_rijeci(rec[j],MAX)>broji_rijeci(rec[i],MAX));

             {

              strcpy(pom,rec[i]);

              strcpy(rec[j],rec[i]);

              strcpy(rec[j],pom);

             }

           }

       }

       for(i=0;i<MAX;i++)

         {

         cout<<rec[i]<<endl;

         }

   return 0;

}

int broji_rijeci(char *recenica,int duz){

   int i,razmak=1;

   for(i=0;i<duz;i++)

     {

       while(recenica[i]!='\0'){

       if(recenica[i]==' '||recenica[i]=='\t'){

       razmak++;

       }

     recenica++;

     }

     }return razmak;

}

 

14 godina
neaktivan
offline
Programiranje u C++-u - pitanja i odgovori

Pozdrav, imam pitanje, da objasnim, ovako:

 

za pocetak zanemarimo sad taj kod i npr da umjesto string * line = new string imamo samo string line i umjesto *line u ostalom dijelu koda samo line.

Da li je to u biti jedno te isto ili ne? Što se točno događa u oba slučaja?

 

 

  vector<string> buffer;

  string * line = new string;

 

ifstream data(FileName);

 

while (getline(data, *line))

{

 

buffer.push_back(*line);

}

 

Moj PC  
0 0 hvala 0
E-mail:
Lozinka:
 
vrh stranice