CNC mašina

Autor zadatka: Rade Radišić <radisic.rade@uns.ac.rs>

CNC mašina seče materijal tako što se glava mašine sa sečivom kreće po zadatim koordinatama. Napisati program u kom korisnik učitava po n elemenata u dva niza od 30 realnih elemenata. Prvi predstavlja x, a drugi niz y koordinate tačaka po kojima se glava mašine kreće pravolinijski. Glava mašine kreće se od tačke do tačke, u zadatom redosledu. Ispisati xy parove koordinata, gde je svaki odgovarajući par oivičen zagradama, a parovi predstavljeni kao niz elemenata. Izračunati ukupnu distancu koju glava mašine pređe za zadate tačke i rezultat ispisati na ekran Terminala. Napraviti zaštitu unosa broja elemenata, tako da n bude u zadatim granicama veličine niza.

Euklidsko rastojanje između dve tačke u dvodimenzionalnom prostoru:

\[d = \sqrt{(x_{1} - x_{2})^2 + (y_{1} - y_{2})^2}\]

Primer rada programa:

Ucitati zeljeni broj koordinata: 5
1. tacka
x[0] = 0
y[0] = 0

2. tacka
x[1] = 2
y[1] = 3

3. tacka
x[2] = 3
y[2] = 7

4. tacka
x[3] = 0
y[3] = 3

5. tacka
x[4] = 0
y[4] = 0

[(0.00, 0.00), (2.00, 3.00), (3.00, 7.00), (0.00, 3.00), (0.00, 0.00)]
Ukupno predjena distanca glave masine: 15.73
../../../../_images/primer.png

Slika 1. Putanja glave CNC mašine iz primera rada programa

Primer rešenja

 1#include <stdio.h>
 2#include <math.h>
 3
 4#define MAX_NIZ 30
 5
 6int main() {
 7    double x[MAX_NIZ], y[MAX_NIZ];
 8    int i, n;
 9
10    do {
11        printf("Ucitati zeljeni broj koordinata: ");
12        scanf("%d", &n);
13    } while(n <= 0 || n > MAX_NIZ);
14
15    for(i = 0;i < n;i++) {
16        printf("%d. tacka\n", i + 1);
17        printf("x[%d] = ", i);
18        scanf("%lf", &x[i]);
19        printf("y[%d] = ", i);
20        scanf("%lf", &y[i]);
21        printf("\n");
22    }
23
24    printf("[");
25    for(i = 0;i < n;i++) {
26        if(i > 0) {
27            printf(", ");
28        }
29        printf("(%.2lf, %.2lf)", x[i], y[i]);
30    }
31    printf("]\n");
32
33    double predjeno = 0;
34
35    for(i = 1;i < n;i++) {
36        predjeno += sqrt(pow(x[i - 1] - x[i], 2) + pow(y[i - 1] - y[i], 2));
37    }
38
39    printf("Ukupno predjena distanca glave masine: %.2lf\n", predjeno);
40
41    return 0;
42}
43