aboutsummaryrefslogtreecommitdiff
path: root/doc/tests/fontes/multas-yes.c
blob: 3729d0bcaa2dd3bfe05fcc84f6b79adc26a2d044 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
/* Copyright 2001 Maratona de Programacao do IME-USP -- cef@ime.usp.br
 */

#include <stdio.h>

typedef struct 
{
  char nome[100];
  char nomeconv[100];
  
  int pontos;
}
m_familia;

#define MAX 21

char conv(char c)
{
  if(c >= 'A' && c <= 'Z') return (c += 'a' - 'A');
  return(c);
  
}


int menor(char v[80], char w[80])
{
  int i=0;

  while(i < 80 && v[i] == w[i])i++;
  return(v[i] < w[i]);
}


int main(int argc, char *argv[])
{
  FILE * ent;
  int cont = 0;
  int n, i,j, multa, nmult, min;
  m_familia familia[20];
  
  ent = stdin;
   
  fscanf(ent, "%d", &n);
  while (n > 0){
    cont++;
    printf("Familia %d\n", cont);
    
    for (i = 0; i < n; i++){
      fscanf(ent, "%s", &(familia[i].nome[0]));
      j = 0;
      while(familia[i].nome[j] != 0) {
	familia[i].nomeconv[j]=conv(familia[i].nome[j]);
        j++;
      }
      familia[i].nomeconv[j]=0;
           
      familia[i].pontos = 0;
    }
    fscanf(ent, "%d", &multa);
    nmult = 0;
    
    while(multa > 0){
      nmult++;
      min = 0;
      for (i = 0; i < n; i++)
	if (familia[i].pontos < familia[min].pontos || 
	    (familia[i].pontos == familia[min].pontos && 
		 menor(familia[i].nomeconv, familia[min].nomeconv))) 
	  min = i;
      printf("Multa %d %s", nmult, familia[min].nome);
      familia[min].pontos += multa;
      if ( familia[min].pontos >= MAX)
	printf(" carteira suspensa\n");
      else printf("\n");
      fscanf(ent, "%d", &multa);
    }
    printf("\n");
    
    fscanf(ent, "%d", &n);
  }
  fclose(ent);
  return(0);
}