Danas nam je divan dan!

Autor zadatka: Sanja Špica <sanjaspica@uns.ac.rs>

Iz zadate ulazne datoteke učitatati statički niz struktura, pri čemu se struktura rodjendan_st sastoji od sledećih polja:

  • Ime (jedna reč, do 15 karaktera),

  • Dan rođenja (prirodan broj),

  • Mesec rođenja (prirodan broj),

  • Broj željenih parcadi torte(prirodan broj).

  1. Napisati funkciju koja nalazi slavljenika (rođen na današnji dan), a zatim slavljeniku čestitati rođendan na standardni izlaz.

  2. Napisati funkciju suma, koja vraća ukupan broj željenih parcadi torte.

  3. Napisati funkciju koja sa standardnog ulaza uzima broj torti (t – prirodan broj) i proverava da li je broj torti dovoljan da bi svaki gost dobio željeni broj parčadi torte (jedna torta = 10 parčadi). Na standardni izlaz ispisati da li ima dovoljno torti na rođendanu

Primer poziva programa:

./a.out

Primer ispisa slavljenika (ako je rođen 5. 12.)

Srecan rodjendan Nikola!

Primer ispisa slavljenika (ako je rođen 6. 12.)

Srećan rodjendan Ana!

Primer ispisa da li ima dovoljno torti

Za t=2
Nema dovoljno torte!

Za t=4
Ima dovoljno torte!

Primer rešenja

  1#include <stdio.h>
  2#include <stdlib.h>
  3#include <string.h>
  4
  5#define MAX_SIZE 15
  6
  7typedef struct rodjendan_st
  8{
  9  char ime[MAX_SIZE];
 10  unsigned dan;
 11  unsigned mesec;
 12  unsigned br_parcadi;
 13} RODJUS;
 14
 15FILE *safe_open(char *, char *);
 16void ucitaj(FILE *, RODJUS *, int *);
 17void ispisi_slavljenika(RODJUS *niz, int n);
 18float suma_parcadi(RODJUS *niz, int n);
 19void broj_torti(RODJUS *niz, int p);
 20
 21int main()
 22{
 23
 24  RODJUS niz[MAX_SIZE];
 25
 26  FILE *in;
 27  int t, n;
 28  in = safe_open("rodjendan.txt", "r");
 29
 30  ucitaj(in, niz, &n);
 31  ispisi_slavljenika(niz, n);
 32  broj_torti(niz, t);
 33
 34  fclose(in);
 35}
 36FILE *safe_open(char *name, char *mode)
 37{
 38
 39  FILE *fp = fopen(name, mode);
 40
 41  if (fp == NULL)
 42  {
 43    printf("Doslo je do greske prilikom otvaranja fajla %s.\n", name);
 44    exit(EXIT_FAILURE);
 45  }
 46
 47  return fp;
 48}
 49void ucitaj(FILE *in, RODJUS *niz, int *n)
 50{
 51  *n = 0;
 52  while (
 53      fscanf(
 54          in,
 55          "%s %u %u %u",
 56          niz[*n].ime,
 57          &niz[*n].dan,
 58          &niz[*n].mesec,
 59          &niz[*n].br_parcadi) != EOF)
 60  {
 61    (*n)++;
 62  }
 63}
 64void ispisi_slavljenika(RODJUS *niz, int n)
 65{
 66  int i;
 67
 68  for (i = 0; i < n; i++)
 69  {
 70    if ((niz[i].mesec == 12 && niz[i].dan == 5))
 71      printf("Srecan rodjendan %s!\n", niz[i].ime);
 72  }
 73}
 74float suma_parcadi(RODJUS *niz, int n)
 75{
 76  int i;
 77  unsigned suma = niz[0].br_parcadi;
 78  for (i = 1; i < n; i++)
 79  {
 80    suma += niz[i].br_parcadi;
 81  }
 82  return suma;
 83}
 84void broj_torti(RODJUS *niz, int t)
 85{
 86
 87  do
 88  {
 89    printf("Unesite broj torti (maksimalno 10):\n ");
 90    scanf("%d", &t);
 91  } while (t <= 0 || t > 10);
 92  int n;
 93  int max_parcadi = t * 10;
 94
 95  if ((suma_parcadi(niz, n)) <= max_parcadi)
 96  {
 97    printf("Ima dovoljno torte!\n");
 98  }
 99  else
100  {
101    printf("Nema dovoljno torte!\n");
102  }
103}