Wyznaczanie najmniejszego i największego elementu zbioru
Kod był wyświetlany 1614 razy.
    /*
Name: Wyznaczanie najmniejszego i największego elementu zbioru
Copyright: GPL GNU
Date: 16-09-09 20:03
Description:
Wyznaczanie najmniejszego i najwiekszego elementu zbioru (liczb calkowitych)
metoda rekurencyjna z wczytaniem danych z pliku
*/

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

int cmp=0; // zmienna na liczbe dokonanych porownan

void szukaj(int *dane,int l,int p, int *min, int *max)
{
     if(l==p)             // jeden element
     {
             *min=l;
             *max=l;
             }

     else if(l+1==p)      // dwa elementy
     {
                    cmp++;
                    if(dane[l]>dane[p])
                    {
                                       *max=l;
                                       *min=p;
                                       }
                    else
                    {
                        *max=p;
                        *min=l;
                        }
                    }

     else                 // więcej elementów
     {
         int min1,min2,max1,max2;
         szukaj(dane,l,(l+p)/2-1,&min1,&max1);  // dzielenie zbioru na dwa
         szukaj(dane,(l+p)/2,p,&min2,&max2);

         cmp++;
         if(dane[min1]<dane[min2])
         *min=min1;
         else
         *min=min2;

         cmp++;
         if(dane[max1]>dane[max2])
         *max=max1;
         else
         *max=max2;
         }
     }

int main()
{
int *dane,i=0,min,max;
char nazwa[128];
FILE *plik;

printf("\n\n\tPodaj nazwe pliku z danymi: ");
scanf("%128s",nazwa);
plik=fopen(nazwa,"r");
if(plik==0)
{
           printf("\n\tBlad odczytu pliku.\n\t");
           system("pause");
           exit(1);
           }

/* Zbadanie ilosci elementow zbioru */
while(fscanf(plik,"%d",dane)!=EOF)
i++;

/* Dobranie odpowiedniej ilosci pamieci */
dane=(int*)malloc(sizeof(int)*i);
if(dane==0)
{
           printf("\n\tBlad alokacji pamieci.\n\t");
           system("pause");
           exit(1);
           }

rewind(plik);

/* Wczytanie danych z pliku */
for(int j=0;j<i;j++)
fscanf(plik,"%d",&dane[j]);

szukaj(dane,0,i-1,&min,&max);

printf("\n\n\tLiczba najwieksza: %d\n",dane[max]);
printf("\n\tLiczba najmniejsza: %d\n",dane[min]);
printf("\n\tZnaleziono w %d porownaniach.\n\n\t",cmp);

free(dane);
system("pause");
return 0;
}
    
Pobierz plik tekstowy
Administrator WJL
PHP&SQL coded by NOVA-IT