Escolar Documentos
Profissional Documentos
Cultura Documentos
* Universidade Aberta *
* Licenciatura em Informática *
* Programação 2008/2009 - Turma 1 *
* *
* e-Fólio A *
* *
* Este programa lê um número inteiro positivo e escreve todas as somas de 3 *
* parcelas distintas, a+b+c, cujo resultado é esse número e cujas somas *
* diferem, pelo menos, num número, independentemente da posição que ocupa. *
* *
* David Pires - Aluno nº 800255 *
* *
* Novembro 2008 *
******************************************************************************/
/******************************************************************************
* Declaração das bibliotecas a serem chamadas ao longo do programa *
******************************************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/******************************************************************************
* Pré-declaração das funções utilizadas no programa, para evitar que elas *
* sejam assumidas automaticamente como sendo do tipo inteiro *
******************************************************************************/
/******************************************************************************
* Inicialmente declaramos duas variáveis globais, por serem utilizadas em *
* mais do que uma função do programa: a variável "introducao" que recebe a *
* introdução do utilizador e, caso esta última tenha sido correcta; a *
* variável "numero", na qual é armazenada a conversão para inteiro da string *
* introduzida. *
******************************************************************************/
char introducao[100];
int numero;
/******************************************************************************
* Function / Função : main *
* Author / Autor : David Pires *
* Last change / Última modificação : 10/11/2008 *
* Description / Descrição : Função principal do programa. Chama a *
* função menu e, em função da introdução do utilizador, decide se irá pedir *
* nova introdução ao utilizador (no caso de ter sido errada); se faz o *
* cálculo do valor introduzido (no caso de ter sido correcto); ou se abandona *
* o programa (no caso de ter sido introduzido o número 0 (zero)). *
* Parameters / Parâmetros : Não recebe quaisquer parâmetros *
* Return / Retorna : Retorna 0 (zero) ao sistema, no final do *
* programa, apenas por uma questão de cumprir com o standard da linguagem C. *
******************************************************************************/
int main ()
{
int opcao;
/******************************************************************************
* Function / Função : menu *
* Author / Autor : David Pires *
* Last change / Última modificação : 10/11/2008 *
* Description / Descrição : Função que efectua a validação dos dados *
* introduzidos pelo utilizador que, sendo correctos, faz a respectiva *
* conversão de uma string para um número inteiro. Então, verifica se o *
* inteiro é maior que 6, pois esta é a mínima soma possível com 3 parcelas *
* diferentes: 1 + 2 + 3 = 6 *
* Parameters / Parâmetros : Não recebe quaisquer parâmetros *
* Return / Retorna : Retorna 0 (zero) caso a opção tenha sido *
* a saída do programa; retorna 2 (dois) no caso de uma introdução inválida; *
* ou retorna 1 (um) no caso de uma introdução válida para o cálculo *
******************************************************************************/
int menu ()
{
int i;
system ("cls");
printf ("\n\nM E N U\n\n");
printf ("Por favor introduza um número inteiro maior que 5 (Introduza 0");
printf (" para sair)... \n\n"); // Continuação da linha anterior
printf ("\n\nNúmero: ");
scanf ("%s", &introducao);
// Serve apenas para limpar o buffer para a próxima introdução
while (getchar () != '\n') continue;
// Verifica se é introduzido apenas o carácter zero (0)
if ((strlen (introducao) == 1) && (introducao [0]) == 48) return 0;
for (i=0; introducao[i]!= '\0' ; i++)
// Verifica se são introduzidos outros caracteres que não sejam números
if ((introducao [i] < 48) || (introducao [i] > 57)) return 2;
// Converte uma introdução correcta para um inteiro
numero = atol (introducao);
// Verifica se o número é menor que 6
if (numero < 6) return 2;
else return 1;
}
/******************************************************************************
* Function / Função : resolver *
* Author / Autor : David Pires *
* Last change / Última modificação : 10/11/2008 *
* Description / Descrição : Função que efectua o cálculo e a *
* apresentação ao utilizador de todas as somas possíveis dentro dos critérios *
* inicialmente indicados *
* Parameters / Parâmetros : Não recebe quaisquer parâmetros *
* Return / Retorna : Não retorna quaisquer valores *
******************************************************************************/
void resolver ()
{
//Inicialização das parcelas 1 e 2 com parcela 1 < parcela 2
int parcela1 = 1, parcela2 = 2;
int parcela3;
/******************************************************************************
* Function / Função : pausa *
* Author / Autor : David Pires *
* Last change / Última modificação : 10/11/2008 *
* Description / Descrição : Basicamente, o seu objectivo é fazer uma *
* pausa sempre que seja necessário, para que o utilizador possa ver *
* resultados no monitor. *
* Parameters / Parâmetros : Não recebe quaisquer parâmetros *
* Return / Retorna : Não retorna quaisquer valores *
******************************************************************************/
void pausa ()
{
char tecla;
printf ("\nPrima ENTER para continuar...\n");
tecla = getchar ();
}