Kezdőoldal » Számítástechnika » Programozás » Ebben az algoritmus háziban...

Ebben az algoritmus háziban szerintetek mit kell programozni?

Figyelt kérdés

A házi a következő: Mérje meg a gráfok topológikus rendezésének hatékonyságát! Töltsön le különböző méretű txt szövegeket, olvassa be a segédprogram segítségével a memóriába, és hozza létre a gráfot. A gráf csúcsai az adott szavak, és két csúcs között fut él, ha a megadott távolságfüggvény, kisebb, mint egy előre megadott szám(ezt a programozó állítja be), az él iránya a nagyobbik szó felé mutat. Ezen a gráfon végezze el a rendezést, különböző méretű bemenetekre.



Segédprogram:



// szavankent beolvasunk egy szoveget

// a szavakat kisbetusitjuk, kitoroljuk a nem betuket

// az eredmenyt rendezzuk, toroljuk az ismetlodeseket

// es elmentjuk az a[] tombbe


#include <iostream>

#include <fstream>

#include <algorithm>

using namespace std;

const int Z=10000000;

string a[Z];

string b[Z];

//ha nagyon nagy meretu tombot foglalunk le,

//azt vagy dinamikusan tudjuk megtenni (new fuggveny)

//vagy globalis valtozokent

int N=0;

int front=0, rear=0;

int qu[Z];

void qput(int a){

qu[rear++]=a;

}


int qget(){

int tmp;

if(front<Z){

tmp=qu[front];

qu[front++]=0;

return tmp;

} else return -1;


}



void beolvas(){

string st;

int i,j,k,s;

ifstream fin("readme.txt");

while(fin>>st){

s=st.size();

for(k=0,i=0;k<s;k++){

if(st[i]>='A'&&st[i]<='Z')st[i]-='A'-'a';

//nagy betu -> kisbetu

if(st[i]<'a'||st[i]>'z')st.erase(st.begin()+i);

//ami nem betu kitoroljuk

else i++;

}

if(st.size()>0)b[N++]=st;

//ha maradt a szobol berakjuk a tombbe

}

sort(b,b+N);

a[0]=b[0];

st=b[0];

j=0;

for(k=1,i=1;k<N;k++){

if(b[k]!=st){a[i++]=b[k];st=b[k];j=0;}

else if(j<2){ //a 2-o atirhato, ha ugy tartja szuksegesnek!

a[i]=b[k];

j++;

for(s=0;s<j;s++)a[i]+='q';

i++;

}

//ha nincs ismetlodes, elmentjuk az a[] tombbe

//ha van, akkor irjunk moge egy 'q' betut, de max 2-ot, vagy irja at!

}

N=i;

cout<<"N: "<<N<<endl;

for(int i=0;i<N+30;i++)

cout<<a[i]<<", ";

cout<<endl;

for(int i=0;i<N+30;i++)

cout<<b[i]<<", ";

cout<<endl;


}


bool vanel(string a, string b){

//ha azonos betuvel es massalhangzoval kezdodik a ket szo,

//akkor visszafele mutat a nyil

//egyebkent elore

bool nyil=false;

if(a==b)return 0;

if(a[0]=='a'||a[0]=='e'||a[0]=='i'||a[0]=='o'||a[0]=='u'

||b[0]=='a'||b[0]=='e'||b[0]=='i'||b[0]=='o'||b[0]=='u'

||a[0]!=b[0])

{

if(a<b)nyil=true;

else nyil=false;

}

else

if(a>b)nyil=true;

else nyil=false;

return nyil;

}



int main(){


beolvas();



system("pause");


}



2014. máj. 4. 14:16
 1/2 A kérdező kommentje:

cout<<"N: "<<N<<endl;

for(int i=0;i<N+30;i++)

cout<<a[i]<<", ";

cout<<endl;

for(int i=0;i<N+30;i++)

cout<<b[i]<<", ";

cout<<endl;



ez a rész nem kell bele, csak én néztem vmit.

2014. máj. 4. 14:17
 2/2 anonim ***** válasza:
Szerintem magát a rendező algoritmust kell megcsinálni, aztán kiíratni, hogy pl. hány lépésben oldotta meg, mennyi memóriát használt fel, stb.
2014. máj. 6. 12:42
Hasznos számodra ez a válasz?

Kapcsolódó kérdések:




Minden jog fenntartva © 2025, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!