• Nenhum resultado encontrado

Lab1

N/A
N/A
Protected

Academic year: 2021

Share "Lab1"

Copied!
19
0
0

Texto

(1)

UNIFEI – Universidade Federal de Itajubá Campus Avançado de Itabira

Laboratório de Lógica de Programação – ECOI02 Profa. Claudia A. Izeki

Laboratório 1 – Estudo Dirigido de Conceitos Básicos até

Estruturas Condicionais

Objetivos da atividade:

 Familiarizar-se com os erros básicos de compilação do ambiente de programação CodeBlocks;

 Entender, aplicar e avaliar os seguintes conceitos: o Variáveis, tipos de dados e constantes;

o Comandos de entrada e de saída: cin e cout; o Comandos de quebra de linha: endl e ‘\n’;

o Operadores de atribuição, aritméticos, lógicos e relacionais e suas precedências;

o Estruturas condicionais simples (if), compostas (if-else), encadeamento e aninhamento dessas estruturas.

Procedimentos da atividade:

Você deverá resolver todos os 25 exercícios desta lista em seu caderno, com sua própria caligrafia;

Utilize o material de referência da disciplina: http://bac004.wikidot.com. Observação: sempre traga esse material na forma impressa ou digital para não depender do funcionamento de Internet no laboratório;

Quando tiver alguma dúvida, verifique-a com seu colega ou acesse o material de aula. Se a dúvida persistir, contate o professor. Caso a dúvida ocorra fora do horário de aula, favor enviar um e-mail para [email protected].

 A nota desta lista de exercícios, juntamente com outras, valerá 20% da nota da prática de ECOI02;

 Você terá uma semana para resolver esta lista, que deverá ser apresentado no início da aula do dia 17 de março de 2015, para ser vistado;

 Ao terminar os exercícios você deverá se retirar do laboratório;

 Não é permitida a realização de atividades que não as relacionadas à disciplina, como o acesso a redes sociais (Facebook), execução de trabalhos de outras disciplinas, entre outras.

1) Quais valores das variáveis x, y e z do programa a seguir serão impressos na tela? Por quê? Digite o código do programa e escreva a resposta em seu caderno.

(2)

2) Altere o programa anterior para que as saídas das variáveis x, y e z sejam, respectivamente, 0, -1 e 2. Escreva em seu caderno apenas o trecho das atribuições, não sendo necessário escrever o programa inteiro.

3) Para que servem os comandos endl no programa do Exercício 1? Qual caracter especial você pode utilizar que possui o mesmo efeito do comando endl? Reescreva as linhas 8 e 9 do programa do Exercício 1 utilizando esse caracter. 4) Verifique a saída do seguinte programa. O que o comando sizeof() faz?

Compare o resultado com a tabela da Seção 2.2 (Tipos de Dados) da wikidot.

5) Qual a saída do programa a seguir? Por que na última linha impressão ocorreu um valor negativo? Dica: verifique a tabela da Seção 2.2 (Tipos de Dados) da wikidot.

(3)

6) Digite exatamente o seguinte código e compile-o. Anote a mensagem de erro que o compilador apresenta. Interprete essa mensagem e corrija o programa. Pesquise sobre o termo “case sensitive” e o que ele tem a ver com o erro detectado.

7) Quais são as regras para nomes de variáveis em C++? Quais dos seguintes nomes não são válidos para variáveis em C++? Justifique sua resposta. Faça um programa para verificar essas variáveis, anotando as mensagens de erros.

a) Num1 b) Num 5 c) 2num d) num@1 e) #op f) float g) media

(4)

8) Marque com um X as instruções que devem ter um ponto-e-vírgula no final: ( ) cout. Ex: cout << “Entre com um valor numérico: ” ( ) Declaração de variáveis. Ex: int a, b, c

( ) cin. Ex: cin >> a

( ) No começo da definição da função main. Ex: int main()

( ) Em cálculos aritméticos com atribuição à variáveis. Ex: a = b + c ( ) Na inclusão de bibliotecas. Ex: #include<iostream>

( ) return 0

9) Escreva a mensagem de erro apresentada pelo compilador quando se esquece algum ponto-e-vírgula obrigatório de algum comando.

10) Um problema muito comum no início da aprendizagem de programação é confundir os comandos cin e cout. Assim, digite o seguinte código, compile-o e execute-o. O que aconteceu? Como você pode corrigir o problema?

11) Altere o programa anterior para utilizar um único comando cin. Caso seja necessário, verifique como foi utilizado o comando cin no exemplo de http://bac004.wikidot.com/estruturascondicionais#toc5. Escreva em seu caderno apenas o comando cin.

12) Digite e compile o programa a seguir. Anote a mensagem de erro do compilador. Por que ocorreu erro? Dica: procure no Capítulo 2 da wikidot sobre constantes. Depois responda: o que é uma constante? Como se declara uma constante?

(5)

13) Assuma que todas as variáveis abaixo x, y, z, w e k sejam do tipo int. Preencha a tabela abaixo. Primeiro tente resolver cada item sem o uso do computador, apenas lembrando a precedência dos operadores aritméticos (caso não se lembre, acesse a Seção 3.2.1 da wikidot). Depois cheque a saída através de um programa. Lembrete: a divisão entre operandos inteiros resulta em quociente inteiro. Exemplo: 7/2 resulta em 3 e não em 3,5. Outro lembrete: 7 é um valor inteiro, mas 7.0 é um valor real. Assim, 7.0/2 resulta em 3,5. Caso uma variável inteira receba esse valor 3,5, resultará no valor inteiro 3; por outro lado, caso o tipo da variável que receba o valor seja real, o resultado será real também: 3,5.

a) x = (2+1)*6 b) y = 3*(5/2) c) z = 5+10%3/2

d) w = 3 + 4 * 5 / (6-4) % 4 + (18 % (5+1)) e) k = 3*(5.0/2)

Resultados sem o uso do computador Resultados através de um programa

x = x =

y = y =

z = z =

w = w =

k = k =

14) Um aluno fez o programa a seguir para calcular o quociente de uma divisão. Teste o programa digitando-o no CodeBlocks com os valores da tabela a seguir, completando-a. Ocorreu algum erro na execução do programa? Por quê? Corrija o programa se necessário. Dica: verifique a Seção 4.2 (Estruturas Condicionais) da wikidot. X y Z 10 3 15 5 0 7 5 0

(6)

15) O que são operadores relacionais? Quais são eles?

16) O que são operadores lógicos? Quais são eles? Escreva as tabelas-verdade de cada um deles.

17) Operandos de operadores lógicos são interpretados como booleano: verdadeiro ou falso. Na linguagem C++, o valor numérico zero (0) é interpretado como falso e qualquer coisa diferente de zero é interpretado como verdadeiro. Exemplo: o computador interpretará (3 && 10) como (verdadeiro && verdadeiro); o computador interpretará (0 && 8) como (falso && verdadeiro); o computador interpretará (“bom dia!” && 0) como (verdadeiro && falso). Sendo assim, qual o resultado de cada uma das expressões a seguir? Lembrete: o operador lógico && possui precedência sobre o operador lógico ||. Dica: você pode testar cada uma das expressões a seguir usando o comando cout. Assim: cout << (4 || 7 && 0); O computador imprimirá o valor 1 para representar verdadeiro e o valor 0 para o falso.

a) 4 || 7 && 0 b) 0 || 7 && 0 c) ‘0’ && 7 && 0

d) 1 && 1 && 1 && 1 && 1 && 0 e) 1 || 0 || 0 || 0 || 0 || 0

18) Uma diferença entre operadores relacionais e lógicos está na forma como o computador interpreta seus operandos. Operandos de operadores lógicos são interpretados como verdadeiro ou falso, sendo que operandos de operadores relacionais não. Exemplo: a expressão 3 > 2 possui operandos numéricos e são interpretados como números. Assim, o computador interpretará: “três é maior do que dois?”. Já a expressão (3 && 2) será interpretada como: “verdadeiro E verdadeiro”. Sendo assim, e verificando a tabela de precedência dos operadores aritméticos, lógicos e relacionais na Seção 3.7 da wikidot, qual o resultado da expressão: 3 + 1 > 0 && ‘f’ == ‘f’ || ‘f’ == ‘m’ ?

(7)

19) Comentários são recursos indispensáveis em programação que servem para dar informações adicionais ao próprio programador, tais como: informações do programa (nome do programador, descrição do programa, data de programação) e explicações sobre algum comando ou trecho de código. Os comentários são ignorados pelo compilador. Existem duas formas de inserir comentários em um programa, utilizando:

a) // comentários

Para comentários de apenas 1 linha

b) /* comentários */

Geralmente para comentários de mais de 1 linha

Digite o seguinte programa, verificando o uso dos dois tipos de comentários.

Após compilar seu programa, execute-o com os seguintes valores de variáveis, completando a tabela a seguir:

(8)

idade Sexo idade > 0 && sexo == ‘f’ || sexo == ‘m’ 10 ‘f’ 1 (Verdadeiro)

20 ‘m’

40 ‘w’

-2 ‘m’

Você verificou algo estranho com os resultados emitidos por seu programa? Se sim, verifique o porquê e corrija-o. Dica: verifique a precedência de operadores no Capítulo 3 de Operadores.

20) Simule a execução de cada um dos trechos de código a seguir, respondendo: quais os valores finais das variáveis? Quais as impressões na tela? Para isso, substitua os valores das variáveis pelos valores fornecidos. Primeiramente, resolva o exercício sem o uso do computador e depois confira fazendo um programa. Verifique o exemplo. A) Exemplo: int a, b; ... if (a != b-2) a = a + 1; a = a + b; cout << a << endl << b; i) Se a = 1 e b = 3

Memória Impressão na tela do usuário

a 1 4 b 3 4 3 ii) Se a = 5 e b = 2

Memória Impressão na tela do usuário

a ? b ? ? ?

(9)

B) int a, b; ... if (a == 1) { a = b + 1; b = 2 * b; } b = b – 1; cout << a << endl << b; i) Se a = 1 e b = 3 ii) Se a = 2 e b = 3 C) int a, b, c; ... if (a >= 2) a = a + 3; if (b != 5) a = a + b; if (c < 10) { a = a + 1; b = a; } a = a * 3; b = b * 2;

cout << a << endl << b << endl << c;

i) a = 2, b = 4 e c = 7 ii) a = 2, b = 5 e c = 10 iii) a = 1, b = 5 e c = 10

(10)

D) int a, b; ... if (a > 0 && b > 0) { a = a - 1; b = b + a; } else { a = a + 1; b = b - a; } cout << a << endl << b; i) Se a = 1 e b = 2 ii) Se a = 1 e b = 0 iii) Se a = 0 e b = 0 iv) Se a = 0 e b = 6 E) char s, t; ... if (s == ‘f’ || s == ‘m’) t = ‘s’; else { s = ‘i’; t = ‘n’; } cout << s << endl << t; i) s = ‘f’ e t = ‘i' ii) s = ‘f’ e t = ‘m' iii) s = ‘h’ e t = ‘m' iv) s = ‘k’ e t = ‘i'

(11)

F) int a, b; ... if (a < 0) b = -1; else if (a < 6) b = 1; else b = 0; a = a + b; cout << a << endl << b; i) a = -1 e b = 1000 ii) a = 6 e b = 200 iii) a = 5 e b = 0 G) int v, s, t; ... if (v + s > t) { cout << “X” << endl; v = v + 1; } else if (v + s == t) {

cout << “Y” << endl; v = v + 2;

} else

cout << “Z” << endl; v = v * v;

cout << v << endl << s << endl << t;

i) v = 10, s = 3, t = 20 ii) v = 2, s = 5 e t = 7 iii) v = 1, s = 4 e t = 1

(12)

H) int a; ... if (a > 0) { if (a < 15) a = a + 10; else if (a < 20) { a = a + 20; cout << “S” << endl; } else a = a + 1000; } else cout << “F” << endl; cout << a; i) a = 19 ii) a = -1 iii) a = 14 iv) a = 20

21) O programa a seguir não está correto. Teste com vários valores para a variável idade. Qual é o erro? Corrija seu programa e teste-o novamente.

22) O programa a seguir possui um erro na compilação. Escreva o erro em seu caderno. Corrija-o.

(13)

23) Digite e compile o programa abaixo. Faça vários testes. Complete a tabela a seguir.

Salário Porcentagem de Aumento

sal ≤ 0 Erro: “Salário Inválido”

0 < sal ≤ 600 10%

Considerações IMPORTANTES sobre o programa do exercício 23:

 Como foi utilizado um encadeamento de if-else, caso o salário seja inválido, imprime-se a mensagem da linha 12 e a execução vai para a linha 20;

(14)

 Caso o salário seja R$500,00, por exemplo, executa-se a instrução da linha 11, resultando em falso. Como em seguida há um else (senão, caso contrário), verifica-se o que há depois do else, que é um if, e 500 é menor que 600, sendo verdadeiro. Assim, executa-se a instrução da linha 14 e a execução vai para a linha 20.

 Caso você utilize apenas ifs para resolver o problema, gastará mais processamento, pois independente da condição ser verdadeira ou não, verificará todas as condições dos ifs. Assim, como a linguagem disponibiliza a estrutura condicional composta (if-else), use-a!

Verifique que um número real deve ser escrito com o ponto no lugar da vírgula. Exemplo: 1.05 e não 1,05.

24) Digite o seguinte programa e execute-o com os valores da tabela a seguir. Idade Saída

10 -9 0

Explique o erro do programa e corrija-o.

25) A partir de 3 notas de um aluno fornecidas por um usuário, informe se o aluno foi aprovado, reprovado ou ficou de recuperação. O aluno estará aprovado se obteve, no mínimo, 7,0 de média; o aluno estará de recuperação caso sua média seja inferior a 7,0 mas no mínimo 5,0; o aluno estará reprovado caso sua média seja inferior a 5,0. Caso o aluno tenha ficado para recuperação, peça ao usuário a nota que o aluno tirou na recuperação, fazendo uma média aritmética desta nota com a

(15)

média anterior. Caso essa nova média seja no mínimo 5,0, o aluno passou; caso contrário, ficou reprovado.

Sendo assim, analise cada um dos algoritmos abaixo (5 propostas de solução) e dê um parecer sobre a sua corretude. Caso ele solucione o problema fale também a respeito do custo computacional (se o algoritmo está desperdiçando processamento). Em sua opinião, qual é a melhor solução? Ou caso não tenha gostado de uma solução, apresente a sua.

1a. Proposta: int main() {

float n1, n2, n3, media, notaRecuperacao; cout << “Entre com 3 notas: ”;

cin >> n1 >> n2 >> n3; media = (n1 + n2 + n3)/3; cout << “Média: ” << media; if (media>=7.0)

cout << “Aprovado!”; if (media>=5.0)

{

cout << “Recuperação!”;

cout << “Entre com a nota da recuperação: ”; cin >> notaRecuperacao;

media = (media + notaRecuperacao)/2; if (media>=5.0) cout << “Aprovado!”; else cout << “Reprovado!”; } else cout << “Reprovado!”; return 0; }

(16)

2a. Proposta: int main() {

float n1, n2, n3, media, notaRecuperacao;

cout << “Entre com 3 notas: ”; cin >> n1 >> n2 >> n3;

media = (n1 + n2 + n3)/3; cout << “Média: ” << media; if (media>=7.0)

cout << “Aprovado!”; if (media>=5.0 && media<7.0) {

cout << “Recuperação!”;

cout << “Entre com a nota da recuperação: ”; cin >> notaRecuperacao;

media = (media + notaRecuperacao)/2; if (media>=5.0) cout << “Aprovado!”; else cout << “Reprovado!”; } else cout << “Reprovado!”; return 0; }

(17)

3a. Proposta: int main() {

float n1, n2, n3, media, notaRecuperacao;

cout << “Entre com 3 notas: ”; cin >> n1 >> n2 >> n3;

media = (n1 + n2 + n3)/3; cout << “Média: ” << media; if (media>=7.0)

cout << “Aprovado!”; if (media>=5.0 && media<7.0) {

cout << “Recuperação!”;

cout << “Entre com a nota da recuperação: ”; cin >> notaRecuperacao;

media = (media + notaRecuperacao)/2; if (media>=5.0) cout << “Aprovado!”; else cout << “Reprovado!”; } if (media<5.0) cout << “Reprovado!”; return 0; }

(18)

4a. Proposta:

int main() {

float n1, n2, n3, media, notaRecuperacao;

cout << “Entre com 3 notas: ”; cin >> n1 >> n2 >> n3;

media = (n1 + n2 + n3)/3; cout << “Média: ” << media; if (media<5.0)

cout << “Reprovado!”; else if (media<7.0) {

cout << “Recuperação!”;

cout << “Entre com a nota da recuperação: ”; cin >> notaRecuperacao;

media = (media + notaRecuperacao)/2; if (media>=5.0) cout << “Aprovado!”; else cout << “Reprovado!”; } else cout << “Aprovado!”; return 0; }

(19)

5a. Proposta: int main() {

float n1, n2, n3, media, notaRecuperacao;

cout << “Entre com 3 notas: ”; cin >> n1 >> n2 >> n3;

media = (n1 + n2 + n3)/3; cout << “Média: ” << media; if (media>=7.0)

cout << “Aprovado!”; else if (media>=5.0) {

cout << “Recuperação!”;

cout << “Entre com a nota da recuperação: ”; cin >> notaRecuperacao;

media = (media + notaRecuperacao)/2; if (media>=5.0) cout << “Aprovado!”; else cout << “Reprovado!”; } else cout << “Reprovado!”; return 0; }

Referências

Documentos relacionados

Para realizar essa Produção Textual Interdisciplinar em Individual (PTI), você deve se colocar na situação da professora Ana Carolina e elaborar um Plano de Ensino para uma turma de

Assim, se do ponto de vista do desenvolvimento intelectual, entendido como a capacidade para pensar reflexivamente, não há evidências que distingam, de forma

...uma organização de áreas especializadas baseada em frames em que um frame dinâmico orientado para o processo fornece as bases conceituais para a localização

Os Gestores entrevistados concebem que o RDC foi um marco na Instituição, no que diz respeito à mudança cultural em relação a forma de se contratar obras e

O diagnóstico precoce do coma mixedematoso aliado à instituição imediata do tratamento com levotiroxina e ao manejo adequado de complicações, como insuficiência respiratória,

RESOLUCIÓN do 29 de xuño de 2016 pola que se establecen as bases reguladoras para a concesión, en réxime de concorrencia competitiva, de bolsas para a realización de estudos no

Fresamento de cantos a 90º e faceamento a altas taxas de avanço.. Passo

O objetivo deste trabalho é mostrar as características, importância e aplicações que os semicondutores têm para a eletrônica, as suas funções em equipamentos