Data!!!

sábado, 15 de outubro de 2011

Funções da LInguagem Pascal!!!

Comando de Atribuição
    Sintaxe:
        <identificador_variável>:= <expressão>;
    Exemplos:
       
idade:=20;

        nome:='João';


Comandos de Saída
    Sintaxe:
        write <ou> writeln ('<string>', <variável>);
    Exemplos:
     
   write ('Bom dia');

        write ('Data');

        O que será impresso na tela: 
   
     writeln ('Bom dia');

        writeln ('Data');


        O que será impesso na tela: 


Comandos de Entrada
    Sintaxe:
        read <ou> readln (<variáveis>);
    Exemplos:
       
read (nota1,nota2,nota3);







Exercícios


Tente fazer os exercícios, depois veja uma das soluções mais abaixo na página.


1) Faça um programa para calcular a média de cinco alunos.
2) Faça um programa que dados os valores de A, B, C calcule as duas raízes de uma equação genérica: Ax2 + Bx + C. 







Resolução


1)
PROGRAM Media_Alunos;

 
Var

    n1,n2,n3,n4,n5,media: real;

Begin

    writeln('Digite as 5 notas dos alunos');

    read(n1,n2,n3,n4,n5);

    media:=(n1+n2+n3+n4+n5)/5;

    writeln('Sua media eh=',media);

End.


2)
PROGRAM Raizes;


Var
    a,b,c,x1,x2:real;

Begin

    writeln('Digite os respectivos A,B e C:');

    read(a,b,c);

    x1:=(-b+sqrt(sqr(b)-4*a*c))/2*a;

    x2:=(-b-sqrt(sqr(b)-4*a*c))/2*a;

    writeln('As duas raízes sao:',x1,'e ',x2);

End.  


Regra de Precedência de Operadores 







Para o desenvolvimento de programas em Pascal é importante


saber quais são as regras de precedência de operadores,


ou seja, qual operação será executada primeiro.


Veja a tabela abaixo:








<><> <> <><> <><><> <><><> <> <><> <> <><> <><><> <><><> <> <><> <> <><> <><><> <><><> <> <><> <> <><> <><><> <><><> <> <><> <>
1º precedência
NOT (operador lógico)
2º precedência
*,/,DIV,MOD (operações)
AND (operador lógico)
3º precedência
+,- (operações)
OR (operador lógico)
4º precedência
>,>=,<,<=,= 
(operadores relacionais)





Comandos de Seleção
    Sintaxe:
        if <condição>
            then begin
                    <comando ou bloco>
                    end
            else begin
                    <comando ou bloco>;
                    end;
    Exemplos:
       
readln(idade);

        if idade>=18

            then writeln ('A pessoa é maior de idade')

            else writeln ('A pessoa é considerada menor');








Comandos de Seleção Múltipla


CASE
    Este comando consiste de uma expressão (o seletor) e uma lista  de comandos. Ou seja, caso o valor de uma variável for igual ao que uma lista de alternativas testa, então o comando desta variável será executado. Depois da execução o controle vai para o próximo comando após o CASE. Se não existir nenhum rótulo que satisfaça essa condição, o efeito do comando fica indefinido. O seletor deve ser de tipo escalar (integer ou char, exceto real).
    Sintaxe:
        case <expressão> of
            <lista de rótulos do case> : <comandos>;
            end;
    Exemplo:
  
      case codigo of

            0: a:=0;

            1: a:=succ(a);

            2: begin

                    a:=ln(a);

                    writeln('Foi feito o logaritmo natural');

                    end;

            3: a:= exp(a);

            else a:=1;







Exercícios


Tente fazer os exercícios, depois veja uma das soluções mais abaixo na página.


1) Tendo como dados de entrada a altura e o sexo de uma pessoa, construa um programa que calcule o seu peso ideal. Utilize a seguinte convenção:
    Homens correspondem ao número 1,
    Mulheres correspondem ao número 2.
    Peso ideal para homens é dado por: 72,7 *altura-58,
    Peso ideal para mulheres é dado por: 62,1*altura-44,7.
2) Elabore um programa que recebe a idade de um nadador. O programa deve classificar o nadador em uma das categorias abaixo:
    Infantil A= de 5 a 7 anos,
    Infantil B= de 8 a 10 anos,
    Juvenil A= de 11 a 13 anos,
    Juvenil B= de 14 a 17 anos,
    Senior= maiores de 18 anos.
3) Fazer um programa que imprime na tela a situação do aluano após a sua nota ser digitada. Usar o comando CASE. Baseie-se na tabela abaixo:





<><> <> <><> <><><> <><><> <> <><> <> <><> <><><> <><><> <> <><> <> <><> <><><> <><><> <> <><> <> <><> <><><> <><><> <> <><> <> <><> <><><> <><><> <> <><> <> <><> <><><> <><><> <> <><> <> <><> <><><> <><><> <> <><> <>
Nota
Situação
de 1 a 2
Nota péssima
de 3 a 4
Nota ruim
de 5 a 6
Nota pouco ruim
7
Nota boa
8 a 9
Nota muito boa
10
Nota excelente


4) DESAFIO I: Construa um programa capaz de concluir qual dentre os animais seguintes foi escolhido, através de perguntas e respostas. Animais possíveis: leão, cavalo, homem, macaco, morcego, baleia, avestruz, pinguim, águia, tartaruga, crocodilo e cobra. obs.: nesta página não contém resolução deste exercício, qualquer dúvida procure o professor ou monitor da disciplina.
Exemplo:
    É mamífero? Sim.
    É quadrupede? Sim.
    É carnívoro? Não.
    É herbívoro? Sim.
    Então o animal escolhido foi o cavalo.


    Utilize a seguinte classificação: 


5) DESAFIO II: Faça o mesmo programa do exercício anterior ultilizando o comando CASE! Dê cógios para cada tipo! Por exemplo: Mamífero (código 01), Aves (código 02), Quadrúpede (código 04) .... Lembre-se que esta pesquisa tem que partir do mais genérico e chegar ao mais expecífico (o animal). Você terá que fazer mais de um teste no CASE !! obs.: nesta página não contém resolução deste exercício, qualquer dúvida procure o professor ou monitor da disciplina.







Resolução


1)
PROGRAM Peso_Ideal;

Var

    peso,altura:real;

    sexo:integer;

Begin

    writeln('Digite 1 se você é homem, digite 2 se você é mulher');

    read(sexo);

    writeln('Qual a sua altura em metros?');

    read(altura);

    if sexo=1

        then peso:=72.7*altura-58

        else peso:=62.1*altura-44.7;

    writeln('Seu peso ideal eh:',peso);

End.

2)

PROGRAM Nadador;

Var

    idade:integer;

Begin

    writeln('Digite a sua idade');

    read(idade);

    if idade<18

        then begin

             if idade>13

                then writeln('Sua categoria eh Juvenil B')

                else begin

                     if idade>10

                        then writeln('Sua categoria eh Juvenil A')

                        else begin

                             if idade>7

                                then writeln('Sua categoria eh Infantil B')

                                else begin

                                        if (idade>=5) or (idade<8)

                                            then writeln ('Infantil A')

                                            else writeln ('Sem categoria');

                                     end

                              end

                      end

                   end

        else writeln('Categoria Senior');

End.

3)

Program Nota;

Var

    nota: integer;

Begin

    writeln('Digite sua nota:');

    readln(nota);

    Case nota of

        0..2: writeln('Nota péssima');

        3..4: writeln('Nota ruim');

        5..6: writeln('Nota pouco ruim');

        7: writeln('Nota boa');

        8..9: writeln('Nota muito boa');

        10: writeln('Nota excelente!!');

        else writeln ('Nota inválida');

    end;

end.


Comandos de Repetição
WHILE

    Sintaxe:
        while (<condição>) do
            begin
                <comandos>;
            end
REPEAT

    Sintaxe:
        repeat
                <comandos>;
        until (<condição>);
FOR

    Sintaxe:
        for(<variável>:=<valor_inicial> to <valor_final>) do
            begin
                <comandos>;
            end
                OBS.: "TO" incrementa(+1) um-a-um e "DOWNTO" decrementa(-1) um-a-um.







 Exercícios


Tente fazer os exercícios, depois veja uma das soluções mais abaixo na página.


1) Construir um programa em Pascal que calcule a média de vários valores inteiros positivos, lidos externamente. O final da leitura acontecerá quando for lido um valor negativo.
2) Escrever um programa que leia uma quantidade desconhecida de números e conte quantos deles estão nos seguintes intervalos: (0 a 25), (26 a 50), (51 a 75), (76 a 100). A entrada de dados deve terminar quando for lido um número negativo.
3) Escrever um programa que leia um número N que indica quantos valores devem ser lidos a seguir. Para cada número lido mostre, como resultado, o valor lido e o fatorial deste valor.
4) Escreva um programa que lê dois números N1 e N2. Como resultado, calcule quantos números ímpares existem entre N1 e N2. Supor que N1 e N2 não entram no cálculo.
5) Fulano tem 1,50 metros e cresce 2 cm por ano, enquanto Ciclano tem 1,10 metros e cresce 3 cm por ano. Construa um programa que calcule e imprima quantos anos serão necessários para que Ciclano seja maior que Fulano.







Resolução


1)
PROGRAM MEDIA;

Var

    valor,cont:integer;

    soma:real;

Begin

    soma:=0;

    cont:=0;

    writeln('Digite um valor positivo(negativo pra terminar)');

    read(valor);

    while(valor>=0)do

        begin

            soma:=soma+valor;

            cont:=cont+1;

            writeln('Digite um valor positivo(neg.para terminar)');

            read(valor);

        end;

    if cont>0

        then writeln('Media=',soma/cont)

        else writeln('Nenhum valor positivo foi digitado');

End.

2)

PROGRAM INTERVALOS;

Var

    valor,interv1,interv2,interv3,interv4:integer;

Begin

    interv1:=0;

    interv2:=0;

    interv3:=0;

    interv4:=0;

    writeln('Digite um valor positivo(neg. para terminar)');

    read(valor);

    while(valor>=0)do

        begin

            if valor<=25

                then interv1:=interv1+1

                else begin

                        if valor<=50

                            then interv2:=interv2+1

                            else begin

                                    if valor<=75

                                        then interv3:=interv3+1

                                        else begin

                                                if valor<=100

                                                    then interv4:=interv4+1;

                                                end

                                    end

                        end;

            writeln('Digite um valor positivo(neg. para terminar)');

            read(valor);

        end;

    writeln('(0-25):',interv1,',(26-50):',interv2,',(51-75):',interv3,',(76-100):',interv4);

End.

3)

PROGRAM FATORIAL;

Var

    n,valor,cont,cont2,fatorial:integer;

Begin

    writeln('Quantos numeros devem ser lidos?');

    read(n);

    for cont:=1 to n do

        begin

            writeln('Digite o número');

            read(valor);

            while(valor<0) do

                begin

                    writeln('Nao exite fatorial de nr. negativo');

                    writeln('Digite o número');

                    read(valor);

                end;

            fatorial:=1;

            if valor>1

                then begin

                        for cont2:=valor downto 1 do

                            begin

                                fatorial:=fatorial*cont2;

                            end;

                        end;

            writeln(fatorial);

                      
end;

End.

4)versão otimizada

PROGRAM IMPAR;

Var

    n1,n2,cont,qto_imp,aux:integer;

Begin

    qto_imp:=0;

    writeln('Digite os nrs.');

    read(n1,n2);

    if n1>n2

        then begin

                aux:=n1;

                n1:=n2;

                n2:=aux;

                end;

    if (n1 mod 2)=1

        then n1:=n1+2

        else n1:=n1+1;

    cont:=n1;

    while(cont<n2) do

        begin

            cont:=cont+2;

            qto_imp:=qto_imp+1;

        end;

    writeln('Quantidade de impares:',qto_imp);

End.

5)

PROGRAM ALTURA;

Var

    anos,altful,altci:integer;

Begin

    altful:=150;

    altci:=110;

    anos:=0;

    while(altful>=altci)do

        begin

            altful:=altful+2;

            altci:=altci+3;

            anos:=anos+1;

        end;

    writeln('Anos necessarios:',anos);

End.


Como fazer consistência de dados?    


 Sempre quando programamos devemos estar seguros de que


os dados introduzidos em nosso software satisfaçam uma


determinada condição. Logo, consitência de dados nada


mais é do que "obrigar" o usuário a digitar, inserir


valores corretos para que atinjam um determinado


fim na execução do programa.


Por exemplo:(vamos pegar uma parte de um programa)
...

writeln(`Digite o numerador`);

readln(num);

repeat

    writeln(`Digite o denominador`);

    readln(deno);

until (deno<>0);

resultado:=num/deno;

...

    Assim nos asseguramos de que o valor de "deno" nunca será "0".

    Poderíamos usar outra maneira...

Por exemplo:

...

writeln(`Digite o numerador`);

readln(num);

deno:=0; {fizemos isto para o valor de "deno" entrar no "while", mas depois ele será mudado}

while(deno=0) do

    begin

        writeln(`Digite o denominador`);

        readln(deno);

    end;

resultado:=num/deno;

...







Exercício


Tente fazer o exercício, depois veja uma das soluções mais abaixo na página.


1) Escrever um programa que imprime "Acertou" na tela se depois de dois valores digitados pelo usuário, o primeiro deve ser igual a 5 ou o segundo deve ser igual a 10. 







Resolução


1)
Program Consistencia;

Var

    x,y:integer;

Begin

    repeat

        writeln('Digite o primeiro numero');

        readln(x);

        writeln('Digite o segundo número');

        readln(y);

    until(x<>5)or(y<>10);

    writeln('Acertou!!');

end.

  


Funções e Prodedimentos







Subprogramas


    Em PASCAL podemos definir blocos de execução internos a um programa, chamados subprogramas. Cada bloco executa uma tarefa deternimada. Isto favorece a legibilidade e manutenção do programa, além de auxiliar no domínio da complexidade quando definimos o programa, já que podemos tratar partes do problema de forma isolada.  Subprogramas têm parâmetros que podem ser de entrada, saída, ou ambos.
    Há dois tipos de subprogramas em Pascal: os procedimentos (PROCEDURES) e as funções (FUNCTIONS).


Diferenças entre Funções e Procedimentos


    1. As funções são avaliadas e retornam um valor  ao programa que as chama, além dos possíveis parâmetros de saída.
    2. Um procedimento não retorna valor nenhum, a função obrigatoriamente retorna um valor a uma determinada variável.

    3. Uma função é ativada quando é avaliada uma expressão que a contém, isto é, as funções são utilizadas da mesma forma que as funções predefinidas, como SQR, ORD, LN etc.

    4. Um procedimento é ativado através de um comando de chamada do procedimento.


Escopo


  • Variáveis Globais: São as variáveis declaradas no programa que são conhecidas em todo programa e inclusive nos subprogramas contidos nele.
  • Variáveis Locais: São as variáveis declaradas em um subprograma, que são conhecidas em todo o subprograma, mas não no programa que contém o subprograma.  Caso um subprograma contenha a definição de um outro subprograma (chamemos de "subsubprograma),  as variáveis declaradas no programa e no subprobrama serão visïveis no subsubprograma, mas o contrário não é verdadeiro. No escopo do programa  nao podemos chamar o subsubprograma, assim como não podemos acessar as variáveis do subprograma.
  • Uso de mesmos nomes: se um subprograma definir nomes de variáveis iguais ao do programa principal, ao referenciar uma variável vale a do escopo local.


Parâmetros


    No cabeçalho de um subprograma (Funções ou procedimentos) definimos que tipo de dados que serão passados como parâmetros. Há duas formas de passagem de parâmetros de um programa para um subprograma: passagem por valor ou passagem por referência.
    - Passagem por valor: o parâmetro formal comporta-se como uma variável local do subprograma, de maneira que as alterações feitas nessa variável dentro do subprograma não tenham efeito sobre o parâmetro real, que pertence ao programa que fez a chamada. Assim, o subprograma só utiliza o valor da variável para um determindao fim, tendo o poder de alterá-la só dentro do subprograma, depois da execução desse subprograma, a variável volta a ter o valor que tinha antes da execução do subprograma. 

    - Passagem por referência: o parâmetro formal comporta-se como se fosse uma variável global, e todas as alterações feitas nesta variável são feitas efetivamente no parâmetro real. Assim, a variável pode ser alterada pelo subprograma e continuar com o valor alterado.

        Sintaxe:

              Na lista de parâmetros podemos usar as seguintes formas para passagem por valor:

                          <nome da funcao ou procedimento> ( i,j,k: integer; y: real; z: boolean);

                          <nome da funcao ou procedimento> ( i: integer; j: integer; k: integer; y: real; z: boolean);

              Para parâmetros por referência deve-se utilizar "var" no cabeçalho.  Por exemplo para passagem de j.k e z por referência:

                          <nome da funcao ou procedimento> ( i:integer; VAR j,k: integer; y: real; VAR z: boolean);

                          <nome da funcao ou procedimento> ( i: integer; VAR j: integer; VAR k: integer; y: real; VAR z: boolean);

 


FUNCTIONS


    Cabeçalho:
    FUNCTION <nome da função> (<lista de parâmetros>): <tipo da função>;

    Exemplo:

    FUNCTION Maximo(a,b:integer):integer;

        "a" e "b" são parâmetros que serao passados "por valor" à função Maximo.  Após o término de da função  e os valores destes parâmetros não estarão alterados.

        Máximo é o identificador da função e da variável que deve conter o valor fornecido pela função. Máximo também é do tipo inteiro.

        Essa função é ativada através de uma expressão. Por exemplo:

        K:=Maximo(P1,P2) + Maximo (P3,P4);

        onde P1, P2, P3, P4 são variáveis globais do tipo inteiro. E "K" é uma variável do tipo inteiro que recebe a soma das duas funções.


PROCEDURES


    Cabeçalho:
    PROCEDURE <nome do procedimento>(<lista de parâmetros>);

    Exemplo:

    PROCEDURE Estatistica (VAR media: real; VAR s,m: real; ka: integer);

    Os parâmetros formais são media, s, m e ka. O parâmetro media e as variáveis s e m são do tipo real, e ka é do tipo inteiro. O parâmetro ka é o único parâmetro com passagem por valor.

    Esse procedimento pode ser chamados por comandos como:

    Estatistica(lista,desvio,sol,n); ou

    Estatistica(aula,numero1,numero2,denominador); 







  Exercícios


Tente fazer os exercícios, depois veja uma das soluções mais abaixo na página.


1) Faça um subprograma para verificar se um ano é bissexto ou não. Utilize a regra: Um ano bissexto é divisível por 4, mas não por 100, ou então se é divisível por 400.
    Exemplo: 1988 é bissexto pois é divisível por 4 e não é por 100; 2000 é bissexto porque é divisível por 400.
2) Faça uma função que recebe um número inteiro por parâmetro e retorna verdadeiro se ele for par e falso se for ímpar.
3) Faça um programa que tem duas variáveis globais inicializadas com 0: número e seu precentual (21% do valor do número). Faça um programa que lê este número, envia como parâmetros o número e seu percentual, e através de um procedimento calcula este novo percentual, e retorna alterado este percentual ao programa principal para depois imprimí-lo. 







Resolução


1)
FUNCTION bissexto (a:integer) : boolean;

Begin

    if ((a mod 4 = 0) and (a mod 100<>0)) or (a mod 400 = 0)

        then bissexto:= TRUE

        else bissexto:= FALSE;

End;

2)

FUNCTION par (numero:integer):boolean;

Begin

    if (numero mod 2)=0

        then par:= TRUE

        else par:= FALSE;

End;

3)

PROGRAM TERCEIRO;

Var

    numero,percentual:real;

PROCEDURE calcula_percentual (n1:real; VAR per1:real);

Begin

    per1:=n1*(21/100);

end;

Begin

    numero:=0;

    percentual:=0;

    writeln('Digite o número');

    readln(numero);

    calcula_percentual(numero,percentual);

    writeln(percentual);

end. 


Recursividade 







Um subprograma é recursivo quando se chama a si mesmo.


Veja no subprograma como é definida a função Fi:





<><> <> <><> <><><> <> <><> <>
Function Fi(t:integer):integer; 
Begin
 
    If t<=2 then Fi:=1
 
            else Fi := Fi(t-2)+Fi(t-1);
 
end;





    Se o valor do parâmetro inteiro t for maior que 2, a função Fi é chamada, durante a própria execução, com outros valores. A função definida serve para determinar o n-ésimo termo da sequência de Fibonacci (1,1,2,3,5,8..). Por exemplo, se t inicialmente vale 10, a função Fi deve retornar o valor 55, que é o décimo termo da sequência.
    O processo recursivo é baseado na recorrência válida para essa sequência: todo termo é igaul à soma dos dois termos anteriores. É importante que um programa recursivo deve ter obrigatoriamente uma condição que controla sua execução ou término, sob pena de produzir uma computação interminável. No exemplo, o término da execução da função ocorre quando o parâmetro t é menor ou igual a 2, como cada chamada de Fi diminui o valor de t, o término está garantido.

    Um programa recursivo é mais elegante e menor que a sua versão iterativa, além de exibir com maior clareza o processo utilizado, desde que o problema ou dados sejam naturalmente definidos através da recorrência. Por outro lado, um programa recursivo exige mais espaço de memória e é mais lento do que a versão iterativa. 


Lista de Exercícios sobre Recursividade
Prof. Fernando Luís Dotti
 
1. Dada a definição de fatorial:
                    x! = x * (x-1)!
                    0! = 1
       Faça uma função recursiva para o calculo do fatorial de números inteiros positivos.


2.  Sendo
                    x ^ n   = x * x ^ (n-1)
       onde  "^" significa elevar um número a uma potência,
       faça uma função recursiva para o c lculo da potência.  Assuma potência inteira positiva, e em uma
segunda versão considere também potências negativas.


3.  Dada a função X:
           function X(n,m: integer): integer;
           begin
               if (n=m) or (m=0)
               then x:=1;
               else x:= x(n-1,m)+x(n-1,m+1)
          end;
a)  qual o valor de x(5,3) ?
b)  quantas chamadas serao feitas na avaliação acima ?


4.  Dada a função abaixo:
           function X(N:integer): integer;
            begin
               if (n >= 0) and (n <= 2) then x:=n
                         else x := x(n-1)+x(n-2)+x(n-3)
            end;
a)  quantas chamadas serao executadas para avaliar x(6) ?
b)  indique a sequencia temporal destas chamadas.


5)  Escreva uma função não recursiva para as seguintes funções:
a)  Function f (i: integer) : integer;
                 begin
                    if i > 1
                    then f := i + f(i-1)
                    else f := 1
                 end;
b)  Function f ( i: integer) : integer;
           begin
              if i=0
            then f := 0
            else if i=1
                   then i:=1
                   else f := f(i-1)+f(i-2)
          end;


OBS.:  Alguns exercícios foram retirados do Livro: PASCAL e Técnicas de Programação, de Eber Assis Schmitz e Antônio Anibal de Souza Teles


Vetores e Matrizes 







Conjuntos Homogênios


- Unidimensionais: Vetores


- Bidimensionais: Matrizes


VETOR
Sintaxe:


<nome array>: array [dimensão] of <tipo>;


Declaração e exemplo:


Var
    vet:array[1..6] of integer;

Begin

    vet[2]:=90;

    vet[4]:=45;

    vet[5]:=30;

end.


Representação:
 


<><> <> <><> <><><> <><><> <><><> <><><> <><><> <><><> <> <><> <>

90

45
30


Exemplo 2:


Inclusão de 5 valores inteiros em um vetor, e depois disto emitir a soma dos mesmos.





<><> <> <><> <><><> <> <><> <>
program vet_soma; 
var
 
   v: array [1..5] of integer;
 
   soma,cont:integer;
 
Begin
 
     soma:=0;
 
     writeln('digite os 5 valores');
 
     for cont:=1 to 5 do
 
         readln(v[cont]);
 
     for cont:=1 to 5 do
 
         soma:=soma + v[cont];
 
     writeln('Soma=',soma);
 
end.


MATRIZ
Sintaxe:


<nome array>: array [dimensões] of <tipo>;


Declaração e exemplo:


Var
    mat:array[1..5,1..3] of integer; {matriz 19x3}

Begin

    mat[1,2]:=10;

    mat[3,1]:=11;

    mat[5,3]:=12;

    mat[2,2]:=78;

end.


Representação:


mat[linha,coluna]


<><> <> <><> <><><> <><><> <><><> <> <><> <> <><> <><><> <><><> <><><> <> <><> <> <><> <><><> <><><> <><><> <> <><> <> <><> <><><> <><><> <><><> <> <><> <> <><> <><><> <><><> <><><> <> <><> <>

10


78

11







12


Exemplo:


Ler 6 valores em uma matriz de 2 linhas e 3 colunas e depois disto emitir a soma dos valores.
 


<><> <> <><> <><><> <> <><> <>
program matriz; 
var
 
   m:array[1..2,1..3] of integer;
 
   soma,contl,contc:integer;
 
Begin
 
     writeln('Digite os 6 valores');
 
     soma:=0;
 
     for contl:=1 to 2 do
 
         for contc:=1 to 3 do
 
             readln(m[contl,contc]);
 
     for contl:=1 to 2 do
 
         for contc:=1 to 3 do
 
             soma:=soma + m[contl,contc];
 
     writeln('Soma=',soma);
 
end.
 
 







  Exercícios


Tente fazer os exercícios, depois veja uma das soluções mais abaixo na página.


1) Fazer um programa que tem dois vetores do mesmo tamanho (6). O usuário fornecerá os dados do primeiro, e depois deverá ser armazenado e exibido o valor do segundo vetor que é o valor do primeiro vetor vezes a posição do elemento. Por exemplo:
vet1:


<><> <> <><> <><><> <><><> <><><> <><><> <><><> <><><> <> <><> <>
80
28
35
44
35
16


vet2:


<><> <> <><> <><><> <><><> <><><> <><><> <><><> <><><> <> <><> <>
80x1
28x2
35x3
44x4
35x5
16x6


 
2) Leia 4 números, coloque-os em um vetor e mostre-os na ordem inversa de sua leitura.
3) Fazer um programa que lê 16 valores e armazene numa matriz. O programa deve mostrar esses números em ordem, levando primeiro em consideraçã a coluna e depois a linha. Logo, deve-se mostrar primeiro toda a primeira coluna e depois a segunda coluna. O programa não deve exibir os números que estão na diagonal principal da matriz.


DESAFIO I:  Leia 20 números, deposite-os em um vetor e mostre os números pares lidos, e após, os números que estão nas posições pares.
DESAFIO II: Faça um programa que execute a leitura de números inteiros para completar uma matriz qualquer, sendo que o número de linhas e o número de colunas da mesma, serão parâmetros por valor, enquanto que a matriz será um parâmetro por referência. 







Resolução


1)
program ex1;

var

   vet,newvet:array[1..6] of integer;

   pos:integer;

Begin

     writeln('Digite os valores');

     for pos:=1 to 6 do

         readln(vet[pos]);

     for pos:=1 to 6 do

         begin

              newvet[pos]:=vet[pos]*pos;

              writeln('Na posicao ',pos,'teremos ',newvet[pos]);

              end;

end.

2)

program ex2;

var

   vet:array[1..4] of integer;

   pos:integer;

Begin

     writeln('Digite os valores');

     for pos:=1 to 4 do

         readln(vet[pos]);

     writeln('Ordem inversa:');

     for pos:=4 downto 1 do

         writeln(vet[pos]);

end.

3)

program ex3;

var

   vet:array[1..4,1..4] of integer;

   posl,posc:integer;

Begin

     writeln('Digite os valores');

     for posl:=1 to 4 do

         for posc:=1 to 4 do

             readln(vet[posl,posc]);

     for posc:=1 to 4 do

         for posl:=1 to 4 do

             if posl<>posc

                then writeln(vet[posl,posc]);

end.