Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original
1-piramide_dos_numeros Resposta: Uma piramide de números, tendo como topo o número 1, e a cada linha, um numero a mais: 1 12 123 (...) 10-palavra_invertida.pas {Escreva um programa que leia uma string do teclado e imprima a string invertida (de trás para frente).} program inverte_palavra; var palavra:string; aux:char; i,v:integer; begin writeln('Digite uma palavra'); readln(palavra); v:=Length(palavra); for i:=1 to (v)div(2) do begin aux:=palavra[i]; palavra[i]:=palavra[v+1-i]; palavra[v+1-i]:=aux; end; writeln('Palavra invertida: ',palavra); readln; end. 11-palindromo.pas {Uma palavra é palíndromo se ela não se altera quando lida da direita para esquerda. Por exemplo, raiar é palíndromo. Escreva um programa que verifique se uma palavra dada é palíndromo.} program palindromo; var palavra,armaz_palavra:string; aux:char; i,v:integer; begin writeln('Digite uma palavra'); readln(palavra); armaz_palavra:=palavra; v:=Length(palavra); for i:=1 to (v)div(2) do begin aux:=palavra[i]; palavra[i]:=palavra[v+1-i]; palavra[v+1-i]:=aux; end; if upcase(armaz_palavra)=upcase(palavra) then writeln(armaz_palavra,' é um palíndromo!') else writeln(armaz_palavra,' não é um palíndromo!'); readln; end. 12-numero_palavras.pas {Escreva uma função que retorne o número de palavras de uma frase dada. A frase deve ser passada como parâmetro para a função.} program palavras_frase; //RESPOSTA function Numero_Palavras(frase2:string):integer; var i,v,j:integer; begin i:=1; v:=Length(frase2); for j:=1 to v do if frase2[j]=' ' then i:=i+1; Numero_Palavras:=i; end; //FIM RESPOSTA var frase:string; begin writeln('Digite uma frase'); readln(frase); writeln('Numero de palavras: ',Numero_Palavras(frase)); readln; end. 13-sobrenome_nome.pas {As companhias de transportes aéreos costumam representar os nomes dos passageiros no formato último sobrenome/nome. Por exemplo, o passageiro Alberto Costa Moreira seria indicado por Moreira/Alberto.Escreva um programa que receba um nome da entrada de dados e o escreva na tela no formato acima. Lembre-se que a quantidade de sobrenomes pode variar de uma pessoa para outra.} program sobrenome_nome; var nome_completo,nome_formato:string; i,s,v,tam:integer; begin writeln('Digite seu nome completo'); readln(nome_completo); v:=Length(nome_completo); while (nome_completo[v])<>' ' do v:=v-1; s:=Length(nome_completo); tam:=s-v; nome_formato:=Copy(nome_completo,v+1,tam)+'/'; i:=1; while (nome_completo[i])<>' ' do i:=i+1; nome_formato:=nome_formato+Copy(nome_completo,1,i); writeln('Nome "convertido": ',nome_formato); readln; end. 14-nome_bibliografico.pas {As normas para a exibição da bibliografia de um artigo científico, de uma monografia,de um livro, texto, etc,exigem que o nome do autor seja escrito no formato último sobrenome, seqüência das primeiras letras do nome e dos demais sobrenomes, seguidas de ponto final. Por exemplo, Antônio Carlos Jobim seria referido por "Jobim, A. C.". Escreva um programa que receba um nome e o escreva no formato de bibliografia.} program formato_bibliografia; function Numero_Palavras(frase2:string):integer; var i,v,j:integer; begin i:=1; v:=Length(frase2); for j:=1 to v do if frase2[j]=' ' then i:=i+1; Numero_Palavras:=i; end; var i,j,tam_sobrenome,k:integer; nome_completo,nome_bib:string; begin writeln('Digite seu nome completo'); readln(nome_completo); i:=Length(nome_completo); while (nome_completo[i])<>' ' do i:=i-1; j:=Length(nome_completo); tam_sobrenome:=j-i; nome_bib:=(Copy(nome_completo,i+1,tam_sobrenome)+', ')+(Copy(nome_completo,1,1)+'. '); k:=1; while (nome_completo[k])<>' ' do k:=k+1; if Numero_Palavras(nome_completo)>2 then nome_bib:=nome_bib+(Copy(nome_completo,k+1,1)+'.'); writeln('Nome bibliografico: ',nome_bib); readln; end. 15-cadastro_funcionarios.pas {Faça um programa que crie um arquivo (FUNC.ARQ) com os dados dos funcionários de uma empresa. Os dados dos funcionários são: nome, cargo e salário. Os dados devem ser fornecidos pelo usuário e gravados no arquivo criado. Para finalizar a entrada de dados, o usuário deve fornecer ‘FIM’ como nome do funcionário.} program func_empresa; type dados_funcionario=record nome:string; cargo:string; salario:string; end; funcs=file of dados_funcionario; var arq_funcionarios:funcs; r:dados_funcionario; opcao:char; begin Assign(arq_funcionarios,'FUNC.ARQ'); Rewrite(arq_funcionarios); Reset(arq_funcionarios); while not Eof(arq_funcionarios) do read(arq_funcionarios,r); writeln('Cadastro de Funcionarios'); //readln(opcao2); //---------------------------------------------------------------\\ //APENAS UM ESTUDO A MAIS PARA OS SEGUINTES CASOS {case opcao2 of 2: //EXIBIR DADOS DOS FUNCIONARIOS begin while not Eof(arq_funcionarios) do begin read(arq_funcionarios,r); with r do writeln(r.nome); writeln(r.salario); end; end; 3: //ALTERAR SALARIO DOS FUNCIONARIOS begin writeln('Digite o nome do usuario para alterar o salario'); readln(nome_altera_salario); n:=0; while not Eof(arq_funcionarios) do begin read(arq_funcionarios,r); if upcase(r.nome)=upcase(nome_altera_salario) then begin readln(r.salario); Seek(arq_funcionarios,n); write(arq_funcionarios,r); end; n:=n+1; end; end; end;} //FIM //---------------------------------------------------------------\\ write('Nome: ');readln(r.nome); while upcase(r.nome)<>'FIM' do begin write('Cargo: ');readln(r.cargo); write('Salario: R$');readln(r.salario); writeln('Deseja salvar o cadastro? (s/n)'); readln(opcao); if upcase(opcao)='S' then begin write(arq_funcionarios,r); writeln('Dados gravados com sucesso!'); end; write('Nome: ');readln(r.nome); end; writeln; writeln('Pressione qualquer tecla para fechar...'); readln; end. 16-alunos_aprovados.pas {Suponha a existência de um arquivo, ALUNOS.ARQ, com dados dos alunos de uma escola. Os dados dos alunos são: matrícula, nome, nota1, nota2 e nota3. Faça um programa que crie um novo arquivo, APROVADOS.ARQ, leia os dados de ALUNOS.ARQ e grave em APROVADOS.ARQ apenas os alunos que tiveram média maior que 7,0. Os dados dos alunos em APROVADOS.ARQ devem ser: matrícula, nome e média.} program alunos_aprovados; type talunos=record nome:string; matricula:string[10]; nota1:real; nota2:real; nota3:real; end; taprovados=record nome:string; matricula:string[10]; media:real; end; var dados_aluno:talunos; dados_aprovado:taprovados; alunos_arq:file of talunos; aprovados_arq:file of taprovados; media:real; begin Assign(alunos_arq,'/home/leonardo/Documentos/UFBA/INTRODUÇÃO À LÓGICA DE PROGRAMAÇÃO - Cláudio Nogueira Santanna/Programas em Pascal/Segunda Lista/ALUNOS.ARQ'); Assign(aprovados_arq,'/home/leonardo/Documentos/UFBA/INTRODUÇÃO À LÓGICA DE PROGRAMAÇÃO - Cláudio Nogueira Santanna/Programas em Pascal/Segunda Lista/APROVADOS.ARQ'); Rewrite(aprovados_arq); Reset(alunos_arq); Reset(aprovados_arq); while not Eof(alunos_arq) do begin read(alunos_arq,dados_aluno); media:=(dados_aluno.nota1+dados_aluno.nota2+dados_aluno.nota3)/3; if media>7 then begin dados_aprovado.nome:=dados_aluno.nome; dados_aprovado.matricula:=dados_aluno.matricula; dados_aprovado.media:=media; write(aprovados_arq,dados_aprovado); writeln('O(A) aluno(a) ',dados_aluno.nome,' com media ',media:0:2,' foi aprovado!'); end else writeln('O(A) aluno(a) ',dados_aluno.nome,' com media ',media:0:2,' foi reprovado.'); end; readln; end. 16-cadastro_alunos[EXTRA].pas program alunos_ufba; type talunos=record nome:string; matricula:string[10]; nota1:real; nota2:real; nota3:real; end; var alunos_arq:file of talunos; dados_aluno:talunos; opcao:integer; begin Assign(alunos_arq,'/home/leonardo/Documentos/UFBA/INTRODUÇÃO À LÓGICA DE PROGRAMAÇÃO - Cláudio Nogueira Santanna/Programas em Pascal/Segunda Lista/ALUNOS.ARQ'); Reset(alunos_arq); while not Eof(alunos_arq) do read(alunos_arq,dados_aluno); opcao:=1; writeln('Digite os dados dos alunos'); while opcao<>0 do begin readln(dados_aluno.nome); readln(dados_aluno.matricula); readln(dados_aluno.nota1); readln(dados_aluno.nota2); readln(dados_aluno.nota3); write(alunos_arq,dados_aluno); writeln('Digite 0 caso queira finalizar'); readln(opcao); end; readln; end. 16-criar arquivo alunos.arq[EXTRA].pas program alunos_ufba; type talunos=record nome:string; matricula:string[10]; nota1:real; nota2:real; nota3:real; end; var alunos_arq:file of talunos; begin Assign(alunos_arq,'/home/leonardo/Documentos/UFBA/INTRODUÇÃO À LÓGICA DE PROGRAMAÇÃO - Cláudio Nogueira Santanna/Programas em Pascal/Segunda Lista/ALUNOS.ARQ'); Rewrite(alunos_arq); end. 17-clientes_empresa.pas {Faça um programa que cria um arquivo seqüencial (CLIENTES.ARQ) com os dados dos clientes de uma empresa. Os dados de cada cliente são: NOME, TELEFONE e COMPRAS. COMPRAS é um vetor de 12 posições com os valores em reais das comprar realizadas pelo cliente em cada mês do ano. Os dados devem ser fornecidos pelo usuário e gravados no arquivo criado. Para finalizar a entrada de dados, o usuário deve fornecer ‘FIM’ como nome do cliente.} program clientes_empresa; type tcliente=record nome:string; telefone:string; compras:array [1..12] of real; end; tclientes=file of tcliente; var arq_tclientes:tclientes; r_tcliente:tcliente; i:integer; confirma_gravacao:char; begin Assign(arq_tclientes,'CLIENTES.ARQ'); Rewrite(arq_tclientes); writeln('Digite os dados de cada cliente. Para finalizar, digite "fim" no campo "Nome"'); write('Nome: '); readln(r_tcliente.nome); while upcase(r_tcliente.nome)<>'FIM' do begin write('Telefone: '); readln(r_tcliente.telefone); writeln('Compras do ano: '); for i:=1 to 12 do begin write('Compras do mes ',i,': R$'); readln(r_tcliente.compras[i]); end; writeln('Deseja salvar os dados registrados? (s/n)'); readln(confirma_gravacao); while (upcase(confirma_gravacao)<>'S') and (upcase(confirma_gravacao)<>'N') do begin writeln('Digite uma opcao valida! (s/n)'); readln(confirma_gravacao); end; if upcase(confirma_gravacao)='S' then begin write(arq_tclientes,r_tcliente); writeln('Digite os dados do proximo cliente'); end else writeln('Digite novamente os dados do cliente'); write('Nome: '); readln(r_tcliente.nome); end; readln; end. 18-bom_cliente.pas {Considerando o arquivo criado no exercício anterior (exercício 18), faça um programa para encontrar os bons clientes, aqueles que compraram mais de R$10.000,00 no ano. O programa deve criar um novo arquivo, BONSCLIENTES.ARQ, ler os dados de CLIENTES.ARQ e gravar em BONSCLIENTES.ARQ apenas os clientes cujas compras anuais foram superiores a R$10.000,00. Os dados dos clientes em BONSCLIENTES.ARQ devem ser: NOME e COMPRAS_ANO. COMPRAS_ANO deve armazenar o valor anual das compras de cada cliente.} program bonsclientes; type tcliente=record nome:string; telefone:string; compras:array [1..12] of real; end; bom_cliente=record nome:string; compras_ano:real; end; tclientes=file of tcliente; bons_clientes=file of bom_cliente; var arq_tclientes:tclientes; r_tcliente:tcliente; arq_bons_clientes:bons_clientes; r_bom_cliente:bom_cliente; soma:real; i:integer; begin Assign(arq_tclientes,'CLIENTES.ARQ'); //considerando os dois arquivos na mesma pasta Reset(arq_tclientes); //abrindo o arquivo ja existente Assign(arq_bons_clientes,'BONSCLIENTES.ARQ'); Rewrite(arq_bons_clientes); //criando o arquivo dos bons clientes while not Eof(arq_bons_clientes) do read(arq_bons_clientes,r_bom_cliente); while not Eof(arq_tclientes) do begin read(arq_tclientes,r_tcliente); soma:=0; for i:=1 to 12 do soma:=soma+(r_tcliente.compras[i]); if soma>10000 then begin r_bom_cliente.nome:=r_tcliente.nome; r_bom_cliente.compras_ano:=soma; writeln(r_bom_cliente.nome,' é um bom cliente por ter comprado R$', r_bom_cliente.compras_ano:0:2,' no ano'); end; write(arq_bons_clientes,r_bom_cliente); end; readln; end. 2-potencia.pas {Escreva um subprograma em Pascal que calcule “x elevado a y”.} program potencia; var x,y:integer; {SUBPROGRAMA} procedure elevar(a,b,c:integer); begin c:=1; while b>0 do begin c:=c*a; b:=b-1; end; writeln(c); end; {/SUBPROGRAMA} begin writeln('Escreva dois numeros para que se possa aplicar a potenciacao'); readln(x,y); elevar(x,y,1); readln; end. 3-checar_digitos.pas {Escreva um subprograma em Pascal que calcule a quantidade de dígitos de um número inteiro. Para isso, use o subprograma da questão 2.} program quantdigitos; //Funcao da potenciacao function elevar(a,b,c:integer):integer; begin c:=1; while b>0 do begin c:=c*a; b:=b-1; end; elevar:=c; end; //Procedimento do numero de digitos procedure ChecaDigitos(x:integer); var i:integer; begin i:=1; repeat if (x)div(elevar(10,i,1))<>0 then i:=i+1; until((x)div(elevar(10,i,1))=0); writeln('Os calculos concluiram que ',x,' tem ',i,' digitos'); end; //VARIAVEIS DO PROGRAMA PRINCIPAL var n:integer; //INICIO DO PROGRAMA PRINCIPAL begin writeln('Digite um numero'); readln(n); ChecaDigitos(n); writeln('Pressione qualquer tecla para fechar...'); readln; end. 4-inverter_numero.pas {Escreva um subprograma em Pascal que retorne o reverso de um número inteiro, por exemplo, 472 -> 274. O número poderá ter qualquer quantidade de dígitos. Para isso, use os subprogramas das questões 2 e 3.} //Funcao da potenciacao function elevar(a,b,c:integer):integer; begin c:=1; while b>0 do begin c:=c*a; b:=b-1; end; elevar:=c; end; //Funcao do numero de digitos function ChecaDigitos(x:integer):integer; var i:integer; begin i:=1; repeat if (x)div(elevar(10,i,1))<>0 then i:=i+1; until((x)div(elevar(10,i,1))=0); ChecaDigitos:=i; end; //Funcao para inverter o numero function InverteNumero(num:integer):integer; var i,j,num_inv:integer; begin num_inv:=0; i:=ChecaDigitos(num); for j:=1 to i do begin num_inv:=num_inv+(((num)mod(10))*elevar(10,i-1,1)); num:=(num)div(10); i:=i-1; end; InverteNumero:=num_inv; end; //VARIAVEIS DO PROGRAMA PRINCIPAL var n,n_invertido:integer; //INICIO DO PROGRAMA begin writeln('Digite um numero'); readln(n); n_invertido:=InverteNumero(n); writeln('Numero invertido:',n_invertido); readln; end. 5-f(3) e f(7) Resposta: f(3)=9 e f(7)=23 6-potencia_recursiva.pas {Escreva uma função recursiva que calcule “x elevado a y”.} program potenciarecursiva; //FUNCAO RECURSIVA PARA ELABORAR UMA POTENCIACAO function pot(a,b,c:integer):integer; begin if b=0 then pot:=1 else pot:=a*pot(a,b-1,1); end; var base,expoente:integer; begin writeln('Digite dois numeros (x elevado a y)'); write('X: ');readln(base); write('Y: ');readln(expoente); writeln('Resultado: ',pot(base,expoente,1)); readln; end. 7-fibonacci.pas {Escreva uma função recursiva que retorne o n-ésimo termo da seqüência de Fibbonaci, n dado.} //SEQUENCIA DE FIBONACCI DE ACORDO COM A PRIMEIRA LISTA: 1,1,2,3,5,8,13,21... program fibonacci; function f(n:integer):integer; begin if (n=1) then f:=1; if (n=0) then f:=0; if (n<>0) and (n<>1) then f:=f(n-1)+f(n-2); end; var num:integer; begin writeln('Digite um numero'); readln(num); writeln('RESPOSTA: ',f(num)); readln; end. 8-soma_recursiva.pas {Escreva uma função recursiva para calcular o valor da seguinte série h(x) = 1 + 1/2 + 1/3 + 1/4 + ... + 1/x, para um inteiro x positivo (x>0).} function h(x:integer):real; begin if x=1 then h:=1 else h:=1+h(x-1); end; 9-fatorial_impar_recursivo.pas {O fatorial ímpar de um número n ímpar positivo é o produto de todos os números ímpares positivos menores do que ou iguais a n. Indicando o fatorial ímpar de n por n| temos, n| = 1 . 3. 5 . ... . n. Por exemplo, 7| = 1 . 3 . 5 . 7 = 105. Escreva uma função iterativa e outra recursiva para determinar o fatorial ímpar de um inteiro ímpar dado.} program fatorialimpar; function fatrec(n:integer):integer; begin if (n=1) then fatrec:=1 else fatrec:=n*fatrec(n-2); end; var n:integer; begin writeln('Digite um numero impar'); readln(n); while (n)mod(2)=0 do begin writeln('Digite apenas números impares'); readln(n); end; writeln(n,'|: ',fatrec(n)); readln; end. 9.1-fatorial_impar_iterativo.pas {O fatorial ímpar de um número n ímpar positivo é o produto de todos os números ímpares positivos menores do que ou iguais a n. Indicando o fatorial ímpar de n por n| temos, n| = 1 . 3. 5 . ... . n. Por exemplo, 7| = 1 . 3 . 5 . 7 = 105. Escreva uma função iterativa e outra recursiva para determinar o fatorial ímpar de um inteiro ímpar dado.} program fatorialinterativo; var n,i,fat:integer; begin writeln('Digite um numero'); readln(n); fat:=1; for i:=1 to n do if (i)mod(2)<>0 then fat:=fat*i; writeln(n,'! impar =',fat); readln; end. SegundaLista.pdf Universidade Federal da Bahia Instituto de Matemática Disciplina – Introdução à Lógica de Programação Segunda Lista de Exercícios SUBPROGRAMAS 1) O que o programa abaixo imprimirá na tela? program Linhas; var contador : integer; procedure ImprimeLinha(linha : integer); var contador : integer; begin for contador := 1 to linha do write(contador); writeln; end; begin for contador := 1 to 10 do ImprimeLinha(contador); end. 2) Escreva um subprograma em Pascal que calcule “x elevado a y”. 3) Escreva um subprograma em Pascal que calcule a quantidade de dígitos de um número inteiro. Para isso, use o subprograma da questão 2. 4) Escreva um subprograma em Pascal que retorne o reverso de um número inteiro, por exemplo, 472 -> 274. O número poderá ter qualquer quantidade de dígitos. Para isso, use os subprogramas das questões 2 e 3. RECURSIVIDADE 5) Considere a seguinte função recursiva: function f(n: integer): integer; begin if (n < 4) then f := 3 * n; else f := 2 * f(n - 4) + 5; end; Quais são os valores para f(3) e f(7)? 6) Escreva uma função recursiva que calcule “x elevado a y”. 7) Escreva uma função recursiva que retorne o n-ésimo termo da seqüência de Fibbonaci, n dado. 8) Escreva uma função recursiva para calcular o valor da seguinte série h(x) = 1 + 1/2 + 1/3 + 1/4 + ... + 1/x, para um inteiro x positivo (x>0). 9) O fatorial ímpar de um número n ímpar positivo é o produto de todos os números ímpares positivos menores do que ou iguais a n. Indicando o fatorial ímpar de n por n| temos, n| = 1 . 3. 5 . ... . n. Por exemplo, 7| = 1 . 3 . 5 . 7 = 105. Escreva uma função iterativa e outra recursiva para determinar o fatorial ímpar de um inteiro ímpar dado. STRING 10) Escreva um programa que leia uma string do teclado e imprima a string invertida (de trás para frente). 11) Uma palavra é palíndromo se ela não se altera quando lida da direita para esquerda. Por exemplo, raiar é palíndromo. Escreva um programa que verifique se uma palavra dada é palíndromo. 12) Escreva uma função que retorne o número de palavras de uma frase dada. A frase deve ser passada como parâmetro para a função. 13) As companhias de transportes aéreos costumam representar os nomes dos passageiros no formato último sobrenome/nome. Por exemplo, o passageiro Alberto Costa Moreira seria indicado por Moreira/Alberto. Escreva um programa que receba um nome da entrada de dados e o escreva na tela no formato acima. Lembre-se que a quantidade de sobrenomes pode variar de uma pessoa para outra. 14) As normas para a exibição da bibliografia de um artigo científico, de uma monografia, de um livro texto etc., exigem que o nome do autor seja escrito no formato último sobrenome, seqüência das primeiras letras do nome e dos demais sobrenomes, seguidas de ponto final. Por exemplo, Antônio Carlos Jobim seria referido por Jobim, A. C.. Escreva um programa que receba um nome e o escreva no formato de bibliografia. REGISTROS E ARQUIVOS 15) Faça um programa que crie um arquivo (FUNC.ARQ) com os dados dos funcionários de uma empresa. Os dados dos funcionários são: nome, cargo e salário. Os dados devem ser fornecidos pelo usuário e gravados no arquivo criado. Para finalizar a entrada de dados, o usuário deve fornecer ‘FIM’ como nome do funcionário. 16) Suponha a existência de um arquivo, ALUNOS.ARQ, com dados dos alunos de uma escola. Os dados dos alunos são: matrícula, nome, nota1, nota2 e nota3. Faça um programa que crie um novo arquivo, APROVADOS.ARQ, leia os dados de ALUNOS.ARQ e grave em APROVADOS.ARQ apenas os alunos que tiveram média maior que 7,0. Os dados dos alunos em APROVADOS.ARQ devem ser: matrícula, nome e média. 17) Faça um programa que cria um arquivo seqüencial (CLIENTES.ARQ) com os dados dos clientes de uma empresa. Os dados de cada cliente são: NOME, TELEFONE e COMPRAS. COMPRAS é um vetor de 12 posições com os valores em reais das comprar realizadas pelo cliente em cada mês do ano. Os dados devem ser fornecidos pelo usuário e gravados no arquivo criado. Para finalizar a entrada de dados, o usuário deve fornecer ‘FIM’ como nome do cliente. 18) Considerando o arquivo criado no exercício anterior (exercício 19), faça um programa para encontrar os bons clientes, aqueles que compraram mais de R$10.000,00 no ano. O programa deve criar um novo arquivo, BONSCLIENTES.ARQ, ler os dados de CLIENTES.ARQ e gravar em BONSCLIENTES.ARQ apenas os clientes cujas compras anuais foram superiores a R$10.000,00. Os dados dos clientes em BONSCLIENTES.ARQ devem ser: NOME e COMPRAS_ANO. COMPRAS_ANO deve armazenar o valor anual das compras de cada cliente.