Programação Imperativa

Aula Prática 9

Sumário

Programas com utilização de estruturas.

Programa 1 - Agenda telefónica.

Faz um programa para pesquisar os telefones dos teus amigos. O programa deve funcionar mais ou menos como a agenda de telefones dos telemóveis. Escreves um nome de um amigo e aparece-te o telefone respectivo.

Para fazeres este programa, define um tipo de dados chamado pessoa com 2 campos: nome e telefone. O nome pode ser um array de caracteres com um máximo de 30 posições e o telefone também é um array de caracteres mas com um máximo de 15 posições. Depois podes declarar uma variável chamada amigo que vai ser um array de pessoas e que podes inicializar logo com os nomes e telefones dos teus amigos.

O programa deve pedir um nome ao utilizador e como resposta dá o respectivo telefone. Se o nome não existir, o programa deve dizer que esse nome não consta na agenda telefónica. Exemplo do programa a funcionar:

    Diz um nome:
    alex
    O número do alex é 937822899
Para vos ajudar, aqui está uma parte do programa:
    #include ...

    #define N_AMIGOS 5

    typedef struct
    {
       char nome[30];
       char telefone[15];
    } pessoa;

    pessoa amigo[N_AMIGOS] = {
                               { "alice",           "962189289" },
                               { "pedro teixeira",  "289782933" },
                               { "toze",            "913229289" },
                               { "alex",            "937822899" },
                               { "susana",          "218492238" }
                             };

    main()
    {
      ...
    }

Programa 2 - Datas

Faz um programa para calcular o número de dias entre duas datas. O programa deve tomar em consideração os anos bissextos. Os anos bissextos são aqueles que são múltiplos de 4, exceptuando os que são múltiplos de 100 mas incluindo os múltiplos de 400 (Por exemplo, 1900 não é bissexto mas 2000 já é).

Para facilitar a construção do programa, deves definir um tipo de dados data com 3 campos: dia, mes, ano Deves também definir uma função chamada bissexto( ano ) que retorna 1 se o ano for bissexto e retorna 0 se não for bissexto. Deves também definir uma função chamada dias_entre( d1, d2 ) que devolve o número de dias entre as datas d1 e d2.

Para testares o programa, pede ao utilizador para introduzir duas datas e apresenta no ecrã o resultado. Podes usar o programa para calcular quantos dias faltam para o fim das aulas, quantos dias faltam para o fim do ano, quantos dias é que já viveste, etc...

Exemplo do programa a funcionar:

    Introduz uma data (dia mes ano): 6 5 1967
    Introduz outra data (dia mes ano): 31 5 2000
    Entre 6/5/1967 e 31/5/2000 passaram 12079 dias.
DICA NUMERO 1: uma maneira de fazer o programa é arranjar uma data de referência, por exemplo 1/1/1900. Depois podes calcular o número de dias que passaram desde 1/1/1900 até à data d1 e quantos dias passaram desde 1/1/1900 até à data d2. O resultado final será a diferença dos números obtidos.

DICA NUMERO 2: pode também dar jeito declarares um array para guardar o número de dias que cada mês tem.


Programa 3 - Pautas de alunos

Escreve um programa que mostre a pauta final de uma determinada disciplina. Cada disciplina tem um nome, um ano lectivo, um semestre e um conjunto de alunos inscritos (vamos supor que no máximo serão 200). Cada aluno tem um número, um curso, uma nota de frequência, um resultado da frequência (Dispensado, Admitido, Não Admitido), uma nota de exame, e uma classificação final. A classificação final é composta por um valor numérico, e por um resultado final (Aprovado, Reprovado). Nota: O resultado da frequência e o resultado final, devem ser determinados pelo programa.

Exemplo do programa a funcionar:

Disciplina: Programação 1
Ano: 2000/2001
Semestre: 1.º

                                                     Classificação final
N.º aluno - Curso | Frequência - Resultado | Exame | Numérico - Resultado
------------------------------------------------------------------------- |
2399        ESC     13.0         Dispensado  -       13.0       Aprovado
12900       IG       8.5         Admitido    12.3    12.0       Aprovado
15693       EI       8.0         Admitido     7.0     7.0       Reprovado            
...

Nota: Os dados apresentados são fictícios.