//PALINDROMY #include #include #include #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; }