Exercícios 1.Sabendo que a função frac retorna a parte fracionária de um número. Ex: frac(10.7) 0.7 Faça: a) Declare as iáveis do código abaixo. b) Escreva como seria a saída desse código na tela do computador. valor := 14.6; for i:=3 downto 1 do writeln( frac(valor):0:2 ); valor := valor 0.6; a) valor: real; i: integer b) 0.60 0.00 0.40 2. Crie um programa capaz de ler o nome e a nota de três alunos e de exibir sua média. Para gra esses dados, você deve usar um registro e um vetor. Program prova02; type tipoaluno = record nota: real; alunos: array[1..3] of tipoaluno; soma, media: real; i: integer; for i:=1 to 3 do writeln( 'Aluno ', i ); write( 'Informe o nome: ' ); readln( alunos[i].nome ); write('informe a nota dele: '); readln( alunos[i].nota ); soma := soma + alunos[i].nota; media := soma / 3; writeln('média das notas: ', media:0:2 );
3. Escreva a saída do seguinte trecho de código: Nota: a função succ fornece o próximo caractere da sequência. Ex.: succ('a') 'b';succ('j') 'K' i: integer; nome := 'OQNUA'; for i:=1 to 4 do nome[i] := succ( nome[i] ); writeln( nome ); Análise do programa: nome := 'OQNUA'; // definimos o valor do vetor: ['O','Q','N','U','A'] // assim,em nome[1], temos 'O'; em nome[2], temos 'Q' // em nome[3], temos 'N', em nome[4], temos 'U' // em nome[4], temos 'A' for i:=1 to 4 do // a iável i vai assumir valores de 1 até 4 // o código até o vai executar 4 vezes nome[i] := succ( nome[i] ); //na 1ª vez, i 1 // então, nome[1] := succ( nome[1] ), que é: // nome[1] := succ( 'O' ), que é: // nome[1] := 'P' // assim, os valores do vetor agora são: ['P','Q','N','U','A'] //na 2ª vez, i 2 // então, nome[2] := succ( nome[2] ), que é: // nome[2] := succ( 'Q' ), que é: // nome[2] := 'R' // assim, os valores do vetor agora são: ['P','R','N','U','A'] // e isso vai até a 4ª vez // então, escrevemos a string (o vetor de caracteres que trabalhamos) // na tela: writeln( nome ); PROVA
4. Faça um programa para que ele permita encontrar um dos itens desse vetor: ['x','z','k','f','t','p','t','a'] Program provabusca; todasletras: array[1..8] of char = ('x','z','k','f','t','p','t','a'); letra: char; i, posicao: integer; achou: boolean; writeln('qual letra deseja encontrar?'); readln(letra); achou := False; for i:=1 to 8 do if ( todasletras[i] = letra) then achou := True; posicao := i; if achou then writeln('achei sua letra na posição ', posicao) writeln('não achei essa letra no vetor'); 5. Temos a iável matriz na memória do computador: 1 3 4 9 10 4 7 3 8 33 Responda: a) Como a iável foi declarada no programa? b) Escreva o trecho de código necessário para trocar os números em negrito por: 11, 12, 13, 14. c) Escreva um código capaz de imprimir todos os números da matriz na tela. Reposta: a) // bom, a matriz junto aos índices é assim: índices 1 2 3 4 5 1 1 3 4 9 10 2 4 7 3 8 33 // matriz: array[linhas, colunas] do tipo inteiro; matriz: array[1..2, 1..5] of integer; b) // então, vamos trocar: 3 por 11, 9 por 12, 4 por 13 e 33 por 14 //assim: matriz[linha_desejada, coluna_desejada] := novo valor; matriz[1,2] :=11; matriz[1,4] :=12; matriz[2,1] :=13; matriz[2,5] :=14; c) for i:=1 to 2 do for j:=1 to 5 do write( matriz[i,j]:5 ); writeln();
6. Em um programa de computador, uma pessoa implementou vários cálculos utilizando iáveis inteiras. Porém, os resultados foram diferentes dos resultados que ele obteve no teste de mesa. Assim, responda: qual foi o erro do programador? Dê um exemplo. Ele utilizou uma iável com limite de armazenamento errado. Por exemplo: Program prova06; numero: shortint; numero := 127; numero := numero + 1; writeln('número:', numero); // vai imprimir na tela o número 1 e não o número 256, pois em um // byte só pode-se armazenar valores de 0 até 255 7. Crie um código correspondente ao abaixo utilizando while: repeat writeln('digite um número:'); readln(num); until (num = 3) or ( (num >= 5) and (num < 8) ); Análise: o while recebe o contrário da condição do repeat, pois eles fazem: while: Enquanto a condição for verdadeira, executa seu escopo. repeat: Repita o seu escopo até que a condição do until seja verdadeira, ou seja, repita o seu escopo enquanto a condição do until for falsa. Quando verdadeira, saia do laço Então, temos que transformar a condição no seu valor contrário. Assim, temos: (num = 3) or ( (num >= 5) and (num < 8) ) então: Condição Contrário da Condição num = 3 num <> 3 num >= 5 num < 5 num < 8 num >= 8 or and and while (num <> 3) and ( (num < 5) or (num >= 8) ) do writeln('digite um número:'); readln(num); or
8. Faça um programa para: a) pedir o nome do usuário; b) informar se a primeira letra do nome é uma vogal ou consoante (nota: utilize o case); c) contar quantas vogais tem o nome da pessoa (nota: utilize o for/while/repeat e o case); c) contar quantas consoantes tem o nome da pessoa (nota: utilize o for/while/repeat e o case); Program prova08; i, contadorvogal, contadorconsoante: integer; // letra a writeln('digite seu nome:'); readln(nome); // letra b case nome[1] of 'a','e','i','o','u': writeln('seu nome começa com uma vogal.'); writeln('seu nome começa com consoante.'); // letra c e letra d contadorvogal := 0; contadorconsoante := 0; for i:=1 to length(nome) do case nome[i] of 'a','e','i','o','u': inc(contadorvogal); inc(contadorconsoante); writeln('seu nome tem ', contadorvogal, ' vogais.'); writeln('seu nome tem ', contadorconsoante, ' consoantes.');