Obračun struje

Autor zadatka: Olja Anđelovski <andjelovski.olja@uns.ac.rs>

Sa terminala učitati potrošnju struje po domaćinstvima u niz od maksimalno 30 elemenata. Omogućiti korisniku da unese i manji broj elemenata od maksimalnog i napraviti zaštitu unosa. Korisnik mora da unese prirodan broj, ne veći od maksimalnog broja elemenata.

Preko terminala uneti naziv tarife (moguće vrednosti su osnovna, visa, niza). U zavisnosti od tarife i zone u kojoj se nalazi domaćinstvo, izračunati cenu struje i zaokružiti je na dve decimale. Prilikom unosa tarife od strane korisnika, jedine moguće vrednosti su osnovna, visa, niza, potrebno je napisati odgovarajuću zaštitu.

Osim računanja cene struje po domaćinstvu, potrebno je i izračunati koliko domaćinstava pripada zelenoj, koliko plavoj, a koliko crvenoj zoni.

ZONA

CENA OSNOVNE TARIFE (din/kWh)

CENA VIŠE TARIFE (din/kWh)

CENA NIŽE TARIFE (din/kWh)

ZELENA ZONA (do 350 kWh)

5.108

5.962

1.491

PLAVA ZONA (351-1600 kWh)

7.658

8.943

2.236

CRVENA ZONA (preko 1600 kWh)

15.330

18.588

4.647

Primer učitavanja podataka preko terminala:

Unesite broj domacinstava za koji zelite da izracunate cenu struje: 5
Unesite tarifu: visa

Potrosnja 1. domacinstva: 350
Potrosnja 2. domacinstva: 1185
Potrosnja 3. domacinstva: 1700
Potrosnja 4. domacinstva: 320
Potrosnja 5. domacinstva: 995

Ispis rezultata na terminal:

Cena struje 1. Domacinstva je 2085.07 dinara.
Cena struje 2. Domacinstva je 10597.46 dinara.
Cena struje 3. Domacinstva je 31599.60 dinara.
Cena struje 4. Domacinstva je 1907.84 dinara.
Cena struje 5. Domacinstva je 8898.29 dinara.

Broj domacinstava u zelenoj zoni je 2.
Broj domacinstava u plavoj zoni je 2.
Broj domacinstava u crvenoj zoni je 1.

Primer unosa i ispisa za nizu tarifu i samo jedno domaćinstvo.

Unesite broj domacistava za koji zelite da izracunate cenu struje: 1
Unesite tarifu: niza

Potrosnja 1. domacinstva: 600

Cena struje 1. domacinstva je 1341.60 dinara.

Broj domacinstava u zelenoj zoni je 0.
Broj domacinstava u plavoj zoni je 1.
Broj domacinstava u crenoj zoni je 0.

Primer rešenja

 1#include <stdio.h>
 2// Na novijim verzijama kompajlera, funkcija __fpurge se nalazi u biblioteci stdio_ext.h
 3// Po potrebi, odkomentarisati narednu liniju
 4// #include <stdio_ext.h>
 5#include <string.h>
 6
 7#define MAX 30
 8#define MAX_S 8
 9
10int main () {
11    float struja[MAX];
12    char tarifa[MAX_S];
13    int i, n;
14    float cena;
15    int c = 0, z = 0, p = 0;
16
17    do {
18        printf("Unesite broj domacinstava za koji zelite da izracunate cenu struje: ");
19        scanf("%d", &n);
20    }
21    while(n <= 0 || n > MAX);
22
23    do {
24    printf("Unesite tarifu: ");
25    __fpurge(stdin);
26    scanf("%s", tarifa);
27    }
28    while(!(strcmp(tarifa, "osnovna")==0 || strcmp(tarifa, "niza")==0 || strcmp(tarifa, "visa")==0));
29
30
31    for(i = 0; i < n; i++) {
32        printf("Potrosnja %d. domacinstva: ", i+1);
33        scanf("%f", &struja[i]);
34    }
35
36    for(i = 0; i < n; i++) {
37
38        if(struja[i] <= 350) {
39            z++;
40            if(strcmp(tarifa, "osnovna") == 0) {
41              cena = 5.108 * struja[i];
42            }
43            else if(strcmp(tarifa, "niza") == 0) {
44              cena = 1.491 * struja[i];
45            }
46            else {
47              cena = 5.962 * struja[i];
48            }
49
50        }
51        else if(struja[i] > 350 && struja[i] <= 1600) {
52            p++;
53            if(strcmp(tarifa, "osnovna") == 0) {
54              cena = 7.658 * struja[i];
55            }
56            else if(strcmp(tarifa, "niza") == 0) {
57              cena = 2.236 * struja[i];
58            }
59            else {
60              cena = 8.943 * struja[i];
61            }
62
63        }
64        else if(struja[i] > 1600) {
65            c++;
66            if(strcmp(tarifa, "osnovna") == 0) {
67              cena = 15.330 * struja[i];
68            }
69            else if(strcmp(tarifa, "niza") == 0) {
70              cena = 4.647 * struja[i];
71            }
72            else {
73              cena = 18.588 * struja[i];
74            }
75        }
76
77        printf("Cena struje %d. domacinstva je %.2f dinara.\n", i+1, cena);
78    }
79
80    printf("Broj domacinstava u zelenoj zoni je %d.\n", z);
81    printf("Broj domacinstava u plavoj zoni je %d.\n", p);
82    printf("Broj domacinstava u crvenoj zoni je %d.\n", c);
83
84
85    return 0;
86}