Pokrivanje krova

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

Napisati program u kom korisnik unosi n površina koju pokriva jedan crep u kvadratnim centimetrima za različite modele crepova u celobrojni niz od maksimalno 20 elemenata. Korisnik unosi i cenu crepa po komadu u poseban, realan niz, takođe od 20 elemenata. Crepu sa određenom površinom odgovara cena sa identičnim indeksom elementa u nizu cena. Pored toga, potrebno je i uneti i realnu vrednost u kvadratnim metrima površine koju je potrebno pokriti crepom.

  1. Napraviti novi, rezultujući niz čiji elementi predstavljaju koliko je ukupno novca potrebno uložiti da bi se pokrila zadata površina. Ispisati dobijeni niz.

  2. Ispisati redni broj i ukupnu cenu crepa sa kojim je najisplativije uraditi posao i cenu materijala.

  3. Ispisati redni broj i količinu crepa sa kojim je neophodno najmanje komada da bi se pokrila zadata površina.

Ispise realnih vrednosti zaokružiti na dve decimale.

Za unete površine crepova [150, 170, 134, 205, 230, 195], njihove cene [20, 23, 25, 27, 30, 22] i površinu 50m2, očekivani ispis na ekranu terminala je:

Ucitati broj modela crepova: 6
1. model crepa
povrsina [cm2]: 150
cena [RSD]: 20

2. model crepa
povrsina [cm2]: 170
cena [RSD]: 23

3. model crepa
povrsina [cm2]: 134
cena [RSD]: 25

4. model crepa
povrsina [cm2]: 205
cena [RSD]: 27

5. model crepa
povrsina [cm2]: 230
cena [RSD]: 30

6. model crepa
povrsina [cm2]: 195
cena [RSD]: 22

Uneti povrsinu koju je potrebno pokriti [m2]: 50

Ukupne cene u dinarima: [66666.67, 67647.06, 93283.58, 65853.66, 65217.39, 56410.26]
Najpovoljniji je 6. crep, cija ukupna cena za pokrivanje 50.00 metara kvadratnih iznosi 56410.26 dinara.
Najmanje potrebno za pokrivanje 50.00 metara kvadratnih ukoliko se koristi 5. crep: 2174 komada.

Korisne matematičke formule

Konverzija iz cm2 u m2:

class center
\[P_{m^2} = P_{cm^2}\cdot10^{-4}\]

Primer rešenja

 1#include <stdio.h>
 2#include <math.h>
 3
 4#define MAX_NIZ 20
 5
 6int main() {
 7    int povrsine_crepova[MAX_NIZ];
 8    double cene_crepova[MAX_NIZ], povrsina_za_pokrivanje, ukupne_cene_materijala[MAX_NIZ];
 9    int i, n;
10
11    do {
12        printf("Ucitati broj modela crepova: ");
13        scanf("%d", &n);
14    } while(n <= 0 || n > MAX_NIZ);
15
16    for(i = 0;i < n;i++) {
17        printf("%d. model crepa\n", i + 1);
18        printf("povrsina [cm2]: ");
19        scanf("%d", &povrsine_crepova[i]);
20        printf("cena [RSD]: ");
21        scanf("%lf", &cene_crepova[i]);
22        printf("\n");
23    }
24
25    do {
26        printf("Uneti povrsinu koju je potrebno pokriti [m2]: ");
27        scanf("%lf", &povrsina_za_pokrivanje);
28    } while(povrsina_za_pokrivanje <= 0);
29
30    double povrsina_za_pokrivanje_cm2 = povrsina_za_pokrivanje * 10000;
31    for(i = 0;i < n;i++) {
32        ukupne_cene_materijala[i] = povrsina_za_pokrivanje_cm2 / povrsine_crepova[i] * cene_crepova[i];
33    }
34
35    printf("\nUkupne cene u dinarima: [");
36    for(i = 0;i < n;i++) {
37        if(i > 0) {
38            printf(", ");
39        }
40        printf("%.2lf", ukupne_cene_materijala[i]);
41    }
42    printf("]\n");
43
44    int indeks_najpovoljnijeg = 0;
45    double najpovoljniji_materijal = ukupne_cene_materijala[0];
46
47    for(i = 1;i < n;i++) {
48        if(ukupne_cene_materijala[i] < najpovoljniji_materijal) {
49            indeks_najpovoljnijeg = i;
50            najpovoljniji_materijal = ukupne_cene_materijala[i];
51        }
52    }
53
54    printf("Najpovoljniji je %d. crep, cija ukupna cena za pokrivanje %.2lf metara kvadratnih iznosi %.2lf dinara.\n",
55        indeks_najpovoljnijeg + 1, povrsina_za_pokrivanje, najpovoljniji_materijal);
56
57    int indeks_najveceg_crepa = 0;
58
59    for(i = 1;i < n;i++) {
60        if(povrsine_crepova[i] > povrsine_crepova[indeks_najveceg_crepa]) {
61            indeks_najveceg_crepa = i;
62        }
63    }
64
65    printf("Najmanje potrebno za pokrivanje %.2lf metara kvadratnih ukoliko se koristi %d. crep: %d komada.\n",
66        povrsina_za_pokrivanje, indeks_najveceg_crepa + 1, (int)ceil(povrsina_za_pokrivanje_cm2 / povrsine_crepova[indeks_najveceg_crepa]));
67
68    return 0;
69}
70