Relembrando tópicos importantes OPERADORES OPERADORES LÓGICOS OPERADOR FUNÇÃO AND OR NOT É verdadeira se todas as condições forem verdadeiras. É verdadeira se pelo menos uma condição for verdadeira. Inverte o valor da expressão ou condição Esses operadores servem para combinar resultados e verificar se os valores de uma determinada expressão são verdadeiros ou falsos. Observe a questão abaixo: Escreva um algoritmo que receba um determinado valor e informe se ele é divisível por 10, ou é divisível por 5, ou é divisível por 2 ou senão por nenhum destes. Program divisor; Var N: integer; Observe que o operador lógico Begin ‘or’ foi utilizado para verificar Writeln(‘Digite o numero:’); se o numero recebido era divisível por pelo menos um Readln(N); dos valores (10, 5 ou 2). IF (N mod 10 = 0) or (N mod 5 = 0) or (N mod 2 = 0) then Begin Writeln(‘O numero é divisível por 10, 5 ou 2’); End FRISANDO: Não se usa o ‘ ; ‘ antes do else. Else Begin Writeln(‘O numero nao é divisível por 10,5 ou 2’); End; End. RELEMBRANDO: Verifique que a questão também utiliza de outro artifício para avaliar se o número recebido é ou não divisível pelos valores 10, 5 ou 2. Através do comando “MOD”. Além desse comando que analisa se o resto da divisão é 0, podemos também analisar o quociente de uma divisão através, do comando “DIV”. MOD 10 2 0 5 DIV Um exemplo de algoritmo, no qual esses dois comandos serão super úteis, é a transformação de valores em números Binários. Observe como fazemos isso: Program bi; Var quo, rest, x: integer; result: string; Begin result:=’ ‘; Writeln(‘Digite um número:’); Readln(x); While (X <> 0) do //pára quando o {quociente for igual a ‘0’} Begin quo:= X div 2; //calcula o quociente rest:=X mod 2; //calcula o resto X:=quo; {guarda o valor do quociente em ‘X’ para que ele possa ser dividido novamente} If (rest = 0) then result:= ‘0’ + result Else result:= ‘1’ + result; End; Writeln(result); End. 18 2 0 9 2 1 4 2 0 2 2 0 1 2 1 0 18 em Binário é: 10010 DIV MOD Como os resultados encontrados são strings e necessitamos que eles sejam organizados em ordem inversa, a melhor forma é concatená-los, ou seja, por um ao lado do outro. TIPOS DE VARIÁVEIS: Quando criamos um algoritmos utilizamos uma sub-área na qual denominamos de VAR, nela fazemos a declaração de variáveis que serão utilizadas no decorrer da execução de um programa, bem como, também o seu tipo. Vejamos alguns tipos: VARIÁVEIS INTEGER REAL STRING CHAR BOOLEAN Declara valores inteiros; Declara valores decimais; São considerados tipos caracteres: letras, números e símbolos especiais. São representadas entre apóstrofos (‘ ‘). É usado para strings de apenas um caractere. Exemplo: sexo: char; onde será utilizado: F ou M. São dados com valores lógicos true (verdadeiro) ou false (falso). ESTRUTURAS DE REPETIÇÃO Instrução for... to/downto... do: Executa repetitivamente um comando enquanto é atribuída uma série de valores a uma variável de controle (contador do FOR). Faça um programa que imprima na tela as tabuadas de 1 a 10. Program tabuada; Var N, cont, res: integer; Begin For N:=1 to 10 do Begin For cont:=1 to 10 do Begin Res:=N*cont; Writeln(N, ‘*’, cont, ‘=’ , res, ‘ ‘); End; Readln; //aguarda End; End. Utilizando duas estruturas de repetição for, conseguimos fazer com que N se torne fixo até que cont vai se modificando até o valor 10. Instrução while...do: Efetua um teste lógico no início de um loop, verificando se é permitido a execução dos trechos nela contido. Faça um programa que receba dois números, calcule e imprima um elevado ao outro. Program potencia; Var B, E, i, result: integer; Begin Writeln(‘Digite o valor da base:’); Readln(B); Writeln(‘Digite o valor do expoente:’) Readln(E); i:=1; result:=1; While (i < = E) do Begin result:=B*result; i:=i+1; End; Writeln(‘O resultado é:’, result); End. Nesse caso o while através da condição consegue controlar até onde a base será multiplicada por ela mesma, já que a variável ‘i’ esta aumentando seu valor a cada interação. Instrução repeat...until: Essa instrução efetuará a execução de um conjunto de instruções pelo menos uma vez antes de verificar a validade da condição estabelecida, assim como o while ela também efetua um teste lógico só que agora no final de um looping. É importante destacar que a repetição será executada até que a condição se torne VERDADEIRA. Leia uma variável X inúmeras vezes (parar quando o valor digitado for <=0). Para cada valor lido mostre a sequência de 1 até o valor lido. Program qtrepeat; Var X, i: integer; Begin Repeat Writeln(‘Digite o valor de X:’); Readln(X); For i:=1 to X do Begin Write(i, ‘ ‘); Writeln; Until (X <=0); End. DICA: O repeat geralmente é muito utilizado quando se quer perguntar ao usuário se ele deseja continuar efetuando a execução do programa. LENGHT É utilizada para determinar o número de caracteres x, por exemplo, quantos caracteres existem em uma palavra ou frase. Vejamos alguns exemplos: Crie um programa que receba uma frase e conte e imprima o número de caracteres nela contido (ignore os espaços). Program qtfrase; Var X, frase: string; i, cont: integer; Quando uma frase ou palavra Begin é atribuída em Lenght, ele a Cont:=0; transforma em um vetor de Writeln(‘Digite uma frase:’); caracteres dando-nos assim, a Readln(frase); possibilidade de contá-los e X:=length(frase); manipulá-los. For i:=1 to X do Begin cont:=cont+1; End; Writeln(‘A frase tem: ’, cont, ‘ caracteres.’); End. VETORES E MATRIZES Ao utilizarmos variáveis, podemos armazenar apenas um valor por vez, utilizando vetores e matrizes conseguimos agrupar várias informações de uma mesma variável, no entanto, elas só podem ser de um tipo (string, real, integer...). Vejamos: Faça um programa que leia um vetor N[20]. Troque a seguir, o 1º elemento com o último, o 2º elemento com o penúltimo, etc..., até trocar o 10º com o 11º. Mostre o vetor modificado. Program troca; Var N: array [1..20] of integer; j, i aux: integer; Begin i:=0; j:=20; For i:=1 to 20 do Begin Writeln(‘Digite o número:’); Readln(N[i]); End; while i <> j do{faz com que a troca pare no momento em que os índices se tornam iguais.} Begin Aux:=N[i]; Observe essa lógica, onde está ocorrendo a troca dos N[i]:=N[j]; elementos. É utilizado uma N[j]:=aux; variável auxiliar para que i:=i+1; nenhum dos valores se perca. j:=J-1; End; For i:=1 to 20 do Writeln(N[i], ‘ ‘ ); End. Escreva um algoritmo que leia uma matriz M(5,5). Em seguida calcule as somas: a. Da linha 4 de M; b. Da coluna 2 de M; c. Da diagonal principal; d. Da diagonal secundária; e. De todos os elementos da matriz M; Exibir todas as somas da matriz. Program matriz; Var M: array [1..5, 1..5] of integer; l, c, ST, Scol2, Slin4, Sdp, Sds: integer; Begin Randomize; ST:=0; Scol2:=0; Slin:=0; Sdp:=0; Sds:=0; ATENÇÃO: A matriz será For l:=1 to 5 do preenchida com os valores entre 0 e 29. Begin For c:=1 to 5 do Begin M[l,c]:= random(30);{preenchendo a matriz com valores aleatórios} End; End; For l:=1 to 5 do Begin For c:=1 to 5 do Begin ST:=M[l,c]+ST; Scol2:=M[l,2]+Scol2; Slin4:=M[4,c]+Slin4; If (l = c) then Regra da diagonal Sdp:=M[l,c]+Sdp; secundária: If (l+c = 5+1) then Quando a linha + a coluna é Sds:=M[l,c]+Sds; igual à ordem da matriz +1. End; End; For l:=1 to 5 do begin For c:=1 to 5 do begin Write (M[l,c], ‘ ‘ ); End; Writeln; End; Writeln; Writeln(ST); Writeln(Scol2); Writeln(Slin4); Writeln(Sdp); Writeln(Sds); End. REGISTRO Faça um registro que receba do usuário uma lista de N nomes e idades de pessoas, onde N também é fornecido pelo usuário, e mostrar o nome e a idade da pessoa mais idosa e da pessoa mais jovem. // ORIGINAL// Foi necessário fazer modificações nessa questão devido a erros de lógica, então estipularemos um valor para “N”, N:=5; Program qt1reg; type pessoa=record nome:string; idade:integer; end; var grupo:array[1..5] of pessoa; i,posi,posi2,maior,menor:integer; Begin posi:=0; posi2:=0; for i:=1 to 5 do begin writeln('Digite o nome:'); readln(grupo[i].nome); writeln('Digite a idade:'); readln(grupo[i].idade); end; maior:=0;//será substituído pelo maior valor// menor:=grupo[1].idade;//será substituído pelo menor valor// for i:=2 to 5 do{inicia a partir do índice 2, pois será comparado com o menor que já contém primeiro elemento} begin if menor> grupo[i].idade then begin menor:=grupo[i].idade; posi:=i;//guarda a posição do menor valor// end; if maior<grupo[i].idade then begin maior:=grupo[i].idade; posi2:=i;//guarda a posição do maior valor// end; end; writeln( grupo[posi2].nome, ' tem idade: ', maior, ' MAIS IDOSO(A)'); writeln( grupo[posi].nome, ' tem idade: ', menor, ' MAIS JOVEM' ); End. End. ORDENAÇÃO (QUESTÃO EXTRA) – PARA OBSERVAÇÃO: Program Ordenando_vetor_Jeanderval; var {local de declaração de variáveis} a:array[1..20] of integer; b:array[1..20] of integer; aux: integer; x,i,linha: integer; v:boolean; Begin linha:=0; v:=false; writeln('vetor b'); writeln; for i:=1 to 20 do begin a[i]:=random(1000); {gera números aleatórios} end; for i:=1 to 20 do begin write (' ',a[i]); {exibindo dados do vetor a não ordenado} end; writeln;//serve apenas para pular um linha for x:=1 to 20 do begin aux:=a[x]; for i:=(x+1) to 20 do begin if aux > a[i] then begin v:=true; linha:=i; aux:=a[i]; end; end; //Se houver erro(s) nessa lógica, comunique através do e-mail: if v then //[email protected] begin //algoritmo disponível em: a[linha]:=a[x]; //http://www.experimentall.anoivanet.com.br a[x]:=aux; v:=false; end; b[x]:=aux; end; writeln; writeln('vetor b'); for i:=1 to 20 do begin write (' ',b[i]); {exibindo dados do vetor b ordenado} end; writeln; writeln('vetor a'); for i:=1 to 20 do begin write (' ',a[i]); {exibindo dados do vetor a ordenado} end; End. Esta questão tem autoria de Jeanderval e encontra-se disponível no site: http://www.experimentall.anoivanet.com.br/control/Controller.php?business=LinkLogic& url=algoritmo.php Olá pessoal, fiz esse pequeno manual por precaução, como vamos fazer uma prova final então cairão todos os assuntos já abordados, achei importante relembrarmos algumas questões anteriores. Gostaria que não levassem em consideração os erros de concordância, caso encontrem algum equivoco vocês terão todo o direito pra fazer qualquer tipo de observação, fiz tudo na pressa, porém com a melhor das intenções. Desejo boa sorte a todos! Atenciosamente, Jackeline Barbosa Moreira.