Exercícios sobre o Capítulo III

Documentos relacionados
3. 1. Teste no Início do Ciclo (Repetição enquanto ):

Capítulo V : A Linguagem Pascal Um Tipo Estruturado de Dados: o array 18. Para limite de n até 2 (* passagens de 1 até (n-1) *)

tipoveiculo = (bicicleta, motociclo, motorizada, automovel, autocomreb, camioneta, autocarro, camiao, reboque); veiculo : tipoveiculo;

Procedimento. Função. Selecção Condicional - a instrução if-then-else. expressão if lógica then instrução else instrução

Elementos básicos das linguagens de programação

Capítulo IV : A Linguagem Pascal Ficheiros de Texto

Aula Anterior. Decomposição algorítmica (continuação)

Capítulo III : A Linguagem Pascal Estruturas de Controlo

Linguagem Computacional. Estruturas de Controle: Estruturas de Repetição. Prof. Dr. Adriano Cansian Prof. Dr. Leandro Alves Neves

Aulas Anteriores. Detalhes da linguagem de programação

Métodos de Programação I Ana Maria de Almeida

UNISINOS - UNIVERSIDADE DO VALE DO RIO DOS SINOS CENTRO DE CIÊNCIAS EXATAS E TECNOLÓGICAS (C6/6) Curso: Informática

UNISINOS - UNIVERSIDADE DO VALE DO RIO DOS SINOS CENTRO DE CIÊNCIAS EXATAS E TECNOLÓGICAS (C6/6) Curso: Informática

Modularidade. Objetivos: Introduzir noções básicas de modularidade. Funções e procedimentos

Linguagem Pascal. Prof. Sérgio Rodrigues. É a descrição, de forma lógica, dos passos a serem executados no cumprimento de determinada tarefa;

2.2.5 EXPRESSÕES - Regras para o cálculo de valores

Sintaxe do Pascal Simplificado Estendido de 12 novas construções em Notação EBNF (BNF estendida)

Introdução à Programação 2006/07. Algoritmos

Estrutura Condicional em Pascal

Conjunto (set) O tipo estruturado set representa, em Pascal, um conjunto de objectos de um dado tipo;

Ciclo com Contador : instrução for. for de variável := expressão to. expressão do instrução

Refinamentos sucessivos

Sumário. Ciência da Computação. Prof. Dr. Leandro Alves Neves. Aula 10. Algoritmos e Programação. Enquanto (Teste no início) Repeat (Teste no final)

Linguagem e Técnicas em Programação. Gilson de Souza Carvalho

Linguagem Pascal. Definição e Tipos de Dados. Professora Lara Popov Zambiasi Bazzi Oberderder. Linguagem PASCAL 1

Introdução à Ciência da Computação

Pascal. -Cabeçalho do programa. - label - const - type - var - procedure - function. - integer - real - byte - boolean - char - string

Considere uma máquina que utiliza uma palavra de 10 bits. Suponha o seguinte padrão de bits:

Linguagem Pascal. Prof. Antonio Almeida de Barros Junior

Resumo 2 - Mapeamento Portugol-Pascal

p A modularização consiste num método utilizado para facilitar a construção de grandes programas;

Variáveis Compostas Heterogêneas. Variável Composta Heterogênea. Variável Composta Heterogênea

Computação Eletrônica

Linguagem de programação: Pascal

PROG. DE COMPUTADORES II SI Arquivos

Teoria da Computação e Algoritmos. Introdução à Linguagem Pascal. ALGORITMO <Nome do algoritmo>; <definições>; INÍCIO <Comandos>; FIM.

Linguagem e Técnicas em Programação. Gilson de Souza Carvalho

Resolução de exercícios da ficha de trabalho nº. 8 de VBA

Sequencial Estrutura de controlo mais simples. As instruções são executadas sequencialmente.

O AMBIENTE DE PROGRAMAÇÃO VISUAL -PLANO DE ENSINO. Prof. Angelo Augusto Frozza, M.Sc.

Introdução à programação em PASCAL. Aula de 22/10/2001. Nota: Conjunto de slides baseados nas transparências utilizadas em PEDA em anos anteriores

PROF. Menezes. program ex17; uses wincrt; var i, a, cont: integer;

Departamento de Engenharia Rural Centro de Ciências Agrárias. Programação I

Exercícios. Resposta: a) var valor: real; i: integer. b)

Programação de Computadores

2. Construa um algoritmo para determinar os números primos menores ou iguais a 1000.

LINGUAGEM PASCAL Elementos básicos e estrutura

I1, I2 e In são instruções simples ou estruturadas da linguagem Pascal.

IFTO TÉCNICO EM INFORMÁTICA DESENVOLVIMENTO DE SISTEMAS AULA 01

Métodos de Programação I Ana Maria de Almeida 92. Um objecto (uma função, um método) diz-se recorrente se é definido em termos de si próprio.

Curso Técnico de Mecatrônica 4º Ano 2º Bimestre Introdução à Lógica de Programação

Estrutura de Dados Polinómio

Ficha de Trabalho N.º5 Soluções Propostas

Estrutura de Decisão - Case

LISTA DE EXERCÍCIOS 15 ( Matrizes (7Cs))

APONTAMENTOS DE PASCAL

VARIÁVEIS NUMÉRICAS : integer - Números inteiros entre e real - Números reais de 11 algarismos significativos.

Um algoritmo deve conter passos não ambíguos, executáveis e que sejam terminados quando seguidos.

Professor: Domingos Equipe Haskell: Lucas Montesuma, Francisco Leonardo CONCEITOS DA LINGUAGEM DE PROGRAMAÇÃO CÁLCULADORA EM HASKELL

Capítulo II : A Linguagem Pascal Conceitos Fundamentais

Geração de Código para LALG

Lista de Exercícios 03a Algoritmos Repetição

Programação Introdução

APÊNDICE A - FUNDAMENTOS DA LINGUAGEM DE PROGRAMAÇÃO PASCAL.

Lógica de Programação I. Gilson de Souza Carvalho

Transcrição:

A Linguagem Pascal Exercícios 1 Exercícios sobre o Capítulo III Problema: Dado um número inteiro e positivo, representando segundos, convertê-lo em horas, minutos e segundos. O resultado deve ser dado numas das formas: ou ou SEGUNDOS = HORAS E MINUTOS E SEGUNDOS SEGUNDOS = MINUTOS E SEGUNDOS SEGUNDOS = SEGUNDOS Diagrama de Estrutura: Ler (segundos) Escrever (segundos, 'SEGUNDOS =') seg. < 60 segundos 60 Escrever(segundos, 'SEGUNDOS.') minutos segundos div 60 segundos segundos mod 60 minutos < 60 minutos 60 Escrever (minutos, 'MINUTOS E', segundos, 'SEGUNDOS. ') horas minutos div 60 minutos minutos mod 60 Escrever (horas, 'HORAS E', minutos, 'MINUTOS E', segundos, 'SEGUNDOS.')

A Linguagem Pascal Exercícios 2 Programa: program horas_minutos_segundos (input, output); type natural = 0..maxint; var horas, minutos, segundos : natural; begin read(segundos); write(segundos:6,' SEGUNDOS ='); if segundos < 60 then writeln(segundos:6,' SEGUNDOS.'); else begin minutos:=segundos div 60; segundos:=segundos mod 60; if minutos < 60 then writeln(minutos:6,' MINUTOS E', segundos:6,' SEGUNDOS.') else begin horas:= minutos div 60; minutos:= minutos mod 60; writeln(horas:6,' HORAS E', minutos:6,' MINUTOS E', segundos:6,' SEGUNDOS.') end end

A Linguagem Pascal Exercícios 3 Problema: Dado: n µ 0 Resultado: 2 n 2ª versão do Programa, sem a variável auxiliar i: program potenciade2_versao2 (input, output); type natural = 0..maxint; var n, potencia : natural; begin read(n); write('2 elevado a', n:5, ' = '); potencia:= 1; while n > 0 do begin n:= n 1; potencia:= potencia * 2 (* aqui n = 0 *) writeln(potencia:5)

A Linguagem Pascal Exercícios 4 Problema: Calcular sin(x) e tambem cos(x) pelos respectivos desenvolvimentos em Série de Taylor, desprezando termos de grandeza inferior a 10-8. Observações: Relativamente ao desenvolvimento de e x : sin(x) contem os termos de ordem ímpar; cos(x) contem os termos de ordem par; em ambos os casos, o sinal dos termos vai alternando. Uma solução: uma variável lógica para controlar a paridade; uma variável inteira para controlar o valor do sinal.

A Linguagem Pascal Exercícios 5 Programa: program seno_e_cosseno (input, output); const erro = 1.0E-8; var n, sinal : integer; par : boolean; x, termo, seno, cosseno : real; begin write('escreva um numero real:); readln(x); (* inicializações *) seno:= 0; cosseno:= 1; n:= 1; par:= false; (* termo de ordem 1 *) termo:= x; sinal:= 1; (* positivo *) while abs(termo) >= erro do begin (* decidir onde somar termo válido *) if par then (* somar termo ao cosseno *) cosseno:= cosseno + sinal * termo else begin (* somar termo ao seno *) seno:= seno + sinal * termo; (* e trocar o sinal *) sinal:= -sinal (* calcular novo termo *) n:= n + 1; (* e trocar a paridade *) par:= not par; termo:= termo * x / n writeln(' x=', x:9:7, ' seno=', seno:9:7, ' cosseno=', cosseno:9:7)

A Linguagem Pascal Exercícios 6 Alguns resultados: Para x = Œ n termo seno cosseno 1 3.1415927 0.0000000 1.0000000 2 4.9348022 3.1415927 1.0000000 3 5.1677128 3.1415927-3.9348022 4 4.0587121-2.0261201-3.9348022 5 2.5501640-2.0261201 0.1239099 6 1.3352628 0.5240439 0.1239099 7 0.5992645 0.5240439-1.2113528 8 0.2353306-0.0752206-1.2113528 9 0.0821459-0.0752206-0.9760222 10 0.0258069 0.0069253-0.9760222 11 0.0073704 0.0069253-1.0018291 12 0.0019296-0.0004452-1.0018291 13 0.0004663-0.0004452-0.9998995 14 0.0001046 0.0000211-0.9998995 15 0.0000219 0.0000211-1.0000042 16 0.0000043-0.0000008-1.0000042 17 0.0000008-0.0000008-0.9999999 18 0.0000001 0.0000000-0.9999999 19 0.0000000 0.0000000-1.0000000 Para x = 0 n termo seno cosseno 1 0.0000000 0.0000000 1.0000000 isto é, o ciclo não chega a ser executado.

A Linguagem Pascal Exercícios 7 Versão simplificada do Programa: program seno_e_cosseno (input, output); const erro = 1.0E-8; var n, sinal : integer; x, termo, seno, cosseno : real; begin write('escreva um numero real:); readln(x); (* inicializações *) seno:= 0; cosseno:= 1; n:= 1; (* termo de ordem 1 *) termo:= x; sinal:= 1; (* positivo *) while abs(termo) >= erro do begin (* somar termo ao seno *) seno:= seno + sinal * termo; (* calcular novo termo *) n:= n + 1; termo:= termo * x / n; (* subtrair termo ao cosseno *) cosseno:= cosseno - sinal * termo (* calcular novo termo *) n:= n + 1; termo:= termo * x / n; (* e trocar o sinal *) sinal:= -sinal writeln(' x=', x:9:7, ' seno=', seno:9:7, ' cosseno=', cosseno:9:7)

A Linguagem Pascal Exercícios 8 Problema: Imprimir a Lista de todos os Números Primos até 1000. Programa: program ListaPrimosA(output); const max = 1000; var numero, limite, n : 1..max; primo : boolean; begin writeln('lista dos Números Primos até ', max); writeln; (* O primeiro Número Primo é 2 *) for numero:= 2 to max do begin limite:= trunc(sqrt(numero)); primo:= true; n:= 2; while primo and (n <= limite) do begin primo:= (numero mod n) <> 0; n:= n+1 (* not primo or (n>limite) *) (* primo (n>limite) *) end if primo then writeln(numero)

A Linguagem Pascal Exercícios 9 Problema: Imprimir a Lista dos 1000 primeiros Números Primos. Programa: program ListaPrimosB(output); const max = 1000; var numero, limite, n, conta : 0..max; primo : boolean; begin writeln('lista dos ', max, ' primeiros Números Primos'); writeln; conta:=0; numero:=1; (* O primeiro Número Primo é 2 *) while conta < max do begin (* Testar o próximo Número *) numero:= numero+1; limite:= trunc(sqrt(numero)); primo:= true; n:= 2; while primo and (n <= limite) do begin primo:= (numero mod n) <> 0; n:= n+1 (* not primo or (n>limite) *) (* primo (n>limite) *) end if primo then begin writeln(numero); conta:= conta+1 end

A Linguagem Pascal Exercícios 10 Problema: Listar os Divisores Próprios de um dado Número, i.e. excluindo a Unidade e o Número. Programa: program divisoresa(input, output); var numero, n, num2 : integer; begin writeln('venha um numero'); readln(numero); (* Cabeçalho da Tabela *) writeln('divisores Proprios de ', numero, ':'); num2:= numero div 2; for n:=2 to num2 do if numero mod n = 0 then writeln(n) Exemplo: Divisores Proprios de 36: 2 3 4 6 9 12 18 e se o Número for Primo?

A Linguagem Pascal Exercícios 11 Problema: Decompor um dado Número em todos os Produtos de Pares de Divisores Próprios. Programa: program divisoresb(input, output); var numero, n, num2 : integer; primo : boolean; begin writeln('venha um numero'); readln(numero); writeln('produtos dos pares de Divisores Proprios de ', numero, ':'); primo:= true; num2:= numero div 2; for n:=2 to num2 do if numero mod n = 0 then begin writeln(numero, '=', n, '*', numero div n); primo:= false if primo then writeln(numero, ' E'' um Numero Primo') Exemplos: Produtos dos pares de Divisores Proprios de 36: 36=2*18 36=3*12 36=4*9 36=6*6 36=9*4 36=12*3 36=18*2 Produtos dos pares de Divisores Proprios de 37: 37 E' um Numero Primo

A Linguagem Pascal Exercícios 12 Problema: Decompor um dado Número nos seus Divisores Primos, indicando o grau de divisibilidade de cada um. Programa: program divisoresc(input, output); var numero, n, num2, conta : integer; primo : boolean; begin writeln('venha um numero'); readln(numero); writeln('decomposicao em Factores Primos de ', numero, ':'); writeln; write(numero, ': '); primo:= true; num2:= numero div 2; for n:=2 to num2 do begin conta:=0; (* Contagem das divisoes por n *) while numero mod n = 0 do begin conta:= conta + 1; numero := numero div n (* O Numero inicial é destruído *) if conta >= 1 then begin primo:= false; write(n, '(', conta, ') ' ) end if primo then writeln(numero, ' E'' um Numero Primo') else writeln

A Linguagem Pascal Exercícios 13 Exemplos: Decomposicao em Factores Primos de 6: 6: 2(1) 3(1) Decomposicao em Factores Primos de 36: 36: 2(2) 3(2) Decomposicao em Factores Primos de 360: 360: 2(3) 3(2) 5(1) Decomposicao em Factores Primos de 37: 37: E' um Numero Primo Problemas: Não devia aparecer (1) quando só divide uma vez. O processo deveria parar quando não existem mais divisores, em vez de continuar sempre até numero div 2. O ciclo for deve ser substituído por um ciclo while.

A Linguagem Pascal Exercícios 14 program divisoresd(input, output); var numero, n, num, num2, conta : integer; primo : boolean; begin writeln('venha um numero'); readln(numero); writeln('decomposicao em Factores Primos de ', numero, ':'); writeln; write(numero, ': '); primo:= true; num:= numero; num2:= numero div 2; n:= 2; while (num > 1) and (n <= num2) do begin conta:=0; (* Contagem das divisoes por n *) while num mod n = 0 do begin conta:= conta + 1; num := num div n if conta > 0 then begin write( ' ', n); primo:= false; if conta > 1 then write( '(', conta, ')' ) n:= n + 1 if primo then writeln(numero, ' E'' um Numero Primo') else writeln

A Linguagem Pascal Exercícios 15 Generalização para um dado Intervalo: 2: Numero Primo 3: Numero Primo 4: 2(2) 5: Numero Primo 6: 2 3 7: Numero Primo 8: 2(3) 9: 3(2) 10: 2 5 11: Numero Primo 12: 2(2) 3 13: Numero Primo 14: 2 7 15: 3 5 16: 2(4) 17: Numero Primo 18: 2 3(2) 19: Numero Primo 20: 2(2) 5 21: 3 7 22: 2 11 23: Numero Primo 24: 2(3) 3 25: 5(2) 26: 2 13 27: 3(3) 28: 2(2) 7 29: Numero Primo 30: 2 3 5 31: Numero Primo 32: 2(5) 33: 3 11 34: 2 17 35: 5 7 36: 2(2) 3(2) 37: Numero Primo 38: 2 19 39: 3 13 40: 2(3) 5 41: Numero Primo 42: 2 3 7 43: Numero Primo 44: 2(2) 11 45: 3(2) 5 46: 2 23 47: Numero Primo 48: 2(4) 3 49: 7(2) 50: 2 5(2) 51: 3 17 52: 2(2) 13 53: Numero Primo 54: 2 3(3) 55: 5 11 56: 2(3) 7 57: 3 19 58: 2 29 59: Numero Primo 60: 2(2) 3 5 61: Numero Primo 62: 2 31 63: 3(2) 7 64: 2(6) 65: 5 13 66: 2 3 11 67: Numero Primo 68: 2(2) 17 69: 3 23 70: 2 5 7 71: Numero Primo 72: 2(3) 3(2) 73: Numero Primo 74: 2 37 75: 3 5(2) 76: 2(2) 19 77: 7 11 78: 2 3 13 79: Numero Primo 80: 2(4) 5 81: 3(4) 82: 2 41 83: Numero Primo 84: 2(2) 3 7 85: 5 17 86: 2 43 87: 3 29 88: 2(3) 11 89: Numero Primo 90: 2 3(2) 5 91: 7 13 92: 2(2) 23 93: 3 31 94: 2 47 95: 5 19 96: 2(5) 3 97: Numero Primo 98: 2 7(2) 99: 3(2) 11

A Linguagem Pascal Exercícios 16 program divisorese(input, output); const max = 100; var numero, n, num, num2, conta : integer; primo : boolean; begin writeln('decomposicoes ate ', max, ':'); writeln; for numero:=2 to max do begin write(numero:4, ': '); num:= numero; primo:= true; num2:= numero div 2; n:= 2; while (num > 1) and (n <= num2) do begin conta:=0; while num mod n = 0 do begin conta:= conta + 1; num := num div n if conta > 0 then begin write( ' ', n); primo:= false; if conta > 1 then write( '(',conta,')' ) n:= n + 1 end if primo then writeln(numero, ' Numero Primo') else writeln

A Linguagem Pascal Exercícios 17 Problema: Contar os Divisores Próprios dos Números de 2 a 500. Programa: program divisoresf(output); const max = 500; var numero, n, num2, conta : integer; begin (* Cabeçalho da Tabela *) writeln(' Divisores Proprios :'); for numero:=2 to max do begin num2:= numero div 2; conta:= 0; for n:=2 to num2 do if numero mod n = 0 then conta:= conta + 1; writeln(numero, conta) end Resultados: Divisores Proprios: 2 0 3 0 4 1 5 0 6 2 7 0 8 2 9 1 10 2 11 0 12 4 13 0 14 2 15 2 16 3 485 2 486 10 487 0 488 6 489 2 490 10 491 0 492 10 493 2 494 6 495 10 496 8 497 2 498 6 499 0 500 10

A Linguagem Pascal Exercícios 18 Problema: Qual é o Número, entre 2 e 500, que possui mais Divisores Próprios? Programa: program divisoresg(output); const max = 500; var numero, n, num2, conta : integer; maxdivisores, maisdivisivel : integer; begin maxdivisores:= 0; maisdivisivel:= 2; for numero:=3 to max do begin num2:= numero div 2; conta:= 0; for n:=2 to num2 do if numero mod n = 0 then conta:= conta + 1; if conta > maxdividores then begin maxdivisores:= conta; maisdivisivel:= numero end writeln('ganhou o ', maisdivisivel, ' com ', maxdivisores, ' divisores.') Resultado: Ganhou o 360 com 22 divisores. Mas será 360 o único número, entre 2 e 500, com 22 divisores? Se existirem mais, serão maiores ou menores que 360?