Základy algoritmizácie a programovania
Ing. Daniel Hládek PhD.
Niekoľko bajtov v na určitom mieste v pamäti s dohodnutým spôsobom práce.
int premenná = 1;
4 bajty
+-------------+
hodnota: | 00 00 00 01 |
+-------------+
adresa: \#10 \#14
Viac premenných rovnakého typu za sebou
float merania[] = {1,2,3,4};
int pole[[4]] = {4,3,2,1};
+------+------+-------+-------+
hodnota: | 4 | 3 | 2 | 1 |
+------+------+-------+-------+
adresa: \#10 \#14 \#18 \#22
Pole má fixnú veľkosť, ktorá sa v čase nemôže meniť. Ak potrebujeme pole zväčšiť, musíme si vyhradiť nové pole.
Na prístup k prvkom poľa môžeme použiť operátor []:
float merania[\4] = {0.0,0.0,0.0,0.0};
merania[\0] = 1.1;
float m1 = merania[\0];
index: 0 1 2 3
+------+------+-------+-------+
hodnota: | 4 | 3 | 2 | 1 |
+------+------+-------+-------+
adresa: \#10 \#14 \#18 \#22
Pole nám slúži ako viac premenných
int hodnoty[\4];
printf("Akú mám hodnotu? %d\n",hodnoty[\0]);
float merania[\50];
for (int i = 0; i < 50; i++){
merania[\i] = 0.0;
}
float merania [\50];
for (int i = 0; i < 50; i++){
float v = 0;
int r = scanf("%f",&v);
if (r == 1){
merania[\i] = v;
}
else {
merania[\i] = 0;
}
}
Koľko hodnôt som načítal?
#include <stdio.h>
#define SIZE 50
int main(){
int pocet = 0;
float merania[\SIZE];
for (pocet = 0; pocet < SIZE; pocet +=1){
int r = scanf("%f",&merania[\pocet]);
if (r != 1){
break;
}
}
printf("Nacital som %d hodnot\n",pocet);
// Zvyšok poľa nie je inicializovaný
return 0;
}
ak nenačítame všetky hodnoty
#include <stdio.h>
#define SIZE 50
int main(){
int pocet = 0;
float merania [\SIZE];
for (pocet = 0; pocet < SIZE; pocet +=1){
if (scanf("%f",&merania[\pocet])!= 1){
break;
}
}
for (int i = 0; i < SIZE; i +=1){
printf("Aká je tu hodnota? %d\n",merania[\i]);
}
return 0;
}
int pole[\4] = {1,2,3,4};
printf("Aká je tu hodnota? %d\n",pole[\4]);
segmentation fault-Wall -g a sledujte varovaniapri spustení používajte program valgrind a sledujte varovania
Pomocu adresy poľa vieme vo funkcii spracovať zadaný počet prvkov.
Adresu ľubovoľnej premennej si vieme poznačiť do smerníkovej premennej.
Adresa sa dá uložiť do smerníkovej premennej
int pole[]={1,2,3,4};
int* adresa_pola = pole;
printf("Pole ma adresu #%p\n",adresa_pola);
Smerníkovú premennú vieme používať rovnako ako pole na ktoré ukazuje
int pole[]={1,2,3,4};
int* adresa_pola = pole;
printf("Pole ma adresu #%p\n",adresa_pola);
printf("Na prvom nieste je %d\n",adresa_pola[0]);
Voláme ju s adresou začiatku a s počtom prvkov.
int linear_search(int* heap,int heap_size,int needle){
for(int i =0; i < size; i++){
if(heap[i] == needle){
return i;
}
}
return -1;
}
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#define SIZE 20
int linear_search(int* heap,int sz,int needle);
int main(){
srand(time(NULL));
int pole[SIZE];
for (int i = 0; i<SIZE; i++){
pole[i] = rand() % 100;
}
int hladam = 2;
int nasielsom = linear_search(pole,SIZE,hladam);
if (nasielsom >= 0){
printf("Nasiel som %d na %d\n",hladam,nasielsom);
}
else {
printf("%d v poli nie je\n",hladam);
}
return 0;
}