Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

[Zadatak] Brojanje ponavljanja riječi iz učitane liste

[es] :: C/C++ programiranje :: C/C++ za početnike :: [Zadatak] Brojanje ponavljanja riječi iz učitane liste

[ Pregleda: 2858 | Odgovora: 11 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

korisnik07
student
Sarajevo

Član broj: 203947
Poruke: 75
92.36.187.*



Profil

icon [Zadatak] Brojanje ponavljanja riječi iz učitane liste16.11.2009. u 14:23 - pre 175 meseci
"Napisati program koji učitava listu riječi koju zatim ispisuje skupa sa brojem pojavljivanja svake riječi, bez ponavljanja ispisa."

pripremam ispit iz programiranja, i posto se do sad nisam susretao sa Cpp, naisao sam na poteskoce. Gore navedeni zadatak nikako da rijesim, pokusavao sam sa listama, ali ne znam kako da broji svaki posebno unos da li se pojavljuje u listi, i kako da ispisem odredjeni unos iz liste? moze li me neko molim vas usmjeriti sto se tice ovog gore zadatka, hitno je :)
 
Odgovor na temu

djoka_l
Beograd

Član broj: 56075
Poruke: 3453

Jabber: djoka_l


+1462 Profil

icon Re: [Zadatak] Brojanje ponavljanja riječi iz učitane liste16.11.2009. u 14:52 - pre 175 meseci
Ako ti izraz "associative array" ništa ne znači, problem ćeš rešiti vrlo teško, u suprotnom rešenje je u nekoliko redova...
 
Odgovor na temu

Mihajlo Cvetanović
Beograd

Moderator
Član broj: 37636
Poruke: 1249



+96 Profil

icon Re: [Zadatak] Brojanje ponavljanja riječi iz učitane liste16.11.2009. u 15:12 - pre 175 meseci
Ono što ti treba je std::map<std::string, int>. Ako je mapa_stringova ovog tipa onda inkrementiranje broja pojavljivanja nekog stringa nov_string postaje mapa_stringova[nov_string]++. Na kraju rada iteriraš od početka do kraja, i za svaki elemenat na koji se referiše "std::map<std::string, int>::iterator trenutni_iterator" ispiši reč trenutni_iterator->first i njen broj pojavljivanja trenutni_iterator->second.
 
Odgovor na temu

korisnik07
student
Sarajevo

Član broj: 203947
Poruke: 75
92.36.233.*



Profil

icon Re: [Zadatak] Brojanje ponavljanja riječi iz učitane liste16.11.2009. u 16:40 - pre 175 meseci
ništa mi za sad ne znači associative array, ali evo potrudit ću se da naučim šta o tome
 
Odgovor na temu

Goran Arandjelovic
Beograd

Član broj: 29116
Poruke: 387
*.dynamic.sbb.rs.



+9 Profil

icon Re: [Zadatak] Brojanje ponavljanja riječi iz učitane liste16.11.2009. u 19:25 - pre 175 meseci
Citat:
djoka_l: Ako ti izraz "associative array" ništa ne znači, problem ćeš rešiti vrlo teško, u suprotnom rešenje je u nekoliko redova...


Da, baš je inače vrlo teško rešiti... odmah da odustane od zadatka ako ne zna šta su asocijativni nizovi... :)
Inače, trebalo je da ponudiš korisniku skicu tog "teškog" rešenja, možda bi mu značilo...

--

@korisnik07

Ako bi recimo hteo pešaka (bez biblioteka) da rešiš problem i to još sa listama recimo kako si inicijalno hteo... evo najjednostavnijeg rešenja:

Code:

struct Node
{
  string rec;
  int broj_ponavljanja;
  Node *prethodni, *sledeci;
};


Tako bi recimo mogla da izgleda lista.

F-je koje bi otprilike trebalo da obezbediš:

Code:

Node *DodajNaKrajListe(Node *lista, const string &rec);
// F-ja PronadjiElement vraća NULL ako ne pronađe datu reč
Node *PronadjiElement(Node *pocetak_liste, const string &rec);
void IspisiListu(Node *pocetak_liste);


Ne mora sve ovako da bude, ali za početak prolazi...

Code:

int main()
{
  Node *pocetak_liste = new Node;
  Node *kraj_liste = pocetak_liste;

  string rec;

  pocetak_liste->prethodni = NULL;
  pocetak_liste->sledeci = NULL;

  while(/*neki uslov za izlazak kad dodjes do poslednje reči za učitavanje*/)
  {
    // učitaj string (rec) odakle već učitavaš...
    // rec = ...

    // linearna pretraga ti je zadovoljavajuća za zadatak sem ako nije drugačije navedeno
    Node *pr = PronadjiElement(pocetak_liste, rec);
    if(pr != NULL)
    {
      pr->broj_ponavljanja++;
    }
    else
    {
      // dodaš na kraj liste i taj kraj vratiš kao povratnu vrednost
      kraj_liste = DodajNaKrajListe(kraj_liste, rec);
    }
  }

  IspisiListu(pocetak_liste);

  // obriši listu...

  return(0);
}


Pisao sam ovo napamet... ali trebalo bi da ti je sada malo jasnije. Ove funkcije bi trebalo da znaš da napišeš...
 
Odgovor na temu

korisnik07
student
Sarajevo

Član broj: 203947
Poruke: 75
92.36.167.*



Profil

icon Re: [Zadatak] Brojanje ponavljanja riječi iz učitane liste17.11.2009. u 20:50 - pre 175 meseci
riješio sam ovo na sljedeći način, ali malo me buni jer je u napomeni prof napisao da ne smijemo koristiti vektore, pa je li postoji drugi način, ovako sličan ali bez vektora... takođe ne smijemo koristiti pokazivače nit išta slično :)

Code:
#include <iostream>
#include <string>
#include <vector>

using namespace std;

int main() {
    vector <string> lista;
    vector <int> broj;
    string rijec;
    typedef vector<string>::size_type rijeci;

while(cin >> rijec) {
   if(lista.size()==0) {
      lista.push_back(rijec);
      broj.push_back(1);
} else {
      for(rijeci i = 0;i<=lista.size();i++) {
      if(rijec == lista[i]){
      (broj[i])++;
      break;
}

if(i==(lista.size()-1)) {
      lista.push_back(rijec);
      broj.push_back(1);
      break;
}
}
}
}

cout << "Lista rijeci:\n";
        for(rijeci i=0; i<lista.size(); i++) {
            cout << lista[i] << "\t\t" << broj[i] << endl;
        }
system("PAUSE");
return 0;
}

 
Odgovor na temu

Goran Arandjelovic
Beograd

Član broj: 29116
Poruke: 387
*.dynamic.sbb.rs.



+9 Profil

icon Re: [Zadatak] Brojanje ponavljanja riječi iz učitane liste17.11.2009. u 21:01 - pre 175 meseci
Čekaj, smete da koristite klasu string, a ne smete da koristite pokazivače?!
 
Odgovor na temu

korisnik07
student
Sarajevo

Član broj: 203947
Poruke: 75
92.36.167.*



Profil

icon Re: [Zadatak] Brojanje ponavljanja riječi iz učitane liste17.11.2009. u 21:59 - pre 175 meseci
tako ispadne :)
 
Odgovor na temu

Mihajlo Cvetanović
Beograd

Moderator
Član broj: 37636
Poruke: 1249



+96 Profil

icon Re: [Zadatak] Brojanje ponavljanja riječi iz učitane liste17.11.2009. u 22:36 - pre 175 meseci
Kao što rekoh, std::map<std::string, int>. Pogledaj help, probaj, videćeš da je to upravo ono što tražiš.
 
Odgovor na temu

Goran Arandjelovic
Beograd

Član broj: 29116
Poruke: 387
*.dynamic.sbb.rs.



+9 Profil

icon Re: [Zadatak] Brojanje ponavljanja riječi iz učitane liste17.11.2009. u 23:14 - pre 175 meseci
Reče čovek da ne može da koristi ni std::vector, a verovatno ne ni std::map. Samo mi nije jasno zašto ako već ne mogu da koriste pokazivače, mogu da koriste klasu string... Malo je čudno.


@korisnik07
U principu, u prethodnom primeru vidi da samo umesto vektora koristiš onda obične nizove

Code:

string niz[10000]; // stavi neki max broj stringova


a pošto nemaš više push_back, uvedi neki brojač koji označava koliko elemenata imaš u tom nizu do trenutka unosa nove reči.
 
Odgovor na temu

djoka_l
Beograd

Član broj: 56075
Poruke: 3453

Jabber: djoka_l


+1462 Profil

icon Re: [Zadatak] Brojanje ponavljanja riječi iz učitane liste17.11.2009. u 23:49 - pre 175 meseci
Btw. pošto se čini da ne smeš da koristiš map, evo kako bi izgledalo rešenje sa map:
Code:
#include <map>
#include <string>
#include <iostream>

using namespace std;

int main(int argc, char **argv)
{
   map<string, int> wordcount;
   string inputword;
   map<string, int>::iterator i;
   
   while( cin >> inputword) wordcount[inputword]+=1;
   
   cout << "Stastistika:" << endl;
   
   for( i = wordcount.begin();  i != wordcount.end();  i++ )
       cout <<  i->first << " : "<< i->second << endl;
   return 0;
}
 
Odgovor na temu

korisnik07
student
Sarajevo

Član broj: 203947
Poruke: 75
92.36.184.*



Profil

icon Re: [Zadatak] Brojanje ponavljanja riječi iz učitane liste18.11.2009. u 12:58 - pre 175 meseci
mislim da je riješeno, hvala mnogo svima!
 
Odgovor na temu

[es] :: C/C++ programiranje :: C/C++ za početnike :: [Zadatak] Brojanje ponavljanja riječi iz učitane liste

[ Pregleda: 2858 | Odgovora: 11 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.