1              COMO PASSAR A PROGRAMAÇÃO II, COM O PROFESSOR CHAMBEL,                            SEM PERCEBER NADA DE PASC...
2                     For j:=1 to 4 do                            somaL[i]:=somaL[i]+A[i,j]              End;       (* Som...
3CÁBULAS – aconselho a levarem o seguinte para o exame.OrdenarFor i:=primeiro to ultimo-1 do         For j:=primeiro+1 to ...
4Divisores de um númerodivisores[1]:=1;i:=1;k:=1;While k<>numero do       Begin               k:=k+1;               If (nu...
5Soma das diagonais de uma matrizA diagonal de inclinação negativadiagonal:=0;For i:=1 to nLinhas do       diagonal:=diago...
6       if numero mod i=0 then               primo:=false;----- ----- ----- ----- -----         -----   -----   -----   --...
7                                           End                               End;                       (* CÁBULA: Soma d...
8                                      base:=base*10;                                      inverso:=inverso+inv[j]*base   ...
9                     end;       (* CÁBULA: O menor num vector *)       menor1:=maxint;       For i:=1 to 50 do           ...
Upcoming SlideShare
Loading in...5
×

Pascal

347

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
347
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
0
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Pascal

  1. 1. 1 COMO PASSAR A PROGRAMAÇÃO II, COM O PROFESSOR CHAMBEL, SEM PERCEBER NADA DE PASCALComo o professor Chambel faz sempre o mesmo tipo de exames, ou seja, usa sempre asmesmas perguntas, só que em contextos diferentes, pode-se fazer um tipo de base de dados(por outras palavras, uma boa cábula).Um bom exemplo disso é o seguinte programa:Verifique que uma matriz é mágica.Ou seja que a soma da linhas, das colunas e das diagonais é igual.Basta pegar na cábula e usar: ♦ Inserir dados numa matriz ♦ Soma das linhas de uma matriz ♦ Soma das colunas de uma matriz ♦ Soma das diagonais de uma matriz ♦ A diagonal de inclinação negativa ♦ A diagonal de inclinação positivaCom pouco mais fica o programa feito. ATENÇÂO: Lembrem-se que cada pequeno programa que o professor pede, poderá, por vezes, ser feito de maneira mais simples do que os desta cábula. Só que os da cábula dão para todas as situações.EXEMPLIFICAÇÃO: (este poderá ser o exemplo complicado)Program Magica;Type matriz = array [1..4,1..4] of integer; vector = array [1..4] of integer;Var A : matriz; somaL,SomaC:vector; i,j, diagonal1, diagonal2 : integer; magica : boolean;Begin (* Inserir dados numa matriz *) Writeln (‘Introduza os valores na matriz’); For i:=1 to 4 do For j:=1 to 4 do Readln (A[i,j]); (* Soma das linhas de uma matriz *) For i:=1 to 4 do Begin somaL[i]:=0;
  2. 2. 2 For j:=1 to 4 do somaL[i]:=somaL[i]+A[i,j] End; (* Soma das colunas de uma matriz *) For j:=1 to 4 do Begin somaC[j]:=0; For i:=1 to 4 do somaC[j]:=somaC[j]+A[i,j] End; (* Soma das diagonais de uma matriz *) ( * A diagonal de inclinação negativa *) diagonal1:=0; For i:=1 to 4 do diagonal1:=diagonal1+A[i,i]; (* A diagonal de inclinação positiva *) diagonal2:=0; For i:=1 to 4 do diagonal2:=diagonal2+A[i,4-i+1]; (* ----------------------- *) magica:=true; If diagonal1<>diagonal2 then magica:=false Else For i:=1 to 4 do If (somaL<>diagonal1) or (somaC<>diagonal1) then magica:=false; If magica then Writeln (‘A matriz é mágica’)End. ATENÇÃO: Por vezes terão que mudar as variáveis para outras, por interferirem nas partes que já se fez antes, mas isso é fácil, basta não esquecer de as mudar todas. Se não forem mudadas o mal não será muito grande, porque a ideia ficou!!! Neste exemplo tive que mudar a variável diagonal, para diagonal1 e diagonal2, porque tinha que usar as duas diagonais. As variáveis sublinhadas são mudadas por números. Neste exemplo: em nLinhas pus 4, porque estou a usar uma matriz 4x4. Não esquecer que têm que declarar as variáveis, nos programa que fazem.
  3. 3. 3CÁBULAS – aconselho a levarem o seguinte para o exame.OrdenarFor i:=primeiro to ultimo-1 do For j:=primeiro+1 to ultimo do If v[j]>v[i] then (* > crescente; < decrescente *) Begin (* troca de elementos *) aux:=v[i]; v[i]:=v[j]; v[j]:=aux End; ----- ----- ----- ----- ----- ----- ----- ----- ----- -----Inverter um númeroaux:=numero div 10;inv[1]:=numero mod 10;i:=1;While aux<>0 do Begin i:=i+1; If (aux div 10) = 0 then Begin inv[i]:=aux mod 10; aux:=0 End Else Begin inv[i]:=aux mod 10; aux:=aux div 10 End End;base:=1;inverso:=inv[i];For j:=i-1 downto 1 do Begin base:=base*10; inverso:=inverso+inv[j]*base End;----- ----- ----- ----- ----- ----- ----- ----- ----- -----Múltiplos de um númeromultipos[1]:=numero;i:=1;k:=numero;While i<>fim do Begin k:=k+numero; i:=i+1; multiplos[i]:=k End;----- ----- ----- ----- ----- ----- ----- ----- ----- -----
  4. 4. 4Divisores de um númerodivisores[1]:=1;i:=1;k:=1;While k<>numero do Begin k:=k+1; If (numero mod k) = 0 then Begin i:=i+1; divisores[i]:=k End End;----- ----- ----- ----- ----- ----- ----- ----- ----- -----Soma de um vectorsoma:=0;For i:=1 to nPosicoes do soma:=soma+V[i];----- ----- ----- ----- ----- ----- ----- ----- ----- -----Soma das posições de dois vectoresFor i:=1 to nPosicoes do V[i]:=V1[i]+V2[i];----- ----- ----- ----- ----- ----- ----- ----- ----- -----Multiplicação de matrizesFor i:=1 to nLinhas do For j:=1 to nColunas do Begin M[i,j]:=0; For k:=1 to nColunas do M[i,j]:=M[i,j]+A[i,k]*B[k,j] End;----- ----- ----- ----- ----- ----- ----- ----- ----- -----Soma das linhas de uma matrizFor i:=1 to nLinhas do Begin soma[i]:=0; For j:=1 to nColunas do soma[i]:=soma[i]+A[i,j] End;----- ----- ----- ----- ----- ----- ----- ----- ----- -----Soma das colunas de uma matrizFor j:=1 to nColunas do Begin soma[j]:=0; For i:=1 to nLinhas do soma[j]:=soma[j]+A[i,j] End;----- ----- ----- ----- ----- ----- ----- ----- ----- -----
  5. 5. 5Soma das diagonais de uma matrizA diagonal de inclinação negativadiagonal:=0;For i:=1 to nLinhas do diagonal:=diagonal+A[i,i];A diagonal de inclinação positivadiagonal:=0;For i:=1 to nLinhas do diagonal:=diagonal+A[i,nLinhas-i+1];----- ----- ----- ----- ----- ----- ----- ----- ----- -----Inserir dados num vectorWriteln (‘Introduza quant de valores’);For i:=1 to quant do Readln (V[i]);----- ----- ----- ----- ----- ----- ----- ----- ----- -----Inserir dados numa matrizWriteln (‘Introduza os valores na matriz’);For i:=1 to nLinhas do For j:=1 to nColunas do Readln (A[i,j]);----- ----- ----- ----- ----- ----- ----- ----- ----- -----Escrever os dados de uma matriz no ecrã (Análogo para os vectores)For i:=1 to nLinhas do For j:=1 to nColunas do Writeln (A[i,j]);----- ----- ----- ----- ----- ----- ----- ----- ----- -----Média de um vectorsoma:=0;For i:=1 to fim do soma:=soma+V[i];media:=soma/fim;----- ----- ----- ----- ----- ----- ----- ----- ----- -----Trocos de uma quantia (200$, 100$, 50$, 20$, 10$, 5$, 1$)duzentos:=quantia div 200;auxiliar:=quantia mod 200;cem:=auxiliar div 100;auxiliar:=auxiliar mod 100;cinquenta:=auxiliar div 50;auxiliar:=auxiliar mod 50;vinte:=auxiliar div 20;auxiliar:=auxiliar mod 20;dez:=auxiliar div 10;auxiliar:=auxiliar mod 10;cinco:=auxiliar div 5;um:=auxiliar mod 5;----- ----- ----- ----- ----- ----- ----- ----- ----- -----Números Primosprimo:=true;for i:=3 to numero-1 do
  6. 6. 6 if numero mod i=0 then primo:=false;----- ----- ----- ----- ----- ----- ----- ----- ----- -----O menor num vectormenor:=maxint;For i:=primeiro to ultimo do If V[i]< menor then menor:=V[i];----- ----- ----- ----- ----- ----- ----- ----- ----- -----O maior num vectormaior:= -maxint;For i:=primeiro to ultimo do If V[i]> maior then maior:=V[i];----- ----- ----- ----- ----- ----- ----- ----- ----- -----RESOLUÇÃO DOS EXAMES DO CHAMBEL, USANDO ESTAS CÁBULASExame 1999 – Trabalhadores estudantes Listar os primeiros números defeituosos (n inteiro>=2 é defeituoso se a soma dos seus divisores, incluindo o 1 e excluindo o número, é menor que n)Program defeituosos;Type vector = array [1..100] of integer;Var i, k, n, soma, numero, w : integer; divisores : vector;Begin Repeat Write (‘Introduza o valor de n’); Readln (n); Until n>=2; For numero:=2 to n-1 do (* n-1 pq o enunciado diz excluindo n *) Begin (* CÁBULA: Divisores de um número *) divisores[1]:=1; (* 1 pq o enunciado diz incluindo 1 *) i:=1; k:=1; While k<>numero do Begin k:=k+1; If (numero mod k) = 0 then Begin i:=i+1; divisores[i]:=k
  7. 7. 7 End End; (* CÁBULA: Soma de um vector *) soma:=0; For w:=1 to i do soma:=soma+divisores[w]; (* ---------------------------- *) If soma<n then Writeln (‘O ‘,numero,’ é DEFEITUOSO’) EndEnd. Calcule os números capicuas de 4 dígitos que sejam múltiplos de 45Program CapicuasMultiplos45;Type vector = array [1..4] of integer;Var inv : vector; i, numero, aux, base : integer;Begin For numero:=1000 to 9999 do Begin (* CÁBULA: Inverter um número *) aux:=numero div 10; inv[1]:=numero mod 10; i:=1; While aux<>0 do Begin i:=i+1; If (aux div 10) = 0 then Begin inv[i]:=aux mod 10; aux:=0 End Else Begin inv[i]:=aux mod 10; aux:=aux div 10 End End; base:=1; inverso:=inv[i]; For j:=i-1 downto 1 do Begin
  8. 8. 8 base:=base*10; inverso:=inverso+inv[j]*base End; ( * -------------------------- *) If (inverso=numero) and (inverso mod 45 = 0) then Writeln (‘O ‘,numero,’ é capicua e múltiplo de 45.’) EndEnd. Lista com 100 inteiros e realize as seguintes tarefas: a) Introduzir os elementos da lista b) Ordenar por ordem crescente os 50 primeiros números da lista c) Determinar o menor número da lista da posição 51º à 100º d) Comparar o menor número dos 50 primeiros com o menor da 51º à 100º, aparecendo no ecrã o local do menor das duas sublistasProgram inteiros100;Type vector = array [1..100] of integer;Var i, j, aux, menor1, menor2, posicao1, posicao2 : integer; V:vector;Begin (*CÁBULA: Inserir dados num vector *) Writeln (‘Introduza 100 inteiros’); For i:=1 to 100 do Readln (V[i]); (* CÁBULA: Ordenar *) For i:=1 to 50-1 do For j:=1+1 to 50 do If v[j]>v[i] then (* > crescente; < decrescente *) Begin (* troca de elementos *) aux:=v[i]; v[i]:=v[j]; v[j]:=aux End; (* CÁBULA: O menor num vector *) menor2:=maxint; For i:=51 to 100 do If V[i]< menor2 then begin menor2:=V[i]; posicao2:=i (* para se saber a posição *)
  9. 9. 9 end; (* CÁBULA: O menor num vector *) menor1:=maxint; For i:=1 to 50 do If V[i]< menor1 then begin menor1:=V[i]; posicao1:=i (* para se saber a posição *) end; (* --------------------------- *) If menor1<menor2 then Writeln (‘O menor: V[‘,posicao1,’] = ‘,menor1) Else Writeln (‘O menor: V[‘,posicao2,’] = ‘,menor2)End.

×