Mudanças entre as edições de "PR1022804 2023 1 AULA06"
Linha 602: | Linha 602: | ||
--> | --> | ||
+ | =Lista de Exercícios para AT1= | ||
+ | |||
+ | ;INTRODUÇÃO: A lista de exercícios para Avaliação Teórica 1 (AT1) está dividida em quatro partes: Algoritmos, Operadores Relacionais e Lógicos, Estruturas de decisão e repetição e Introdução a linguagem C. Lembrando que em cada aula existe vários exercícios propostos. Esses exercícios servirão de base para nossa avaliação online. Não há necessidade de entregar os exercícios e todos os são feitos com base no material de aula da wiki. | ||
+ | |||
+ | ==Parte I - Algoritmos== | ||
+ | |||
+ | [1] O que é um algoritmo e para que serve? | ||
+ | |||
+ | [2] Qual a diferença entre pseudocódigo e fluxograma? | ||
+ | |||
+ | [3] Cite as seis etapas para a construção de um algoritmo. | ||
+ | |||
+ | [4] Quais os pontos fortes e fracos na construção de fluxogramas? | ||
+ | |||
+ | [5] Para que serve um "teste de mesa"? | ||
+ | |||
+ | [6] Qual a diferença entre constantes e variáveis? | ||
+ | |||
+ | [7] O que são as expressões e para que servem? | ||
+ | |||
+ | [8] Explique os operadores: %, ++ e --. | ||
+ | |||
+ | [9] Faça um algoritmo na forma de pseudocódigo que encontre o ponto médio de uma reta dados os pontos A e B dessa reta. | ||
+ | |||
+ | [10] Faça um algoritmo na forma de fluxograma que encontre o ponto médio da metade final de uma reta dados os pontos A e B dessa reta, ou seja, entre M e B, onde M é o ponto médio. | ||
+ | |||
+ | ==Parte II - Operadores Lógicos e Relacionais== | ||
+ | |||
+ | [11] Analise as expressões abaixo e coloque como resultado: 0 para falso e 1 para verdadeiro: | ||
+ | |||
+ | ;Considerando: A=3, B=-1 e C=2 | ||
+ | |||
+ | {| border="1" cellpadding="5" cellspacing="0" | ||
+ | ! style="background:#808080; color:white;" | Expressão | ||
+ | ! style="background:#808080; color:white;" | Resultado | ||
+ | |- | ||
+ | !style="text-align: center;" |A>B | ||
+ | | | ||
+ | |- | ||
+ | !style="text-align: center;" |C>=A | ||
+ | | | ||
+ | |- | ||
+ | !style="text-align: center;" |B<(C-A) | ||
+ | | | ||
+ | |- | ||
+ | !style="text-align: center;" |C<=A | ||
+ | | | ||
+ | |- | ||
+ | !style="text-align: center;" |A==(C+B) | ||
+ | | | ||
+ | |- | ||
+ | !style="text-align: center;" |A!=3 | ||
+ | | | ||
+ | |- | ||
+ | !style="text-align: center;" |B=1 | ||
+ | | | ||
+ | |} | ||
+ | |||
+ | [12] Analise as expressões abaixo e coloque como resultado: 0 para falso e 1 para verdadeiro: | ||
+ | |||
+ | ;Considerando: A=-1, B=1, C=0 e D=2 | ||
+ | |||
+ | {| border="1" cellpadding="5" cellspacing="0" | ||
+ | ! style="background:#808080; color:white;" | Expressão | ||
+ | ! style="background:#808080; color:white;" | Resultado | ||
+ | |- | ||
+ | !style="text-align: center;" |(A>B) && (C>D) | ||
+ | | | ||
+ | |- | ||
+ | !style="text-align: center;" |(A<B) && !(C>D) | ||
+ | | | ||
+ | |- | ||
+ | !style="text-align: center;" |(A<=B) || (C<1) | ||
+ | | | ||
+ | |- | ||
+ | !style="text-align: center;" |A>=B || ((C>=D) && (D<=A)) | ||
+ | | | ||
+ | |- | ||
+ | !style="text-align: center;" |!A==B) && !(C!=D) | ||
+ | | | ||
+ | |- | ||
+ | !style="text-align: center;" |((A==B) || (B<30)) && (C>=D) | ||
+ | | | ||
+ | |- | ||
+ | !style="text-align: center;" |(A>B>C>D) |& (B<C<A<D) | ||
+ | | | ||
+ | |} | ||
+ | |||
+ | ==Parte III - Estruturas de decisão e repetição== | ||
+ | |||
+ | [13] Faça um algoritmo na forma de fluxograma utilizando estrutura de repetição que imprima os 100 primeiros números pares. | ||
+ | |||
+ | [14] Faça um algoritmo na forma de pseudocódigo utilizando estrutura de repetição que imprima todos os anos bissextos a partir de 1900 até 2030. | ||
+ | |||
+ | ==Parte IV - Introdução a linguagem C== | ||
+ | |||
+ | [15] Descreva o processo de compilação de um programa em linguagem C. | ||
+ | |||
+ | [16] O que é código fonte, código objeto e arquivo executável? | ||
+ | |||
+ | [17] Qual a diferença entre variáveis inteiras e reais? | ||
+ | |||
+ | [18] Pra que servem as funções printf() e scanf()? | ||
+ | |||
+ | [20] Pra que servem e onde são utilizados os símbolos abaixo: | ||
+ | |||
+ | {| border="1" cellpadding="5" cellspacing="0" | ||
+ | ! style="background:#808080; color:white;" | Código | ||
+ | ! style="background:#808080; color:white;" | Significado | ||
+ | |- | ||
+ | ! style="text-align: center;" | %d | ||
+ | | | ||
+ | |- | ||
+ | ! style="text-align: center;" | %f | ||
+ | | | ||
+ | |- | ||
+ | ! style="text-align: center;" | %c | ||
+ | | | ||
+ | |- | ||
+ | ! style="text-align: center;" | %% | ||
+ | | | ||
+ | |} | ||
+ | |||
+ | [21] Qual o resultado de para as expressões abaixo? | ||
+ | |||
+ | ;Considerando: S, A=1,B=3,C=7: Inteiros; | ||
+ | |||
+ | |||
+ | |||
+ | {| border="1" cellpadding="5" cellspacing="0" | ||
+ | ! style="background:#808080; color:white;" | Expressão | ||
+ | ! style="background:#808080; color:white;" | Resultado de S | ||
+ | |- | ||
+ | ! style="text-align: center;" | S=A+B-(C-10) | ||
+ | | | ||
+ | |- | ||
+ | ! style="text-align: center;" | S=C/B*(C-A) | ||
+ | | | ||
+ | |- | ||
+ | ! style="text-align: center;" | S=A-- | ||
+ | | | ||
+ | |- | ||
+ | ! style="text-align: center;" | S=B++ | ||
+ | | | ||
+ | |- | ||
+ | ! style="text-align: center;" | S=C/B/A | ||
+ | | | ||
+ | |- | ||
+ | ! style="text-align: center;" | S=(C%B)-11%3 | ||
+ | | | ||
+ | |} | ||
----- | ----- |
Edição das 15h49min de 16 de março de 2023
Estruturas de Repetição
- OBJETIVOS
- O aluno será capaz de:
- Implementar estruturas de repetição em linguagem C;
- Criar fluxogramas ou pseudo-código na forma de estruturas em linguagem C;
- Implementar loops infinitos; e
- Utilizar o comando break associado ao comando for, do, while.
- METODOLOGIA
- A aula será expositiva e dialogada, utilizando apresentação de texto base na Internet, onde serão mostrados exemplos testados programas no microcomputador do laboratório de informática.
- INTRODUÇÃO
- Dentro da lógica de programação é uma estrutura que permite executar mais de uma vez o mesmo comando ou conjunto de comandos, de acordo com uma condição ou com um contador. Na linguagem C existem 4 estruturas/comandos que permitem implementar loops ou repetições de blocos de código:
- while()
- do – while()
- for()
- goto – label
- Nota
- Observe que repetir o código significa voltar a executá-lo, normalmente sobre o controle de uma expressão lógica.
Comando while(): teste da repetição no começo
- O comando while tem a seguinte forma geral
while (condição) declaração;
ou
while (condição) { declaração1; declaração2; }
Podemos ver que a estrutura while testa uma condição. Se esta for verdadeira
a declaração é executada e faz-se o teste novamente, e assim por diante.
O comando while permite implementar loops com controle no início:
#include <stdio.h>
void main()
{
int contador;
contador=0;
while (contador<5) {
printf("valor do contador = %d\n", contador);
contador=contador+1;
}
}
Variação do exemplo anterior:
#include <stdio.h>
void main()
{
int contador;
contador=0;
while (contador<5) {
printf("valor da expressão = contador < 5 é %d\n", contador<5);
printf("valor do contador = %d\n", contador);
contador=contador+1;
}
printf("NO FINAL a expressão contador < 5 é %d\n", contador<5);
}
Vamos ver a correspondência do comando while com um fluxograma:
NOTE que no exemplo anterior o contador inicialmente DEVE conter um valor válido.
Comando do – while(): controle do loop no final
- O comando do while tem a seguinte forma geral
do { declaração1; declaração2; } while (condição);
Nesta variação o comando do while() permite a repetição de uma ou
mais instruções, com controle do loop no final.
Isto permite que o bloco seja executado pelo menos uma vez.
#include <stdio.h>
void main()
{
int contador;
contador=0;
do {
printf("valor do contador = %d\n", contador);
contador=contador+1;
} while (contador<5);
}
Comando for()
O comando for() permite uma forma mais elaborada de loop, com controle no início do bloco de repetição.
- Sua forma geral é
for(inicialização;condição;incremento) declaração;
- ou
for(inicialização;condição;incremento){ declaração1; declaração2; }
#include <stdio.h>
void main()
{
int i;
for (i=0;i<10;i=i+1)
printf("i =%d\n",i);
}
Comando goto – label
O comando goto é um dos mais antigos da programação. A ideia é comandar um salto para um determinado ponto específico do programa marcado por um rótulo (LABEL). Para utilizá-lo deve-se, portanto, marcar o ponto para onde será feito o salto usando um LABEL.
Exemplo:
#include <stdio.h>
void main()
{
int i;
i=0;
PONTO1:
printf("Laço de número %d\n", i);
i++;
if (i<10)
goto PONTO1;
}
- Devido a ser uma instrução "desestruturante", em geral NÃO se recomenda o uso deste comando.
Em alguns casos de tratamento de erro pode ser interessante o uso do goto.
Leia um pouco mais sobre o goto aqui.
Aninhamento de loops
#include <stdio.h>
void main()
{
int i,j;
for (i=0;i<3;i++) {
for (j=0;j<4;j++) {
printf("valor de j = %d\n", j);
}
printf("valor de i = %d\n", i);
}
}
Loop Infinito
É possível implementar loops infinitos com qualquer uma das instruções acima.
Exemplo com comando for:
void main()
{
for(;;) {
/* Este bloco se executará infinitamente */
}
}
ou com o comando while:
void main()
{
while(1) {
/* Este bloco se executará infinitamente */
}
}
- EXEMPLO
- Usando o comando for aninhado, construa um programa que implemente a figura abaixo.
x xx xxx xxxx xxxxx xxxxxx xxxxxxx xxxxxxxx xxxxxxxxx xxxxxxxxxx xxxxxxxxxxx xxxxxxxxxxxx xxxxxxxxxxxxx
#include <stdio.h>
void main()
{
int i,j;
printf("\n"); /* deixa uma linha em branco */
for (i=0;i<13;i++) {
for (j=0;j<=i;j++) {
printf("*");
}
printf("\n"); /* deixa uma linha em branco */
}
}
Uso de BREAK para sair de loops
Em exercícios anteriores, a finalização de um loop normalmente se dá pela expressão de controle de loop associado a instrução usada.
É possível sair de um loop na "força bruta" usando a instrução break:
#include <stdio.h>
void main()
{
int i,j;
for (i=0;i<10;i++) {
if (i==5)
break;
}
printf("valor de i=%d\n", i);
}
Note que o break sempre sai do loop mais próximo a ele. Muitas vezes rodamos um looping, através de um laço (como FOR ou WHILE), para encontrar alguma informação. O break serve para terminar o laço a qualquer momento sem esperar que o loop termine.
#include <stdio.h>
void main()
{
int i,j;
for (i=0;i<3;i++) {
for (j=0;j<4;j++) {
if (j==1) {
break;
}
printf("valor de j = %d\n", j);
}
if (i==2)
break;
printf("valor de i = %d\n", i);
}
}
- DESAFIO 1
Encontre o primeiro número, entre 1 e 1 milhão que é divisível por 11, 13 e 17. Isso significa dizer que temos que encontrar o menor número que, dividido por 11, 13 e 17, dê resto da divisão nulo (igual a zero).
Solução |
---|
#include <stdio.h>
int main()
{
int count,
numero=0;
for(count=1 ; count<=1000000 ; count++)
{
if(numero == 0)
if((count%11==0) && (count%13==0) && (count%17==0))
{
numero=count;
break;
}
}
printf("O numero e: %d\n", numero);
}
|
Uso do CONTINUE para prosseguir no início do loop
#include <stdio.h>
void main()
{
int i,j;
for (i=0;i<3;i++) {
if (i==1) {
continue;
}
printf("valor de i = %d\n", i);
for (j=0;j<4;j++) {
if (j==1) {
continue;
}
printf("valor de j = %d\n", j);
}
}
}
O comando CONTINUE, quando inserido dentro de algum laço, faz com que a iteração atual seja cancelada, e o laço prossegue na próxima iteração. Ou seja, o BREAK faz todo o laço parar enquanto o CONTINUE, faz somente com que a iteração pule pra próxima.
- DESAFIO 2
Faça um programa em C que some todos os números, de 1 até 100, exceto os múltiplos de 3. Faça o laço for percorrer de 1 até 100 e teste se cada número deixa resto 0 quando dividido por 3. Caso deixe, é porque é múltiplo de 3 e não devemos somar. Para que isso ocorra, simplesmente pulamos essa iteração. Porém, se não for múltiplo de 3, é porque a iteração não foi pulada, ela continua, e vamos somar esse número na soma total.
Solução |
---|
#include <stdio.h>
void main()
{
int count,
soma;
for(count=1, soma=0 ; count<=100 ; count++)
{
if( count%3 ==0)
continue;
soma = soma + count;
}
printf("Soma %d", soma);
}
|
Lista de Exercícios para AT1
- INTRODUÇÃO
- A lista de exercícios para Avaliação Teórica 1 (AT1) está dividida em quatro partes: Algoritmos, Operadores Relacionais e Lógicos, Estruturas de decisão e repetição e Introdução a linguagem C. Lembrando que em cada aula existe vários exercícios propostos. Esses exercícios servirão de base para nossa avaliação online. Não há necessidade de entregar os exercícios e todos os são feitos com base no material de aula da wiki.
Parte I - Algoritmos
[1] O que é um algoritmo e para que serve?
[2] Qual a diferença entre pseudocódigo e fluxograma?
[3] Cite as seis etapas para a construção de um algoritmo.
[4] Quais os pontos fortes e fracos na construção de fluxogramas?
[5] Para que serve um "teste de mesa"?
[6] Qual a diferença entre constantes e variáveis?
[7] O que são as expressões e para que servem?
[8] Explique os operadores: %, ++ e --.
[9] Faça um algoritmo na forma de pseudocódigo que encontre o ponto médio de uma reta dados os pontos A e B dessa reta.
[10] Faça um algoritmo na forma de fluxograma que encontre o ponto médio da metade final de uma reta dados os pontos A e B dessa reta, ou seja, entre M e B, onde M é o ponto médio.
Parte II - Operadores Lógicos e Relacionais
[11] Analise as expressões abaixo e coloque como resultado: 0 para falso e 1 para verdadeiro:
- Considerando
- A=3, B=-1 e C=2
Expressão | Resultado |
---|---|
A>B | |
C>=A | |
B<(C-A) | |
C<=A | |
A==(C+B) | |
A!=3 | |
B=1 |
[12] Analise as expressões abaixo e coloque como resultado: 0 para falso e 1 para verdadeiro:
- Considerando
- A=-1, B=1, C=0 e D=2
Expressão | Resultado |
---|---|
(A>B) && (C>D) | |
(A<B) && !(C>D) | |
(A<=B) || (C<1) | |
A>=B || ((C>=D) && (D<=A)) | |
!A==B) && !(C!=D) | |
((A==B) || (B<30)) && (C>=D) | |
(A>B>C>D) |& (B<C<A<D) |
Parte III - Estruturas de decisão e repetição
[13] Faça um algoritmo na forma de fluxograma utilizando estrutura de repetição que imprima os 100 primeiros números pares.
[14] Faça um algoritmo na forma de pseudocódigo utilizando estrutura de repetição que imprima todos os anos bissextos a partir de 1900 até 2030.
Parte IV - Introdução a linguagem C
[15] Descreva o processo de compilação de um programa em linguagem C.
[16] O que é código fonte, código objeto e arquivo executável?
[17] Qual a diferença entre variáveis inteiras e reais?
[18] Pra que servem as funções printf() e scanf()?
[20] Pra que servem e onde são utilizados os símbolos abaixo:
Código | Significado |
---|---|
%d | |
%f | |
%c | |
%% |
[21] Qual o resultado de para as expressões abaixo?
- Considerando
- S, A=1,B=3,C=7: Inteiros;
Expressão | Resultado de S |
---|---|
S=A+B-(C-10) | |
S=C/B*(C-A) | |
S=A-- | |
S=B++ | |
S=C/B/A | |
S=(C%B)-11%3 |