====== 7 - Dynamicky alokované pole 1/2 ======
==== Pole v dynamické paměti ====
#include
int main()
{
// volani malloc(pocet bytu) vrati adresu v dynamicke pameti, pokud to bylo uspesne volani
// adresa je datoveho typu void*, je vhodné ji přetypovat
int *a, *b;
const int n = 4;
a = (int *)malloc(n*sizeof(int));
b = (int *)calloc(n, sizeof(int));
if (a == NULL)
{
// kontrola, zda se podařilo alokovat potřebnou pamět, měla by být vždy
// zde chybí kontrola pole b
printf("nedarilo ze alokovat!\n");
return 100;
}
else
{
printf("adresa alokovaneho prostoru: %p\n", a);
for (int i = 0; i < n; i++)
*(a+i) = i;
for (int i = 0; i < n; i++)
printf("a[%d]=%d\n", i, a[i]);
for (int i = 0; i < n; i++)
printf("b[%d]=%d\n", i, b[i]);
free(a);
free(b);
}
return 0;
}
==== Načtení dat ze standardního vstupu ====
* mějte v textovém souboru in.txt následující data: ''3 3.14 5.34 8.33''
* první číslo reprezentuje počet následujících čísel typu float
* pak voláme ''$ ./a.out < in.txt''
#include
#include
int main()
{
int n, m = 0;
float b;
scanf("%d", &n);
float *p = (float *)malloc(n*sizeof(float));
for (int cnt=0;cnt
==== Řazení metodou bubble-sort ====
#include
#include
#define swap(a,b) {int t; t=a; a=b; b=t;}
void pole_print (int * a, int velikost)
{
for (int i = 0; i < velikost; i++)
{
printf("%i ", a[i]);
}
printf("\n");
}
void pole_sort (int * a, int velikost)
{
int i, j, swapped;
for (j = 0; j < velikost; j++)
{
swapped = 0;
for (i = 0; i < velikost - 1; i++)
{
if (a[i] > a[i+1])
{
swap(a[i], a[i+1])
swapped = 1;
/*
int tmp = a[i];
a[i] = a[i+1];
a[i+1] = tmp;
*/
}
}
if (swapped == 0)
{
printf("%i/%i\n", j, velikost);
return;
}
}
}
int main()
{
int a, i = 0;
int *p = (int *)malloc(sizeof(int));
while (scanf("%i", &a) > 0)
{
// printf("%i ", a);
p[i++] = a;
p = realloc(p, (i+1)*sizeof(int));
}
printf("i = %i\n", i);
pole_print (p, i);
pole_sort (p, i);
pole_print (p, i);
free (p);
return 0;
}