All pastes #37786 Raw Edit

Something

public text v1 · immutable
#37786 ·published 2006-01-21 10:04 UTC
rendered paste body
#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("reset");
#define PAUSE printf("\nNacisnij dowolny klawisz ..."); getchar();
#define CD system("ls");
#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 max=0; //maksymalna dlugosc slowa w pliku
    long rozmiar; //zawiera liczbe bajtow od poczatku do konca
    char *s; //dlogosc bedzie rowna liczbeie bajtow

    p=fopen(nazwa,"r");
    fseek(p,0,SEEK_END);
    rozmiar=ftell(p);
    rewind(p);
    s=(char*)malloc(rozmiar*sizeof(char));
    while(!feof(p))
    {
      fscanf(p,"%s",s);
      if(max<strlen(s))
         max=strlen(s);
    }
    fclose(p);
    if(s!=NULL)
       free(s);
    return max;
}

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=NULL;// 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;

repeat:
     printf("Podaj nazwe pliku jaki chcesz otworzyc: ");
     nazwa_pliku=czytaj(stdin,22,&prawda);
     if(prawda==0)
     {
        CLS
        printf("\nPodana przez ciebie nazwa pliku jes ZA DLUGA(maks. 20 znakow)\n");
        free(nazwa_pliku);
        prawda=1;
        goto repeat;
     }  
     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
        if( ((strcmp(yes_or_no,"TAK")==0)||(strcmp(yes_or_no,"tak")==0))&&prawda==1 )
           goto repeat;
        else
        {
            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);
            }
        }
     }
     else
     {
         CLS
         if(yes_or_no!=NULL)
            free(yes_or_no);
         maximum=max(nazwa_pliku);
         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);
                 }
             }
         }
         fclose(plik);
         if(nazwa_pliku!=NULL)
            free(nazwa_pliku);
     }
     printf("\n\n\n");
     PAUSE  
}
                   
int main()
{
    printf("\nProgram wypisuje wszystkie palindromy znajdujace sie wpliku.\n\n");
    wypisz();
return 0;
}