Universidade da Beira Interior Departamento de Informática Programação / Programação I 1º semestre, 2010/11 1º Teste: 04-11-2010 Duração: 00h45m Tolerância: 5m Grupo I (4 x 0.5 = 2.0 valores) 1. Enuncie as três componentes lógicas fundamentais dum computador, ou seja, a arquitectura básica dum computador? Qual é a funcionalidade principal de cada uma delas? Explique. RESOLUÇÃO: As três componentes são: CPU, memória e entrada/saída. Função principal da CPU: executar instruções; Função principal da memória: armazenar dados; Função principal da unidade de entrada/saída: interactividade/comunicação com o utilizador ou com outros dispositivos. 2. Qual é o mecanismo básico que nos permite reservar memória num programa em C? Explique e exemplifique. RESOLUÇÃO: Esse mecanismo é a declaração de variáveis. Por exemplo, a instrução "int x = 34;" permite armazenar o valor inteiro 34 na zona de memória reservada para a variável x. 3. Qual é a diferença entre um algoritmo e um programa em C? Explique e exemplifique. RESOLUÇÃO: Um algoritmo é uma sequência de passos que nos permite chegar à solução dum problema, ao passo que um programa é uma sequência de instruções que nos permite chegar à solução dum problema. Um algoritmo é escrito em pseudo-código, ao passo que um programa é escrito segundo as regras duma linguagem de programação. 4. Para que serve a estrutura lógica de selecção na construção de programas? Explique e exemplifique. RESOLUÇÃO: Para tomar uma decisão dentro dum programa. Há 3 tipos de selecções: 1 via, 2 vias e n vias. Em linguagem C, a selecção de 1 via é codificada com a instrução if, a selecção de 2 vias é codificada com a instrução if-else, e a selecção de n vias é codificada com a instrução switch. Grupo II (1.5 valores) 5. Assumindo que o utilizador introduz uma sequência de números inteiros via teclado, escreva um algoritmo, assim como o respectivo programa em C, que calcule o produto dos números positivos da referida sequência que deve terminar com o número 0. RESOLUÇÃO: Façamos, então, a ANÁLISE PRÉVIA DO PROBLEMA em questão. A análise consiste em identificar quais são os dados do problema, bem como o resultado. a) DADOS: sequência de números inteiros que termina com zero. b) RESULTADO ou solução do problema: produto dos números inteiros da sequência que são maiores do que zero.A sequência de números é lida do teclado da seguinte forma repetida. Lê-se o primeiro número, depois o segundo, depois o terceiro, etc., até que se escreva o número 0 que é o número terminador da sequência. Vamos supor que cada um destes números é temporariamente armazenado na variável com o nome NUM. Outro aspecto importante é que não sabemos qual é o comprimento da sequência, mas sabemos quando devemos parar de ler números. A condição de paragem é quando o número lido é zero. Claro que o resultado do PRODUTO tem de ser inicializado com o valor 1 (que é o elemento neutro da multiplicação). Assim, o ALGORITMO é o seguinte: 1. Início 2. PRODUTO = 1 3. FAZ lê número do teclado e armazena em NUM SE NUM > 0 PRODUTO = PRODUTO * NUM ENQUANTO NUM!=0 4. Escreve o valor de PRODUTO no écrã 5. Fim O programa em C é então o seguinte: #include<stdio.h> int main() { int NUM, PRODUTO; printf("Escreva sequencia de inteiros que termine com 0 (zero):\n"); PRODUTO = 1; do { scanf("%i",&NUM); if (NUM > 0) PRODUTO = PRODUTO * NUM; } while (NUM != 0); printf("Produto=%d\n",PRODUTO); return 0; } Grupo III (1.5 valores) 6. Elabore um programa em C que escreva no ecrã um triângulo isósceles de altura e largura N. Por exemplo, a saída para o ecrã no caso de N=5 é a seguinte: * ** *** **** ***** NOTA: A escrita do carácter ‘*’ é obrigatoriamente feita com a instrução putchar(‘*’);, pelo que não poderá usar a função printf. A mudança de linha é feita com a instrução putchar(‘\n’); RESOLUÇÃO: Façamos, então, a ANÁLISE PRÉVIA DO PROBLEMA em questão. A análise consiste em identificar quais são os dados do problema, bem como o resultado. a) DADOS: só há um dado do problema que é o valor de N; b) RESULTADO: a produção do triângulo isósceles com asteriscos. Se repararmos na figura acima do triângulo temos o seguinte: 1) um asterisco na primeira linha; 2) dois asteriscos na segunda linha; 3) três asteriscos na terceira linha; ... N) N asteriscos na N-ésima linha; Portanto, para a linha i vamos escrever i asteriscos. Ou seja, variando o valor de i de 1 até N, vamos escrever 1, 2,..., i asteriscos na linha i. No final de cada linha, muda-se de linha. ALGORITMO: 1. Início 2. Ler N 3. para i=1 até N para j=1 até i escreve asterisco mudar de linha 4. Fim O programa em C é então o seguinte: #include<stdio.h> int main() { int i,j,N; printf("Insira o valor de N\n"); scanf("%d",&N); for (i=1;i<=N;i++) { for (j=1;j<=i;j++) putchar('*'); putchar('\n'); } return 0; }