Na Newbie nikt mi za bardzo nie pomogl wiec pisze tutaj.
Zwracam sie z prosba o podpowiedzenie paru pomyslow jak wykonac nastepujace zadanie na zaliczenie:
Mam napisac program wyszukujacy w slowniku zawierajacym angielskie wyrazy (slownki mam podany) anagramy podanego slowa. ANAGRAMY - slowa skladajace sie dokladnie z ych samych liter ale w zmienionej kolejnosci np: kosciotrup - prosciutko. Na dodatek mam w programie dodajc pasek postepu wyszukiwania. Bylbym wdzieczny za jakies wskazowki bo moja przygoda z C++ jest bardzo krotka :-(
0
0
stworz sobie pomocniczy slownik z posortowanymi literami w wyrazie
np tama bedize w tym slowniku aamt
a wyraz mata tez aamt i w ten sposob wiesz ze to anagram :d
0
Napisalem ten program lecz gdy wpisuje slowo gdzie sa dwie lub wiecej takich samych liter to przy wypisywaniu anagramow podstawia mi za jedna z tych liter obojetnie jaka. Gdzie jest blad co poprawic.
Musze ten program dokonczyc na jutro wiec prosze pomozcie bo ja juz nie mam pomyslu! HEEEELLP[!!!]
#include <iostream.h>
#include <conio.h>
#include <io.h>
#include <fcntl.h>
unsigned int wielk_lan(char* lan1)
{
unsigned int L1;
for (L1=0; lan1[L1] != NULL; L1++);
return L1;
}
//----------------------------------------------------------------------------------
int spr_lit(char* lan1, char lit)
{
for (unsigned int L1=0; L1 != wielk_lan(lan1); L1++)
if (lan1[L1]==lit) return 0;
return 1;
}
//----------------------------------------------------------------------------------
int spr_angrm(char* lan1, char* lan2)
{
unsigned int L1 = wielk_lan(lan1);
unsigned int L2;
if (L1 != wielk_lan(lan2)) return 1;
for (L2=0; L2 != L1; L2++)
if(spr_lit(lan2, lan1[L2])==1) return 1;
for (L2 = 0; L2 != L1; L2++)
if (lan1[L2] != lan2[L2]) return 0;
return 1;
}
//----------------------------------------------------------------------------------
char* read(int slwk)
{
char* lanS;
char akt_lit;
int wynik;
int L1;
wynik = read(slwk, &akt_lit, 1);
if (wynik==0) return NULL;
lanS = new char[40];
for (L1=0;; L1++)
{
lanS[L1] = akt_lit;
if(akt_lit==NULL) break;
wynik = read(slwk, &akt_lit, 1);
if (wynik==0) akt_lit = NULL;
if (akt_lit=='\n') akt_lit=NULL;
}
return lanS;
}
//----------------------------------------------------------------------------------
void postep()
{
cout<<"\t\t";
for (int i=0; i!=55; i++)
{highvideo();
textcolor(YELLOW);
cprintf("*");
}
}
//----------------------------------------------------------------------------------
//----------------------------------------------------------------------------------
int main()
{
char* slowo = new char[40];
char* lanSF;
int slwk;
int j=0;
clrscr();
highvideo();
gotoxy(27, 5);
textbackground(GREEN);
cprintf("ANAGRAMY 1.0");
textbackground(BLACK);
gotoxy(10,7);
cprintf("---------------------------------------------\n");
gotoxy(10,8);
cprintf("| Autor Programu: Pawel Pogorzelski |\n");
gotoxy(10,9);
cprintf("| |\n");
gotoxy(10,10);
cprintf("| IZ3. |\n");
gotoxy(10,11);
cprintf("| |\n");
gotoxy(10,12);
cprintf("---------------------------------------------\n");
gotoxy(25,15);
cout<<"Podaj slowo: ";
cin >> slowo;
slwk = open("words", O_RDONLY|O_TEXT);
if (slwk==-1)
{
gotoxy(29,20);
textattr(448);
cprintf("UWAGA!!!\n\n");
cout << endl<< "Nie mozna otworzyc pliku: 'words'"
<< endl
<< "Sprawdz czy w katalogu, z ktorego otwierasz program znajduje sie plik 'words'"
<< endl
<< "Nacisnij dowolny klawisz aby zakonczyc program" <<endl;
getch();
return -1;
}
cout << endl <<"Anagramy podanego slowa:"<<endl;
long f_poz,f_poz_przes,f_poz_poprz = 0;
int f_pas,pas_kr = 0;
long k = lseek(slwk, 0, SEEK_END);
f_pas = k /55;
if (f_pas==0) f_pas = 1;
lseek(slwk, 0, SEEK_SET);
cout<<"\n\t";
postep();
cout <<"\r\t\t\t";
for(;;)
{
lanSF = read(slwk);
f_poz = tell(slwk);
f_poz_przes = f_poz - f_poz_poprz;
f_poz_poprz = f_poz;
if (lanSF==NULL) break;
if (spr_angrm(slowo, lanSF)==0)
{
cout <<"\n\r\t";
postep();
cout <<"\r" <<j++<<". "<<lanSF <<"\t";
if (wielk_lan(lanSF) < 16) cout <<"\t";
if (wielk_lan(lanSF) <8) cout <<"\t";
for (int i=0; i<pas_kr; i++) cout <<"#";
}
delete[] lanSF;
lanSF = NULL;
if (f_poz_przes > f_pas)
{
for (int i=0; i<(f_poz_przes/f_pas); i ++, pas_kr++)
{
if (pas_kr>=55) break;
cout <<"_";
}
}
}
for (int i=0; i<(55-pas_kr); i ++) cout << "_";
cout << endl << endl <<"Koniec programu ANAGRAMY" <<endl;
cout << endl << "Nacisnij dowolny klawisz aby zakonczyc program" <<endl;
close(slwk);
delete[] slowo;
getch();
return 0;
}
:[