rendered paste body
//PALINDROMY
#include <stdio.h>
#include <string.h>
#include <malloc.h>
#ifdef _WIN32
#define CLS system("cls");
#define PAUSE system("pause");
#define CD system("cd");
#else
#define CLS system("clear");
#define PAUSE printf("\nNacisnij dowolny klawisz ..."); getchar();
#define CD system("pwd");
#endif
char* czytaj(FILE *plik,int n,int *prawda)
{
char *s, *ptr;
int i;
s=ptr=(char*)malloc(n*sizeof(char));
while(fgets(ptr,n,plik))
{
for(i=0;i<(n-1);i++)
{
if(ptr[i]=='\n')
{
ptr[i]='\0';
return s;
}
}
s=realloc(s,i+n-1);
ptr=s+i+1;
*prawda=0;
}
}
long max(char nazwa[])
{
FILE *p;
long maxm=0,maxi=0; //maksymalna dlugosc slowa w pliku
char znak;
p=fopen(nazwa,"r");
while(fread(&znak,sizeof(char),1,p)==1)
{
if(znak!='\n'&&znak!='\t'&&znak!=' ')
maxm=maxm+1;
else
{
if(maxm>maxi)
maxi=maxm;
maxm=0;
}
}
if(maxm>maxi)
maxi=maxm;
fclose(p);
return maxi;
}
int czy_palindrom(char palin[])
{
int p=0,k;//p - poczatek k - ustawiamy na koniec lancucha
int czy_palin=0; //jesli 1 to tekst jest palindromem
k=strlen(palin)-1;
while(p<=((strlen(palin))/2))
{
if(palin[p]==palin[k])
{
p++;k--;
czy_palin=1;
}
else
{
czy_palin=0;
break;
}
}
return czy_palin;
}
void wypisz()
{
FILE *plik;
char *nazwa_pliku;
char *yes_or_no="TAK";// TAK / NIE
char *p;//Do niej zapisuje lancuch z pliku
int wyswietl;//jesli równa 1 to wyswietlamy tekst zawarty w p
int pocz=1; //wyswietlam tekst "Oto Palindromy"
long maximum; //maksymalna dlugosc najwiekszego palindromu
int ilosc=0; //ilosc palindromów
int prawda=1;
do
{
for(;;)
{
printf("Podaj nazwe pliku jaki chcesz otworzyc: ");
nazwa_pliku=czytaj(stdin,257,&prawda);
if(prawda==0)
{
CLS
printf("\nPodana przez ciebie nazwa pliku jes ZA DLUGA(maks. 255 znakow)\n");
free(nazwa_pliku);
prawda=1;
continue;
}
break;
}
strcat(nazwa_pliku,".txt");
plik=fopen(nazwa_pliku,"r");
if(plik==NULL)
{
CLS
printf("Nie ma takiego pliku !!!\n");
printf("Czy chcesz podac nazwe jeszcze raz (TAK/NIE): ");
yes_or_no=czytaj(stdin,5,&prawda);
CLS
}
}
while( (((strcmp(yes_or_no,"TAK")==0)||(strcmp(yes_or_no,"tak")==0))&&prawda==1)&&plik==NULL );
if( ((strcmp(yes_or_no,"TAK")!=0)&&(strcmp(yes_or_no,"tak")!=0))||prawda!=1 )
{
CLS
if( (strcmp(yes_or_no,"NIE")==0||strcmp(yes_or_no,"nie")==0)&&prawda==1 )
{
printf("\nGOODBYE :)");
free(yes_or_no);
free(nazwa_pliku);
}
else
{
printf("\nDziwny wybor :)\n SEE YOU");
free(yes_or_no);
free(nazwa_pliku);
}
}
if(plik!=NULL)
{
CLS
maximum=max(nazwa_pliku);
if(maximum!=0)
{
p=(char*)malloc(maximum*sizeof(char));
while(fscanf(plik,"%s",p)!=EOF)
{
wyswietl=czy_palindrom(p);
if(wyswietl==1)
{
if(pocz==1)
{
printf("\n\n\nOto Palindromy:\n");
pocz=0;
}
printf("%s ",p);
ilosc++;
}
}
if(pocz==1)
printf("\n\n\nW tekscie nie wystapily palindromy\n\n");
else
{
if(ilosc==1)
{
printf("\n\n\nW pliku ");
CD
printf("\\%s znajduje sie %i palindrom\n",nazwa_pliku,ilosc);
}
else
{
if(ilosc>=2&&ilosc<=4)
{
printf("\n\n\nW pliku ");
CD
printf("\\%s znajduja sie %i palindromy\n",nazwa_pliku,ilosc);
}
else
{
printf("\n\n\nW pliku ");
CD
printf("\\%s znajduje sie %i palindromow\n",nazwa_pliku,ilosc);
}
}
}
free(p);
}
else
printf("\nPlik jest Pusty\n");
fclose(plik);
free(nazwa_pliku);
}
printf("\n\n\n");
PAUSE
}
int main()
{
printf("\nProgram wypisuje wszystkie palindromy znajdujace sie wpliku.\n\n");
wypisz();
return 0;
}