Vissza

Dinamikus helyfoglalás


Házi feladatok

1.Töltsünk fel véletlenszerűen generált karakterekkel egy egydimenziós tömböt, amelynek dinamikusan foglaltunk helyet, majd rendezzük a könyvtárfüggvény qsort-al.
srand(time(0));
a[i] = rand() % 26 + 65;

2. Töltsünk fel véletlenszerűen generált valós számokkal egy egydimenziós tömböt, amelynek dinamikusan foglaltunk helyet, majd rendezzük a könyvtárfüggvény qsort-al.
srand(time(0));
float a = (float)rand() / ((float)RAND_MAX/100);

3.Olvassunk ki valós számokat egy állományból,  egy egydimenziós tömbbe, amelynek dinamikusan foglaltunk helyet, majd rendezzük a könyvtárfüggvény qsort-al, használjuk az alábbi függvényt:
int hasonlit( const void *a1, const void *a2 )

    float ta1 = * ( float* ) a1;
    float ta2 = * ( float* ) a2;
    if (ta1 == ta2) return 0;
    if (ta1 > ta2) return 1;
    if (ta1 < ta2) return -1;
}

4. Olvassunk ki karakterláncokat egy állományból,  egy kétdimenziós tömbbe, amelynek dinamikusan foglaljunk helyet, majd rendezzük a könyvtárfüggvény qsort-al,  használjuk az alábbi függvényt:

        int hasonlit( const void *a1, const void *a2 )
    {
        return strcmp( * ( char** ) a1, * ( char** ) a2 );
    }

5. Olvassunk ki karaktereket/valós számokat/karakterláncokat egy egydimenziós tömbbe, amelynek dinamikusan foglaltunk helyet, majd rendezés után vizsgáljuk meg, hogy egy billentyűzetről beolvasott elem benne van-e a tömbben, használjuk a könyvtárfüggvény qsort-ot a rendezéshez, és a bsearch-et a kereséshez:

6. Egy nxm-es négyzetes mátrixot inicializáljunk véletlenszerűen generált számokkal, ahol a tömböt kezeljük dinamikusan. Írjunk programot, mely elkészíti a mátrix elemenkénti, illetve soronkénti bit-paritás térképét. Egy szám bit-paritása a szerint 0 vagy 1, hogy kettes számrendszerbeli alakja páros vagy páratlan darab 1-est tartalmaz. Egy sor bit-pairitása aszerint 0 vagy 1, hogy az illető sor elemei kettes számrendszerbeli alakjaiban összesen páros vagy páratlan számú 1-es van.

7. Egy nxm-es négyzetes mátrixot inicializáljunk véletlenszerűen generált számokkal, ahol a tömböt kezeljük dinamikusan. Írjunk programot, mely kiírja a képernyőre azt az utat, amely az (0,0) sarokból indul, és mindig a legnagyobb szomszéd (fel, jobbra, le, balra) irányában halalad tovább, amennyiben ez szigorúan nagyobb, mint az aktuális elem. Ha több legnagyobb szomszéd van, akkor a fentebb megadott sorrendben választ az irányok között. Ha nincs ilyen szomszéd, akkor megáll a program futása.


Megoldott feladatok

1.Töltsünk fel véletlenszerűen generált egész számokkal egy egydimenziós tömböt, amelynek dinamikusan foglaltunk helyet, majd rendezzük a könyvtárfüggvény qsort-al.

#include <stdio.h>
#include <time.h>
#include <stdlib.h>
typedef int type;
int hasonlit(const void *a1, const void *a2);

int main()
{

type *a;
int i,n;
n = 10;
a = (type*)malloc(n*sizeof(type));
srand((unsigned)time(NULL));
for(i=0; i<n; i++)
      a[i] = rand() % 100;
qsort(a, n, sizeof(type), hasonlit);
for(i=0; i<n; i++) printf("%i ", a[i]);
free (a);
return 0;
}

int hasonlit(const void *a1,const void *a2)
{
    return *((type*)a1) - *((type*)a2);
}

2. Töltsünk fel véletlenszerűen generált egész számokkal egy egydimenziós tömböt, amelynek dinamikusan foglaltunk helyet, majd rendezés után vizsgáljuk meg, hogy egy billentyűzetről beolvasott elem benne van-e a tömbben, használjuk a könyvtárfüggvény qsort-ot a rendezéshez, és a bsearch-et a kereséshez:

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

int hasonlit(const void *a1, const void *a2);

int main()
{
int *a, *pElem, i, n, elem;
n = 10;
a = (int*)malloc( n * sizeof(int) );
srand((unsigned)time(NULL));
for(i=0; i<n; i++)
      a[i] = rand() % 100;
qsort(a, n, sizeof(int), hasonlit);
for(i=0; i<n; i++)
    printf("%i ", a[i]);

printf("\n");
printf("Melyik elemet keresed: ");
scanf("%i", &elem);
pElem = (int*) bsearch (&elem, a, n, sizeof (int), hasonlit);
if ( pElem == NULL ) printf("Nincs meg a keresett elem\n");
else printf("a kersett elem megvan: %i\n", *pElem);
free (a);
return 0;
}

int hasonlit(const void *a1,const void *a2)
{
    return *((int*)a1) - *((int*)a2);
}

3. Olvassunk be számokat 0 végjelig a billentyűzetről, és a realloc-al foglaljunk nekik helyet, majd Írassuk ki a számokat.

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

int main ()
{
  int szam, i;
  int n = 0;
  int* szamok = NULL;
  int* temp_szamok = NULL;

  while(1) {
     printf ("Kerek egy szamot, (0 - a megallashoz): ");
     scanf ("%d", &szam);
     if (szam==0) break;
     n++;
     temp_szamok = (int*) realloc (szamok, n * sizeof(int));

     if (temp_szamok != NULL) {
       szamok = temp_szamok;
       szamok[n-1] = szam;
     }
  }

  printf ("A beolvasott ertekek: ");
  for (i=0; i<n; i++) printf ("%d ",szamok[i]);
  printf("\n");
  free (szamok);

  return 0;
}

4. Egy nxn-es négyzetes mátrixot inicializáljunk véletlenszerűen generált számokkal, ahol n>1000, a tömböt kezeljük dinamikusan. Írjuk ki a tömb elemeit a képernyőre.

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define N 10

int main(){
   int m, i, j;
   int **tomb;
   tomb = (int**)malloc(N*sizeof(int*));
   for (i=0; i<N; ++i)
       tomb[i] = (int*)malloc(N*sizeof(int));
    srand(time(0));
   for (i=0; i<N; ++i){
        for(j=0; j<N; ++j){
                tomb[i][j] = rand() % 1000;
                printf("%5i", tomb[i][j]);
                }
        printf("\n");
    }
    for (i=0; i<N; ++i)
       free(tomb[i]);
    free(tomb);
    return 0;
}