SlideShare uma empresa Scribd logo
1


              COMO PASSAR A PROGRAMAÇÃO II, COM O PROFESSOR CHAMBEL,
                            SEM PERCEBER NADA DE PASCAL


Como o professor Chambel faz sempre o mesmo tipo de exames, ou seja, usa sempre as
mesmas 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 positiva
Com 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


                     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


CÁBULAS – aconselho a levarem o seguinte para o exame.

Ordenar
For 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ú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
                base:=base*10;
                inverso:=inverso+inv[j]*base
         End;
----- ----- ----- ----- ----- ----- ----- ----- ----- -----
Múltiplos de um número
multipos[1]:=numero;
i:=1;
k:=numero;
While i<>fim do
         Begin
                k:=k+numero;
                i:=i+1;
                multiplos[i]:=k
         End;
----- ----- ----- ----- ----- ----- ----- ----- ----- -----
4


Divisores de um número
divisores[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 vector
soma:=0;
For i:=1 to nPosicoes do
       soma:=soma+V[i];
----- ----- ----- ----- ----- ----- -----                          -----        -----   -----
Soma das posições de dois vectores
For i:=1 to nPosicoes do
       V[i]:=V1[i]+V2[i];
-----   -----   -----   -----   -----   -----   -----   -----   -----   -----
Multiplicação de matrizes
For 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 matriz
For 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 matriz
For j:=1 to nColunas do
       Begin
               soma[j]:=0;
               For i:=1 to nLinhas do
                      soma[j]:=soma[j]+A[i,j]
       End;
----- ----- ----- ----- ----- ----- ----- ----- -----                                   -----
5


Soma das diagonais de uma matriz
A diagonal de inclinação negativa
diagonal:=0;
For i:=1 to nLinhas do
       diagonal:=diagonal+A[i,i];

A diagonal de inclinação positiva
diagonal:=0;
For i:=1 to nLinhas do
        diagonal:=diagonal+A[i,nLinhas-i+1];
----- ----- ----- ----- ----- ----- ----- ----- ----- -----
Inserir dados num vector
Writeln (‘Introduza quant de valores’);
For i:=1 to quant do
        Readln (V[i]);
----- ----- ----- ----- ----- ----- ----- ----- ----- -----
Inserir dados numa matriz
Writeln (‘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 vector
soma:=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 Primos
primo:=true;
for i:=3 to numero-1 do
6


       if numero mod i=0 then
               primo:=false;
----- ----- ----- ----- -----         -----   -----   -----   -----   -----
O menor num vector
menor:=maxint;
For i:=primeiro to ultimo do
       If V[i]< menor then
               menor:=V[i];
----- ----- ----- ----- -----         -----   -----   -----   -----   -----
O maior num vector
maior:= -maxint;
For i:=primeiro to ultimo do
       If V[i]> maior then
               maior:=V[i];
----- ----- ----- ----- -----         -----   -----   -----   -----   -----



RESOLUÇÃO DOS EXAMES DO CHAMBEL, USANDO ESTAS CÁBULAS

Exame 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


                                           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’)
               End
End.



             Calcule os números capicuas de 4 dígitos que sejam múltiplos de 45

Program 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


                                      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.’)
               End
End.



                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 sublistas


Program 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


                     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.

Mais conteúdo relacionado

PPT
Plano de Aula Duncan PO1 CAP 2
PDF
Plano de aula po1 capitulo 2 revisão algebra 2015 vrs 0001
PDF
Amii a complexa_2011
PDF
Graph Theory - Exercises - Chapter 3 - Algorithms of Dijkstra and Bellman-Ford
PDF
2 0 cap 002
PDF
Função exponencial e função logarítmica
PDF
Apostila de Matematica Aplicada
PDF
Cammpos vetoriais disciplinas calculo_iii_lista04_calculo3
Plano de Aula Duncan PO1 CAP 2
Plano de aula po1 capitulo 2 revisão algebra 2015 vrs 0001
Amii a complexa_2011
Graph Theory - Exercises - Chapter 3 - Algorithms of Dijkstra and Bellman-Ford
2 0 cap 002
Função exponencial e função logarítmica
Apostila de Matematica Aplicada
Cammpos vetoriais disciplinas calculo_iii_lista04_calculo3

Mais procurados (18)

PDF
Integração cálculo 4
PDF
Cálculo diferencial e integral de várias variáveis unid iii
PDF
Ap mat potenciacao
PDF
Matrizes - Exercícios Resolvidos
PPT
Números complexos
DOC
Mat equações
PDF
Funções
PDF
Cadeno 1 integrais duplos e intregrais de linha
PDF
Graph Theory - Exercises - Chapter 3
PDF
Integral Substituicao Trigonometrica
PDF
Sistemas lineares
DOC
1º matemática
PPT
Numeros complexos ( semi extensivo)
PDF
Derivadas
DOCX
1 gabarito 7ªa e 8
PDF
Cadernodequestes ano2010
PPTX
Cálculo Numérico - Aula 02: Introdução ao SCILAB
PDF
Resolucao dos exercicios_integrais
Integração cálculo 4
Cálculo diferencial e integral de várias variáveis unid iii
Ap mat potenciacao
Matrizes - Exercícios Resolvidos
Números complexos
Mat equações
Funções
Cadeno 1 integrais duplos e intregrais de linha
Graph Theory - Exercises - Chapter 3
Integral Substituicao Trigonometrica
Sistemas lineares
1º matemática
Numeros complexos ( semi extensivo)
Derivadas
1 gabarito 7ªa e 8
Cadernodequestes ano2010
Cálculo Numérico - Aula 02: Introdução ao SCILAB
Resolucao dos exercicios_integrais
Anúncio

Destaque (6)

PPTX
Projeto Parceria do Conhecimento - Digitalização Jornalismo
PPTX
Bits bytes
PPSX
Tipos de Áudios e Vìdeos
PPTX
PPTX
Unidades de linguagem
Projeto Parceria do Conhecimento - Digitalização Jornalismo
Bits bytes
Tipos de Áudios e Vìdeos
Unidades de linguagem
Anúncio

Semelhante a Pascal (20)

PDF
PC_2020-2_EP12_Funcao Potencia de Expoente Racional_GABARITO.pdf
PDF
Aula N02
PDF
19 algoritmos de enumeracao
PDF
Aula de Fluxos em Redes - Problema do Transporte SIMPLEX
PPTX
Matrizes Pascal - programação
PDF
Introducao a fisica - aula sobre vectores
PDF
Apostila de matematica para concursos
PPTX
AulaProgramacao6LingC_MatrizesExemplosERE.pptx
PPT
www.aulaparticularonline.net.br - Matemática - Conjunto de Números Inteiros
PDF
fund-cálculo-aplicado-aula_01_24_08_.pdf
PPT
www.AulasDeMatematicaApoio.com - Matemática - Conjunto dos Números Inteiros
PPT
www.AulasDeMatematicaApoio.com.br - Matemática - Conjunto de Números Inteiros
PPT
www.AulaParticularApoio.Com.Br - Matemática - Conjunto de Números Inteiros
PPT
www.AulasDeMatematicanoRJ.Com.Br - Matemática - Conjuntos Numéricos
PPT
www.ensinofundamental.net.br - Matemática - Conjunto de Números Inteiros
PPT
www.TutoresDePlantao.Com.Br - Matemática - Conjunto de Números Inteiros
PDF
PROJETO SABERMAT Mathematicspdfcooll.pdf
PDF
Capitulo 1scilab
PDF
Curso de Matlab avancado 1
PC_2020-2_EP12_Funcao Potencia de Expoente Racional_GABARITO.pdf
Aula N02
19 algoritmos de enumeracao
Aula de Fluxos em Redes - Problema do Transporte SIMPLEX
Matrizes Pascal - programação
Introducao a fisica - aula sobre vectores
Apostila de matematica para concursos
AulaProgramacao6LingC_MatrizesExemplosERE.pptx
www.aulaparticularonline.net.br - Matemática - Conjunto de Números Inteiros
fund-cálculo-aplicado-aula_01_24_08_.pdf
www.AulasDeMatematicaApoio.com - Matemática - Conjunto dos Números Inteiros
www.AulasDeMatematicaApoio.com.br - Matemática - Conjunto de Números Inteiros
www.AulaParticularApoio.Com.Br - Matemática - Conjunto de Números Inteiros
www.AulasDeMatematicanoRJ.Com.Br - Matemática - Conjuntos Numéricos
www.ensinofundamental.net.br - Matemática - Conjunto de Números Inteiros
www.TutoresDePlantao.Com.Br - Matemática - Conjunto de Números Inteiros
PROJETO SABERMAT Mathematicspdfcooll.pdf
Capitulo 1scilab
Curso de Matlab avancado 1

Mais de Jorge Teixeira (20)

PPTX
Webrádio - Apresentacao dissertacao
PDF
3 criar podcasts
PPTX
Divulgação
PPTX
Aquisicao
PPTX
PDF
Ferramentas web 2
PDF
Tutoria online
DOC
Spie individual trimestre2_jorge
PDF
Pré projecto de investigação
DOC
Spie individual trimestre2_jorge
PDF
Pré projecto de investigação
PDF
Ti 01 modelos comunicacionais
PDF
Jorge teixeira prova_tac
PPT
Ied grupo 1 pte
PDF
Pfap relatorio final
DOC
An2 b - trabalho colaborativo com as ferramentas google - edição e publicação...
PDF
Plano tic 2007_2008
PDF
Plano tic 2007_2008
PDF
Webrádio - Apresentacao dissertacao
3 criar podcasts
Divulgação
Aquisicao
Ferramentas web 2
Tutoria online
Spie individual trimestre2_jorge
Pré projecto de investigação
Spie individual trimestre2_jorge
Pré projecto de investigação
Ti 01 modelos comunicacionais
Jorge teixeira prova_tac
Ied grupo 1 pte
Pfap relatorio final
An2 b - trabalho colaborativo com as ferramentas google - edição e publicação...
Plano tic 2007_2008
Plano tic 2007_2008

Pascal

  • 1. 1 COMO PASSAR A PROGRAMAÇÃO II, COM O PROFESSOR CHAMBEL, SEM PERCEBER NADA DE PASCAL Como o professor Chambel faz sempre o mesmo tipo de exames, ou seja, usa sempre as mesmas 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 positiva Com 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 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 CÁBULAS – aconselho a levarem o seguinte para o exame. Ordenar For 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ú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 base:=base*10; inverso:=inverso+inv[j]*base End; ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- Múltiplos de um número multipos[1]:=numero; i:=1; k:=numero; While i<>fim do Begin k:=k+numero; i:=i+1; multiplos[i]:=k End; ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
  • 4. 4 Divisores de um número divisores[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 vector soma:=0; For i:=1 to nPosicoes do soma:=soma+V[i]; ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- Soma das posições de dois vectores For i:=1 to nPosicoes do V[i]:=V1[i]+V2[i]; ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- Multiplicação de matrizes For 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 matriz For 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 matriz For 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 Soma das diagonais de uma matriz A diagonal de inclinação negativa diagonal:=0; For i:=1 to nLinhas do diagonal:=diagonal+A[i,i]; A diagonal de inclinação positiva diagonal:=0; For i:=1 to nLinhas do diagonal:=diagonal+A[i,nLinhas-i+1]; ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- Inserir dados num vector Writeln (‘Introduza quant de valores’); For i:=1 to quant do Readln (V[i]); ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- Inserir dados numa matriz Writeln (‘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 vector soma:=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 Primos primo:=true; for i:=3 to numero-1 do
  • 6. 6 if numero mod i=0 then primo:=false; ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- O menor num vector menor:=maxint; For i:=primeiro to ultimo do If V[i]< menor then menor:=V[i]; ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- O maior num vector maior:= -maxint; For i:=primeiro to ultimo do If V[i]> maior then maior:=V[i]; ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- RESOLUÇÃO DOS EXAMES DO CHAMBEL, USANDO ESTAS CÁBULAS Exame 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 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’) End End. Calcule os números capicuas de 4 dígitos que sejam múltiplos de 45 Program 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 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.’) End End. 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 sublistas Program 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 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.