Polia
Dĺžka lomenej čiary
Na dvojrozmernej mape rátajte celkovú dĺžku lomenej čiary.
- Vyjdime zo zadania vzdialenosti pre dva body.
- Uvažujme už nad reálnymi súradnicami, teda typu
double
alebofloat
. Uvažujme nad reprezentáciou poľa bodov:
buď dve polia (jedno s x-ovými súradnicami, druhé s y-ovými)
double x_suradnice[] = { 2, 5, 7, -3, 4 }; double y_suradnice[] = { -2, 3.14, 7, 2.5, -2.71};
- pozor na zrozumiteľné názvy premenných (nie
x
ay
, ktoré sú ťažko čitateľné)
- pozor na zrozumiteľné názvy premenných (nie
alebo jedno pole s xovými súradnicami na nepárnych miestach a y na párnych miestach
- alebo dvojrozmerné pole
Definujme funkciu pre výpočet vzdialenosti:
double vzdialenost(double x1, double y1, double x2, double y2) { return sqrt( pow(x2 - x1, 2) + pow(y2 - y1, 2) ); }
Pozor pri prechádzaní cyklom: Polia v jazyku C nemajú svoju dĺžku!
- Ďalšie čítanie: Z Javy migrujuvší céčkar 5
Nezabudnime deklarovať počet prvkov ako konštantu v
#define
˛.- Pozor: premenné a názvy funkcií sú v C v rovnakom mennom priestore. Premenná sa nesmie volať rovnako ako funkcia (
double vzdialenost
vs. funkciavzdialenost()
). - Technická: Pripočítavanie k premennej vie využiť operátor
+=
.
Výsledný zdroják
#include<stdio.h>
#include<math.h>
#define POCET_BODOV 5
double vzdialenost(double x1, double y1, double x2, double y2) {
return sqrt( pow(x2 - x1, 2) + pow(y2 - y1, 2) );
}
int main() {
int i = 0;
double x_suradnice[] = { 2, 5, 7, -3, 4 };
double y_suradnice[] = { -2, 3.14, 7, 2.5, -2.71};
double celkova_vzdialenost = 0;
for(i = 0; i < POCET_BODOV - 1; i++) {
celkova_vzdialenost = celkova_vzdialenost
+ vzdialenost(x_suradnice[i], y_suradnice[i], x_suradnice[i+1], y_suradnice[i+1]);
}
printf("Vzdialenost je: %f", celkova_vzdialenost);
return 0;
}
Príklady pretečenia polí
Vytvorte pole piatich čísiel a prejdite jeho prvých 10 (sic!) prvkov
Jazyk C nekontroluje medze polí! Nič nebráni načítavať dáta z indexu, ktorý nepatrí poľu. Tam, kde v Jave nastáva ArrayIndexOutOfBoundsException
, v C sa číta z cudzej pamäte. Program môže vracať náhodné dáta (najhorší prípad), alebo spadne na Segmentation Fault
(pozitívna indikácia, že čítame z pamäte, ktorá nepatrí programu.)
Skúste dokonca záporné indexy!
#include<stdio.h>
int main() {
int i = 0;
int cisla[] = {1, 2, 3, 4, 5 };
for(i = -4; i < 10; i++) {
cisla[i] = cisla[i] * 2;
printf("%d\n", cisla[i]);
}
return 0;
}
Rady ku kompilácii
Nastavenie make
.
Vytvorte jednoduchý
makefile
:CC=gcc CFLAGS=-Wall -Wextra -ansi -pedantic -Werror -lm
Zadanie so zdrojákom
vzdialenost.c
zostavíte cez:make vzdialenost
Skompilovať a spustiť môžeme zoradením príkazov v shelli:
make vzdialenost && ./vzdialenost
Ďalšie čítanie k make
: Urobme niečo s make
.