

















Estude fácil! Tem muito documento disponível na Docsity
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
Prepare-se para as provas
Estude fácil! Tem muito documento disponível na Docsity
Prepare-se para as provas com trabalhos de outros alunos como você, aqui na Docsity
Os melhores documentos à venda: Trabalhos de alunos formados
Prepare-se com as videoaulas e exercícios resolvidos criados a partir da grade da sua Universidade
Responda perguntas de provas passadas e avalie sua preparação.
Ganhe pontos para baixar
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
Comunidade
Peça ajuda à comunidade e tire suas dúvidas relacionadas ao estudo
Descubra as melhores universidades em seu país de acordo com os usuários da Docsity
Guias grátis
Baixe gratuitamente nossos guias de estudo, métodos para diminuir a ansiedade, dicas de TCC preparadas pelos professores da Docsity
Imprimir o maior e o menor número. Implementação: a)Ler os três números. Para ler os 3 números , basta declará- los e utilizar a função scanf para efetuar a ...
Tipologia: Exercícios
1 / 25
Esta página não é visível na pré-visualização
Não perca as partes importantes!
Observações sobre o exercício: A resolução dos exercícios será dividida em duas etapas: Projeto do programa e Implementação. Embora a resposta do exercício seja apenas o código- fonte do programa estas etapas servirão para ilustrar como um programa deve ser elaborado passo- a- passo. a) Dados três números inteiros digitados pelo usuário diga qual é o maior e o menor entre eles Projeto do programa: Este programa pode ser dividido nas seguintes etapas
Para implementar esta etapa precisamos então declarar o variável maior, efetuar as comparações necessárias. Caso alguma comparação seja verdadeira o valor da variável maior deverá ser atualizado com o novo maior valor. #include <stdio.h> int main(void){ //declaração e leitura dos números int a,b,c; //declaração da variável maior int maior; scanf(“%d %d %d” ,&a,&b,&c); //escolhemos um possível maior valor maior = a; //comparamos maior com b if( maior < b){ //suposto maior é menor que b então b é o possível maior maior = b; } //o mesmo raciocínio é válido para c if(maior < c){ maior = c; } return 0 ; } c)Descobrir o menor número O mesmo raciocínio utilizado para descobrir o maior número pode ser utilizado para descobrir o menor número, só que testamos se o suposto menor número é maior que os números restantes... caso a comparação seja verdadeira atualizamos a variável menor. #include <stdio.h> int main(void){ int a,b,c; //declaração da variável maior e menor int maior,menor; scanf(“%d %d %d” ,&a,&b,&c); maior = a; if( maior < b){ maior = b; } if(maior < c){ maior = c; } //supomos que o menor número é a menor = a; //comparamos com b para verificar se a afirmação anterior é válida if(menor > b){ //b é menor que o suposto menor, logo b é o menor menor = b; } if(menor > c){ // c é menor que o suposto menor, logo c é o menor
int main(void){ int n,m; // declaracao do multiplicando e do valor da operação em cada etapa int mt,valor; scanf(“%d %d” ,&n,&m); /* Na estrutura do for temos já a inicialização, teste e atualização da variável de controle, no caso a variável “mt” / for(mt = 1; mt <= m; mt = mt+1){ //aqui o valor da operação a ser calculada valor = nmt; // e é claro nós imprimimos o mesmo printf(“%d x %d = %d\n”,n,mt,valor); } return 0 ; } c) Restringir a entrada de dados de maneira que a tabuada só seja calculada se n e m estiverem entre 2 e 9 (incluindo 2 e 9). O programa como está não restringe a entrada de dados do usuário. Para tal, teremos que fazer uso de uma estrutura de controle condicional e com ela tomarmos uma decisão de acordo com o valor digitado. As seguintes decisões precisam ser tomadas pelo programa:
calcular a tabuada
b)Analisar para cada número percorrido se o mesmo pode ser impresso na tela Uma tomada de decisão deve ser feita através de uma estrutura de controle condicional, no caso a mais adequada é o IF. Para poder utilizar o IF devemos ver quantos serão necessário e qual expressão avalia Verdadeiro ou Falso diante da análise pedida. Temos duas situações:
A grosso modo um logaritmo de um número pode ser calculado contando- se quantas divisões inteiras podemos fazer até que o resultado da divisão seja 0. Logo nosso programa se resume a:
Como neste programa temos uma grande quantidade de casos particulares em torno de um mesmo valor, SWITCH é o mais recomendado. Utilizando- o o programa adquire este aspecto: #include <stdio.h> int main(void){ int n; //declaramos uma variavel que armazena o dígito scanf(“%d” ,&n); switch(n){ case 0: printf(“_ _ _ _ _”); break; case 1: printf(“. _ _ _ _”); break; case 2: printf(“.. _ _ ”); break; case 3: printf(“... _ ”); break; case 4: printf(“.... ”); break; case 5: printf(“.... .”); break; case 6: printf(“... .”); break; case 7: printf(“ .. .”); break; case 8: printf(“ _ . .”); break; case 9: printf(“ _ _ _ .”); break; default: //caso em que n possui mais de um dígito! printf(“A entrada deve ser composta de 1 digito !\n”); break; }; return 0 ; } Repare que o scanf de um número não impede que digitemos mais de um dígito nem números negativos... neste caso devemos informar o usuário da situação. O programa também pode ser feito com IFs e ELSEs encadeados... é mais trabalhoso fazer o mesmo assim, mas a funcionalidade será a mesma.Confira na resposta abaixo: #include <stdio.h> int main(void){ int n; //declaramos uma variavel que armazena o dígito scanf(“%d” ,&n); if( n == 0 ){ printf(“ _ _ _ _”); }else if( n == 1 ){
printf(“. _ _ _ _”); }else if( n == 2 ){ printf(“.. _ _ _”); }else if( n == 3 ){ printf(“... _ ”); }else if( n == 4 ){ printf(“.... ”); }else if( n == 5 ){ printf(“.... .”); }else if( n == 6 ){ printf(“... .”); }else if( n == 7 ){ printf(“ .. .”); }else if( n == 8 ){ printf(“ _ . .”); }else if( n == 9 ){ printf(“ _ _ _ .”); }else{ //caso em que n possui mais de um dígito! printf(“A entrada deve ser composta de 1 digito !\n”); } return 0 ; } f)Dado um número inteiro, escrever o mesmo em código Morse. O código deve ser fornecido na mesma ordem que os caracteres digitados. Projeto do programa: Este realmente não é um programa trivial. Temos que extrair dígito a dígito do número, do mais significativo para o menos significativo, e para cada um deles imprimir o código Morse correspondente. Tarefas do programa
Relembrando a declaração de uma função: tipo NomeDaFunção (Listagem de Parâmetros de Entrada) { comandos return ValorDaFunção ; } Ex: a função abaixo calcula a média aritmética de 3 números reais passados como parâmetro de entrada (declarados como a,b e c), O valor retornado peloa função é do tipo float (real, ou ponto flutuante). float media3(float a, float b, float c){ return (a + b + c)/3.0 ; } Portanto, vamos criar uma função que dado um número inteiro retorna a quantidade de dígitos que ele possui reaproveitando o código do exercício anterior. int QtdDigitos(int n){ int x; //inicializamos o contador com 0 x = 0; do{ n = n/ 10 ; //a cada divisão incrementamos o contador x = x + 1 ; }while(n != 0 ); return x; } Quando colocamos QtdDigitos(i) dentro de uma expressão , o subprograma será executado com a variável n inicializada com o valor de i e após seu término será avaliado com o valor de x do tipo inteiro. Note que essas variáveis n e x declaradas dentro dele só existem dentro do bloco da função (trecho de código entre chaves) e são completamente independentes de quaisquer varíaveis declaradas dentro de outros blocos de função ou do main. Inclusive podemos declarar a variável n e x dentro do bloco do main sem quaisquer restrições , isto é o n declarado dentro de uma função não é o mesmo n declarado dentro do bloco do main. Voltando ao programa... Já sabemos qual é o expoente da potência de 10, mas precisamos é do valor de 10 elevado a este expoente. Vamos então construir uma função que dado um número positivo e retorna 10 e^. int potencia10(int e){ int r,cont;
r = 1 ; for(cont = 1 ; cont <= e; cont++){ // enquanto contador não for igual a e multiplicamos r por 10 r = r* 10 ; } return r; } Agora resta apenas decidir qual é a estrutura de repetição que vamos utilizar. Sabemos que se um número tem t dígitos então vamos repetir a operação t vezes. Podemos utilizar o FOR ou WHILE. Desta vez vamos utilizar o WHILE. O programa então ficará desta maneira #include <stdio.h> int QtdDigitos(int n){ int x; x = 0; do{ n = n/ 10 ; x = x + 1 ; }while(n != 0 ); return x; } int potencia10(int e){ int r,cont; r = 1 ; for(cont = 1 ; cont <= e; cont++){ r = r* 10 ; } return r; } int main(void){ int n,p,t,d; scanf(“%d” ,&n); //calculamos o total de dígitos do numero t = QtdDigitos(n); //enquanto houverem dígitos a serem extraídos repetimos operação while(t > 0){ //calculamos a potencia p p = potencia10(t - 1 ); //extraímos o digito mais significativo d = n/p; //recuperamos o restante dos dígitos n = n%p; //diminuímos um digito do total de dígitos t = t - 1 ; } return 0 ; }
Se chamarmos ImprimeMorse(k) em qualquer trecho do nosso programa, será impresso o código morse do dígito k. Uma vez com esse procedimento pronto basta chamar ImprimeMorse dentro da repetição principal do programa para cada dígito obtido. #include <stdio.h> void ImprimeMorse(int n){ switch(n){ case 0: printf(“_ _ _ _ _”); break; case 1: printf(“. _ _ _ _”); break; case 2: printf(“.. _ _ _”); break; case 3: printf(“... _ ”); break; case 4: printf(“.... ”); break; case 5: printf(“.... .”); break; case 6: printf(“... .”); break; case 7: printf(“ .. .”); break; case 8: printf(“ _ . .”); break; case 9: printf(“ _ _ _ .”); break; default: //caso em que n possui mais de um dígito! printf(“A entrada deve ser composta de 1 digito !\n”); break; }; } int QtdDigitos(int n){ int x; x = 0; do{ n = n/ 10 ; x = x + 1 ; }while(n != 0 ); return x; } int potencia10(int e){ int r,cont; r = 1 ; for(cont = 1 ; cont <= e; cont++){ r = r* 10 ; } return r;
int main(void){ int n,p,t,d; scanf(“%d” ,&n); t = QtdDigitos(n); while(t > 0){ p = potencia10(t - 1 ); d = n/p; n = n%p; t = t - 1 ; //imprimimos o dígito d extraído em Morse ImprimeMorse(d); /* imprimimos um espaço em branc o para evitar que os códigos fiquem grudados */ printf(“ “); } return 0 ; } Fazer este programa sem utilizar procedimentos e funções é no mínimo , bem mais trabalhoso. g)Dado um número n, escreva um “X” formado por asteriscos. Permita que apenas números ímpares sejam utilizados como entrada. Projeto do Programa: Em vez de pensarmos no “X” como uma figura só , podemos pensar que o programa traça duas diagonais simultaneamente. Desenhar uma diagonal é um problema bem mais simples. O programa pode ser dividido nas seguintes etapas:
//se for qualquer outro é espaço em branco printf(“ “); } } //pulamos a linha após escrever os n caracteres printf(“\n”); } return 0 ; } b)Traçar a diagonal secundária O problema é praticamente o mesmo de traçar a diagonal principal, só a posição do asterisco cai em uma posição diferente. Se a linha for a primeira o asterisco deverá ser desenhado na n- esima posição, na segunda linha na n- esima posição menos 1 até que na n- esima linha o asterisco deverá ser desenhado na 1ª posição. Seguindo essa lógica , em uma linha de posição l o asterisco deverá ser desenhado na posição n- l +. Não iremos fazer outro grupo de FOR para imprimir a diagonal secundária pois em vez de obtermos o X teríamos duas diagonais uma embaixo da outra. Colocar dois agrupamentos de for vai nos dar isso:
Queremos isso:
Podemos alterar a expressão do IF da repetição que desenha a linha de maneira que se a posição a ser desenhada for do caracter da diagonal principal OU do caracter da diagonal secundaria então imprime- se um asterisco. Alterando- se apenas a expressão do IF fazemos nosso programa desenhar um ”X”. int main(void){ int n,l,cont; scanf(“%d” ,&n); for(l = 1 ; l <=n;l++){ //variamos l de 1 a n for(cont = 1; cont <=n; cont ++){ /*escrevemos n caracteres, Se a posição for igual a l então é diagonal principal se for igual a (n –l + 1) é d. secundaria / if((cont == l ) || (cont == (n –l +1 ))){ printf(“”);
else{ //se for qualquer outro é espaço em branco printf(“ “); } } //pulamos a linha após escrever os n caracteres printf(“\n”); } return 0 ; } c)Restringir a entrada de números pares Basta fazer um if com a expressão (n%2 == 0), pois já sabemos que o resto da divisão por 2 de números pares é sempre 0. int main(void){ int n,l,cont; scanf(“%d” ,&n); if(n %2 == 0){ printf(“Digite apenas numeros impares !”); }else{ for(l = 1 ; l <=n;l++){ //variamos l de 1 a n for(cont = 1; cont <=n; cont ++){ /*escrevemos n caracteres, Se a posição for igual a l então é diagonal principal se for igual a (n –l + 1) é d. secundaria / if((cont == l ) || (cont == (n –l +1 ))){ printf(“”); } else{ //se for qualquer outro é espaço em branco printf(“ “); } } //pulamos a linha após escrever os n caracteres printf(“\n”); } } return 0 ; } h)Escreva um programa um número imaginado pelo usuário entre 0 e n. Para cada valor sugerido pelo programa como sendo o valor imaginado pelo usuário, o usuário deve responder se o valor sugerido pelo programa é igual, menor ou maior que o valor imaginado. A execução do programa deve terminar assim que o programa “adivinhar” o valor imaginado pelo usuário. Projeto do Programa: