Anagramy

0

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

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;
}


:[

1 użytkowników online, w tym zalogowanych: 0, gości: 1