Baixe o app para aproveitar ainda mais
Prévia do material em texto
Algoritm� � Programaçã� 1 - Pensando bem, um computador é praticamente inútil se não tiver nenhuma maneira de interagir com o usuário. As trocas de informação entre o computador e o usuário são chamadas entrada e saída (input e output, em inglês). Entrada é a informação fornecida a um programa e saída é a informação fornecida pelo programa. Frequentemente são usados os termos "saída padrão" (standard output, stdout) e "entrada padrão" (standard input, stdin). Eles se referem, na maioria das vezes, ao monitor e ao teclado, que são os meios básicos de interação com o usuário. No entanto, os sistemas operacionais permitem redirecionar a saída e a entrada de programas para outros dispositivos ou arquivos. As funções de entrada e saída na linguagem C trabalham com fluxos de dados, que são uma forma de abstração de dados de maneira sequencial. Assim, toda entrada e saída é feita da mesma maneira, com as mesmas funções, não importando o dispositivo com o qual se está comunicando. As mesmas funções que descrevem o acesso aos arquivos podem ser utilizadas para se acessar um terminal de vídeo. Neste contexto, julgue as afirmações que se seguem. I- A função printf() é uma função de saída e permite facilmente imprimir valores que são sequências de caracteres, além de poder formatar os dados e juntar várias sequências de caracteres. II- Se especificar onde o valor da variável deve ser impresso, através da especificação de formato %d caso a variável seja do tipo int, então precisará, logicamente, especificar qual variável imprimir. Isso é feito dando-se mais um argumento à função printf(). III - A função scanf() lê dados da entrada padrão e os guarda em variáveis do programa. Assim como para printf(), usa-se uma string de edição para especificar como serão escritos os dados. IV - A funcão scanf() retorna o número de conversões realizadas com sucesso. Isso é útil pois, se o valor contido numa variável após a chamada de scanf() for igual ao valor anterior, não é possível saber se o valor digitado foi o mesmo que já havia, ou se não foi feita a conversão. Para obter esse número de conversões realizadas, basta guardar o resultado numa variável do tipo int. É correto apenas o que se afirma em: R - II e IV. Em linguagem C, as funções da biblioteca padrão para entrada e saída estão declaradas no cabeçalho stdio.h. Conforme as informações de entrada e saída, as asserções analisadas são: I - FALSA - A função printf( ) é uma função de saída e permite facilmente imprimir valores que NÃO SÃO SEQUÊNCIAS de caracteres, além de poder formatar os dados e juntar várias sequências de caracteres. II - VERDADEIRA - Se especificar onde o valor da variável deve ser impresso, através da especificação de formato %d caso a variável seja do tipo int, então precisará, logicamente, especificar qual variável imprimir. Isso é feito dando-se mais um argumento à função printf( ). III - FALSA - A função scanf( ) lê dados da entrada padrão e os guarda em variáveis do programa. Assim como para printf( ), usa-se uma string de FORMATAÇÃO para especificar como serão LIDOS os dados.IV - VERDADEIRA - A funcão scanf( ) retorna o número de conversões realizadas com sucesso. Isso é útil pois, se o valor contido numa variável após a chamada de scanf() for igual ao valor anterior, não é possível saber se o valor digitado foi o mesmo que já havia, ou se não foi feita a conversão. Para obter esse número de conversões realizadas, basta guardar o resultado numa variável do tipo int. 2 - Diz-se que um número é triangular se ele é produto de três números naturais consecutivos (e.g.: 120 é triangular pois 120 = 4*5*6). Dado um natural n, determinar se n é triangular. O trecho de programa a seguir demonstra esse conceito: #include <stdio.h> #include <stdlib.h> int main () { int cont, num; printf("Entre com um número: "); scanf("%d", &num); for (cont=1; num < cont*(cont+1)*(cont+2); cont++); if (cont*(cont+1)*(cont+2) == num) printf("O numero %d e perfeito\n"); else printf("O numero %d nao e perfeito\n"); system("pause"); return 0; } Muitos dos problemas em computação podem ser reduzidos a uma forma de "busca", onde o computador gera todas as combinações possíveis até encontrar a solução desejada. De acordo com o programa criado, como foi gerada todas as soluções? R - Basicamente, é preciso definir 3 coisas: início - qual o primeiro candidato a solução a ser testado?; fim - a partir de que valor não é mais necessário procurar a solução?; e incremento - como gerar a próxima solução a ser testada? 3 - Conforme Manzano (2015) toda vez que é necessário armazenar uma quantidade grande de valores do mesmo tipo, podemos utilizar as variáveis compostas ou seja um vetor. A melhor solução para armazenar diversos valores dentro de um mesmo contexto é utilizar variáveis compostas. O vetor, ao ser declarado, reserva um espaço na memória contíguo para armazenar seus elementos. Analise o programa a seguir. #include<stdio.h> int main() { int vetor[19],i; for (i = 0; i <= 19; i++) { vetor[i] = 1; } for (i = 0; i <= 19; i++) { printf ("vetor[%d] = %d \n", i, vetor[i]); } return 0; } Considerando o programa apresentado, julgue as afirmações a seguir. I. Na linha 5, o comando for é utilizado para inicializar o vetor com o número 1. II. Na linha 8, o comando for é utilizado para imprimir os valores do vetor. III.O programa não irá imprimir as informações do vetor corretamente porque estamos atribuindo mais valores ao vetor do que foi declarado. IV. Caso não seja inicializado o vetor, como foi feito no comando for da linha 5, será impresso os valores que estão na memória do computador, esses valores são conhecidos como “lixo de memória”. É correto apenas o que se afirma em: R - I, II, III e IV. A frase corretamente preenchida é: As afirmativas I, II, III e IV estão corretas. Todas as afirmativas estão corretas. Devemos sempre inicializar um vetor para evitar que ao executar o programa, um lixo de memória seja utilizado. Observe que há um problema no programa, no comando: for (i = 0; i <= 19; i++) estamos excedendo o valor do vetor. O correto seria: for (i = 0; i < 19; i++). I. Na linha 5, o comando for é utilizado para inicializar o vetor com o número 1. (Correto) II. Na linha 8, o comando for é utilizado para imprimir os valores do vetor. (Correto) III.O programa não irá imprimir as informações do vetor corretamente porque estamos atribuindo mais valores ao vetor do que foi declarado. (Correto) IV. Caso não seja inicializado o vetor, como foi feito no comando for da linha 5, será impresso os valores que estão na memória do computador, esses valores são conhecidos como “lixo de memória” (Correto) 4 - Analise a aplicação da estrutura de repetição condicional realizando um programa que simula uma conta bancária (tela de opções das transações), adaptado do livro do Soffner (2013). Ele escreve um programa que repete uma entrada de dados até que determinada condição de saída seja atingida e, em seguida, acumule os valores digitados. #include <stdio.h> #include <stdlib.h> main() { float s=0, v; int op; do { printf("\n Digite sua Operacao"); printf("\n 1. Deposito"); printf("\n 2. Saque"); printf("\n 3. Saldo"); printf("\n 4. Sair"); printf("\n Opcao? "); scanf("%d", &op); switch(op) { case 1: printf("\n Valor do deposito? "); scanf("%f", &v); s=s+v; break; case 2: printf("\n Valor do saque? "); scanf("%f", &v); s=s-v; break; case 3: printf("\n Saldo atual = R$ %.2f \n", s); break; default: if(op!=4) printf("\n Opcao Invalida! \n"); } } while (op!=4); printf("Fim das transacoes. \n\n"); system("pause"); return 0; } Foi utilizado o laço do-while para implementar o menu do programa, onde a função desejada é executada pelo menos uma vez dentro do laço, isto é: R - Foi aplicada uma estrutura de repetição usando comparativo. 5 - Salvetti e Barbosa (1998) afirmam que devemos utilizar os parênteses para ter certeza de que a ordem de precedência das operações seja realizada eos cálculos não sofrerem alterações nos seus valores. Considerando o contexto, avalie o programa a seguir: #include <stdio.h> int main( ) { float C, F; printf("Escreva a Temperatura em graus Celsius: "); scanf("%f", &C); F = ((9 * C) / 5) + 32; printf("Temperatura Fahrenheit = %.2f .\n", F); return 0; } Analisando o programa proposto, caso o valor da variável C receber o valor igual a 10, o comando printf irá imprimir: R - Temperatura Fahrenheit = 50.00 . 6 - Segundo Soffner (2013 p. 64), o programa “não executará nenhuma repetição (e as ações que ali dentro estiverem programadas) sem antes testar uma condição”. Em alguns casos, quando se utiliza o teste no início, pode ocorrer o famoso loop (laço) infinito (quando um processo é executado repetidamente). Para que isso não aconteça, é possível utilizar os seguintes recursos: contador, incremento e decremento, acumulador e condição de parada. Baseado nestes recursos, julgue as afirmações que se seguem: I. Contador – é utilizado para contar as repetições quando não são determinadas. II. Incremento e decremento – trabalha o número do contador, seja ele, aumentado ou diminuído. III. Acumulador somará as entradas de dados de cada iteração da repetição, gerando um somatório a ser utilizado quando iniciar a repetição. IV. Condição de parada – utilizada para determinar o momento de parar quando não se tem um valor exato desta repetição. É correto apenas o que se afirma em: R - II e IV. I - FALSA - Contador: é utilizado para CONTROLAR AS REPETIÇÕES QUANDO ESTA É DETERMINADA. II - VERDADEIRA - Incremento e decremento: trabalha o número do contador, seja ele, aumentado ou diminuído. III - FALSA - Acumulador: que segundo Soffner (2013), somará as entradas de dados de cada iteração da repetição, gerando um somatório a ser utilizado quando DA SAÍDA DA REPETIÇÃO. IV - VERDADEIRA - Condição de parada: utilizada para determinar o momento de parar quando não se tem um valor exato desta repetição. 7 - Segundo Manzano (2015), os algoritmos criados por você deverão ser convertidos em linguagens de alto nível, como por exemplo: a linguagem Java, Pascal, C, C++ entre outras conceituadas nesta seção. Você deverá escrever os códigos fontes na linguagem escolhida para que os mesmos se tornem executáveis, porém, cada linguagem adota um método particular para gerar o código executável. Considerando o contexto apresentado, faça a correta associação entre as Colunas. COLUNA A COLUNA B I. São gerados códigos intermediários, onde não exige tanto espaço de memórias quanto realizado pelo código fonte. Sua vantagem é ter independência da arquitetura que realizará a execução final, porém, necessita de um interpretador específico para sua geração. 1. Compiladores II. Lê uma instrução do código fonte, transforma em código binário e executa, repete esse processo até que todas as instruções do código fonte sejam executadas. O código é interpretado e executado em tempo real, sem a geração de código executável. 2. Interpretadores III. É gerado um código executável sem a necessidade de interpretar comando por comando. Sua vantagem é a execução mais rápida, porém, caso necessite de alterações, o código fonte deverá ser editado e executado em máquinas de mesma arquitetura. 3. Tradutores Assinale a alternativa que apresenta a associação correta. R - I - 3; II - 2; III - 1. 8 - A estrutura condicional composta expõe que uma instrução ou bloco de instruções só seja executada se uma condição for satisfeita, e outra instrução ou bloco se a condição não for satisfeita, ou seja, diferentemente da condicional simples, a estrutura condicional composta executa um bloco de instruções se a condição for verdadeira e outro se a condição for falsa. Analise o seguinte trecho de código. Código – Trecho de estrutura condicional composta if( idade>=18) printf("Você e maior de idade"); else printf("Você e menor de idade"); if (sexo =='F') { printf("Bela moça, digite sua idade); scanf("%d", &idade); } else{ printf("Belo rapaz, digite sua idade); scanf("%d", &idade); } Baseado no código, o que o trecho quer saber? R - No primeiro if-else: se possui maioridade ou não. No segundo if-else: qual a idade da moça ou do rapaz. 9 - Pode-se otimizar o uso de variáveis usando as estruturas compostas (vetor e matriz), porém só se pode armazenar valores de um mesmo tipo. Além das estruturas homogêneas, as linguagens de programação oferecem um tipo de variável composta heterogênea chamada de estruturas (structs), ou ainda de registros por alguns autores (SOFFNER, 2013). Assim como se associa os vetores e matrizes com tabelas, pode-se associar uma estrutura a uma ficha de cadastro com diversos campos. Na linguagem C, a criação de uma estrutura deve ser feita antes da função main() e deve possuir a seguinte sintaxe: struct <nome>{ <tipo> <nome_da_variavel1>; <tipo> <nome_da_variavel2>; ... }; De acordo com a sintaxe apresentada, julgue as afirmações que se seguem I. <nome> é o nome da variável. II. As variáveis internas dessa estrutura são os campos que se deseja guardar. III. Uma estrutura funciona como um “tipo de dado”.IV. O uso da estrutura sempre será atribuído à uma ou mais variáveis. É correto apenas o que se afirma em: R - II, III e IV. 10 - Chama-se de estruturas de decisão encadeadas, quando uma estrutura de decisão está localizada dentro do lado falso da outra. Este tipo de estrutura também é conhecida como seleção “aninhada” ou seleção “encaixada”. Qualquer que seja o termo usado para identificar a estrutura, o importante é que esse formato com uma estrutura de seleção dentro da outra permite fazer a escolha de apenas um entre vários comandos possíveis. A figura 2 a seguir mostra uma tela após execução de uma estrutura de decisão encadeada: Figura 2 – tela após execução de uma estrutura de decisão encadeada Em linguagem C usa-se estruturas if-else-if encadeadas para construir códigos equivalentes. Analise o programa a seguir e complete as lacunas: #include <stdio.h> #include ____________ int main (void) { int N1, N2 ; printf("Digite o primeiro numero: "); _____________ printf("Digite o segundo numero: "); scanf("%d", &N2); _____________ printf("Os numeros são iguais!"); else if (N1 > N2) printf("O maior valor e = %d", N1); ____________ printf("O maior valor e = %d", N2); printf("\n"); system("pause"); ____________ }. Assinale a alternativa que completa corretamente as lacunas: R - <stdlib.h> / scanf("%d", &N1); / if (N1 == N2) / else / return (0);
Compartilhar