All pastes #38686 Raw Edit

Something

public text v1 · immutable
#38686 ·published 2006-01-26 17:27 UTC
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;
}