Rezultat društvene igre¶
Autor zadatka: Rade Radišić <radisic.rade@uns.ac.rs>
Napraviti program za vođenje evidencije bodova za društvene igre. Igrači su predstavljeni na sledeći način:
ime (jedna reč, maksimalno 20 karaktera)
bodovi (celobrojna vrednost)
Na osnovu vrednosti argumenata komandne linije učitati pomoću tastature imena određenog broja igrača i postaviti im broj bodova na 0, zatim uraditi sledeće:
Za svaku partiju dodavati igračima osvojene bodove. Broj partija se unosi kao argument komandne linije.
Ispisati rezultate igre u izlazni fajl pod imenom
bodovi.txt
.
Primer poziva programa (2
predstavlja broj igrača, a 3
broj odigranih partija):
./bodovi 2 3
Primer rada programa:
Igrac 1: Laza
Igrac 2: Mika
Partija 1
Igrac Laza: 3
Igrac Mika: 5
Partija 2
Igrac Laza: 7
Igrac Mika: 4
Partija 3
Igrac Laza: 2
Igrac Mika: 5
Primer izlazne datoteke:
Laza 12
Mika 14
Primer rešenja¶
1#include <stdio.h>
2#include <stdlib.h>
3#include <string.h>
4
5#define MAX_SIZE 10
6#define MAX_STRING 21
7
8typedef struct igraci_st {
9 char ime[MAX_STRING];
10 int bodovi;
11} IGRACI;
12
13FILE *safe_fopen(char *, char *);
14void ucitaj_igrace(IGRACI *, int);
15void dodaj_bodove(IGRACI *, int, int);
16void ispis_bodova(FILE *, IGRACI *, int);
17
18int main(int argc, char *argv[]) {
19 IGRACI igraci[MAX_SIZE];
20
21 if(argc != 3) {
22 printf("Primer poziva programa: ./%s 2 3\n", argv[0]);
23 exit(1);
24 }
25
26 int broj_igraca = atoi(argv[1]);
27 int broj_partija = atoi(argv[2]);
28 FILE *out = safe_fopen("bodovi.txt", "w");
29
30 ucitaj_igrace(igraci, broj_igraca);
31 dodaj_bodove(igraci, broj_igraca, broj_partija);
32 ispis_bodova(out, igraci, broj_igraca);
33
34 fclose(out);
35
36 return 0;
37}
38
39FILE *safe_fopen(char *filename, char *mode) {
40 FILE *fp = fopen(filename, mode);
41
42 if(fp == NULL) {
43 printf("Datoteka %s nije uspesno otvorena!\n", filename);
44 exit(1);
45 }
46
47 return fp;
48}
49
50void ucitaj_igrace(IGRACI *igraci, int broj_igraca) {
51 int i;
52
53 for(i = 0;i < broj_igraca;i++) {
54 printf("Igrac %d: ", i + 1);
55 fgets(igraci[i].ime, MAX_STRING, stdin); // Moze ili gets(igraci[i].ime); ili scanf("%s", igraci[i].ime);
56 igraci[i].ime[strlen(igraci[i].ime) - 1] = '\0'; // Eliminisanje trailing newline-a (ne treba kad se koristi gets ili scanf)
57 igraci[i].bodovi = 0;
58 }
59
60}
61
62void dodaj_bodove(IGRACI *igraci, int broj_igraca, int broj_partija) {
63 int i, j, bodovi;
64
65 for(j = 0;j < broj_partija;j++) {
66 printf("\nPartija %d\n", j + 1);
67 for(i = 0;i < broj_igraca;i++) {
68 printf("Igrac %s: ", igraci[i].ime);
69 scanf("%d", &bodovi);
70 igraci[i].bodovi += bodovi;
71 }
72 }
73}
74
75void ispis_bodova(FILE *out, IGRACI *igraci, int broj_igraca) {
76 int i;
77
78 for(i = 0;i < broj_igraca;i++) {
79 fprintf(out, "%s %d\n", igraci[i].ime, igraci[i].bodovi);
80 }
81}