[C] Program znajdujący lustrzane wyrazy

aGabi94
Użytkownik
Użytkownik
Posty: 230
Rejestracja: 5 mar 2014, o 18:52
Płeć: Kobieta
Lokalizacja: Kraków
Podziękował: 60 razy

[C] Program znajdujący lustrzane wyrazy

Post autor: aGabi94 »

Zadaniem programu jest znalezienie i wpisanie do pliku wyrazów, które są lustrzane,np. kot,tok.
Proszę o pomoc w znalezieniu błędów,ponieważ program się kompiluje,tworzy plik,ale go nie uzupełnia.
Z góry dziękuję.

Kod: Zaznacz cały

#include<conio.h>
#include<stdio.h>
#include<math.h>
#include<string.h>
#include<stdlib.h>
int main()
{char slowo[20];
char slowo2[20];
int lustrzane(char slowo[20],char slowo2[20]);
FILE *plik1,*plik2,*plik3;
plik1=fopen("slownik.txt","r");
plik2=fopen("lustrzane.txt","w");
while(feof(plik1)==0)
{fscanf(plik1,"%s",slowo);
plik3=fopen("slownik2.txt","r");
while(feof(plik3)==0)
{fscanf(plik3,"%s",slowo2);
if(lustrzane(slowo,slowo2)==1)
{
fprintf(plik2,"%s",slowo2);
fprintf(plik2,"
");
}
}
fclose(plik3);
}
fclose(plik1);
fclose(plik2);
printf("Zrobione");
getch();
}
int lustrzane(char slowo[20],char slowo2[20])
{int n=strlen(slowo);
int m=strlen(slowo2);
int i=0; int j=n-1;
if(n!=m)
return 0;
else 
while(slowo[i]==slowo2[j])
{
{j--;
i++;
}
if(i==n)
return 1;
else 
return 0;
}
}
lukequaint
Użytkownik
Użytkownik
Posty: 219
Rejestracja: 5 maja 2010, o 18:27
Płeć: Mężczyzna
Lokalizacja: Wrocław
Podziękował: 1 raz
Pomógł: 75 razy

[C] Program znajdujący lustrzane wyrazy

Post autor: lukequaint »

Odpowiednio formatuj kod - wcięcia ! Gdybyś bardziej zadbała o jego wygląd, szybko odnalazłabyś błąd. W funkcji lustrzane() wychodzisz z pętli while po sprawdzeniu jednego znaku. Przyjrzyj się dobrze. Wystarczyło przestawić klamerkę. Ponadto wczytuj też znak nowej linii z pliku, inaczej ostatni wyraz może być zapisany w pliku wyjściowym kilkukrotnie.

Poprawiony kod:

Kod: Zaznacz cały

#include<stdio.h>
#include<math.h>
#include<string.h>
#include<stdlib.h>

int lustrzane(char slowo[20],char slowo2[20]);

int main()
{
	char slowo[20];
	char slowo2[20];
	FILE *plik1,*plik2,*plik3;
	plik1=fopen("slownik.txt","r");
	plik2=fopen("lustrzane.txt","w");
	while(feof(plik1)==0)
	{
		fscanf(plik1,"%s
",slowo);
		plik3=fopen("slownik2.txt","r");
		while(feof(plik3)==0)
		{
			fscanf(plik3,"%s
",slowo2);
			if (lustrzane(slowo,slowo2)==1)
			{
				fprintf(plik2,"%s",slowo2);
				fprintf(plik2,"
");
			}
		}
		fclose(plik3);
	}
	fclose(plik1);
	fclose(plik2);
	printf("Zrobione
");
	return 0;
}

int lustrzane(char slowo[20],char slowo2[20])
{
	int n=strlen(slowo);
	int m=strlen(slowo2);
	int i=0; int j=n-1;
	if (n!=m)
		return 0;
	while(slowo[i]==slowo2[j])
	{
		j--;
		i++;
	}
	if(i==n)
		return 1;
	return 0;
}
aGabi94
Użytkownik
Użytkownik
Posty: 230
Rejestracja: 5 mar 2014, o 18:52
Płeć: Kobieta
Lokalizacja: Kraków
Podziękował: 60 razy

[C] Program znajdujący lustrzane wyrazy

Post autor: aGabi94 »

Dziękuję ci bardzo za pomoc.
Fibik
Użytkownik
Użytkownik
Posty: 952
Rejestracja: 27 wrz 2005, o 22:56
Płeć: Mężczyzna
Lokalizacja: Wrocław
Podziękował: 11 razy
Pomógł: 74 razy

[C] Program znajdujący lustrzane wyrazy

Post autor: Fibik »

Przecież to się posypie w drobny mak tej pętli:

Kod: Zaznacz cały

while(slowo[i]==slowo2[j])
  {
      j--;
      i++;
   }
nie można wyjechać na ujemne, i wystarczy tylko połowę sprawdzać, czyli tak:

Kod: Zaznacz cały

while( i < j && slowo[i]==slowo2[j])
  {
      j--;
      i++;
   }

return i >= j;
lukequaint
Użytkownik
Użytkownik
Posty: 219
Rejestracja: 5 maja 2010, o 18:27
Płeć: Mężczyzna
Lokalizacja: Wrocław
Podziękował: 1 raz
Pomógł: 75 razy

[C] Program znajdujący lustrzane wyrazy

Post autor: lukequaint »

Dobra uwaga, tego nie zauważyłem. Dzięki.
ODPOWIEDZ