sugestão de respostas "aprendendo a programar em C"!

sugestão de respostas "aprendendo a programar em C"!

(Parte 1 de 5)

Aprendendo

Programar

Programando na Linguagem C

Para Iniciantes

Jaime Evaristo

Respostas dos Exercícios Propostos

Capítulo 1

1. Naturalmente, na primeira travessia um índio levaria um branco até a outra margem e voltaria sozinho. A questão é a segunda: não poderia atravessar um índio e um branco, pois ao chegar na outra margem haveria dois brancos e um índio; não poderiam atravessar dois índio, pois o terceiro ficaria com dois brancos. A solução é atravessar dois brancos e um deles retornar. A terceira travessia só pode ser feita por dois índios, pois já existem dois brancos na outra margem. A questão é o retorno. A única possibilidade é retornar um índio e um branco! Temos então o seguinte algoritmo:

1. Atravessem um índio e um branco. 2. Retorne o índio. 3. Atravessem dois brancos. 4. Retorne um branco. 5. Atravessem dois índios. 6. Retornem um índio e um branco. 7. Atravessem dois índios. 8. Retorne um branco. 9. Atravessem dois brancos. 10. Retorne um branco. 1. Atravessem dois brancos.

2. Indicando por 1, 2, 3, 4, ... os discos na ordem crescente dos seus diâmetros, temos para o caso n = 2:

1. Disco 1 da origem para auxiliar. 2. Disco 2 da origem para o destino. 3. Disco 1 da auxiliar para o destino.

Para o caso n = 3, basta observar que é necessário apenas transportar os dois discos 1 e 2 da origem para auxiliar (que é o caso anterior), transportar o disco três da origem para o destino e os discos 1 e 2 da torre auxiliar para o destino (que é, novamente, o caso anterior).

1. Disco 1 da origem para destino. 2. Disco 2 da origem para auxiliar. 3. Disco 1 do destino para auxilia. 4. Disco 3 da origem para destino. 5. Disco 1 da auxiliar para origem. 6. Disco 2 da auxiliar para o destino. 7. Disco 1 da origem para o destino.

3. Indiquemos por P(m, n) = 0 se m e n têm o mesmo peso e P(m, n) > 0 se a esfera m é mais pesada que a esfera n. Temos então a seguinte proposta:

1. Pese as esferas 1 e 2. 2. Se P(1, 2) = 0, pese as esferas 1 e 3. 2.1 Se P(1, 3) > 0 então forneça como resposta: a esfera 3 tem peso menor que as esferas 1 e 2.

2.2 Se P(3, 1) > 0 então forneça como resposta: a esfera 3 tem peso maior que as esferas 1 e 2. 3. Se P(1, 2) > 0, pese as esferas 1 e 3. 3.1 Se P(1, 3) = 0 então forneça como resposta: a esfera 2 tem peso menor que as esferas 1 e 3. 3.2 Se P(1, 3) > 0 então forneça como resposta: a esfera 1 tem peso maior que as esferas 2 e 3. 3.3 Se P(3, 1) > 0 então forneça como resposta: a esfera 1 tem peso menor que as esferas 2 e 3. 4. Se P(2, 1) > 0, pese as esferas 2 e 3. 4.1 Se P(2, 3) = 0 então forneça como resposta: a esfera 1 tem peso menor que as esferas 2 e 3. 4.2 Se P(2, 3) > 0 então forneça como resposta: a esfera 2 tem peso maior que as esferas 1 e 3. 4.3 Se P(3, 2) > 0 então forneça como resposta: a esfera 2 tem peso menor que as esferas 1 e 3.

4. Para calcular o produto, utilizamos uma variável P que assume inicialmente o primeiro valor da relação e, para cada novo elemento, vai tendo o seu valor substituído pelo produto do seu valor atual pelo novo elemento. A partir daí, a média geométrica é raiz n ésima desse produto.

1. Chame de A o primeiro número dado. 2. Chame de N o número de elementos da relação 3. Faça P = A. 4. Repita N 1 vezes as instruções 4.1 e 4.2. 4.1. Chame de A o próximo número dado. 4.2. Substitua o valor de P por P x A. 5. Calcule M = Raiz(P, N) 6. Forneça M para o valor da média.

5. Basta observar que os dias da semana, sendo em número de 7, repetem se em ciclos de 7 dias. Assim, se 01/01/1900 foi uma segunda feira, o foram também os dias 08/01/1900, 15/01/1900, 22/01/1900, 29/01/1900, 05/02/1900 e assim sucessivamente. Basta então determinar o número de dias decorridos entre a data dada e o dia 01/01/1900 e calcular o resto da divisão por 7.

1. Determine o número n de dias entre a data dada e 01/01/1900. 2. Calcule o resto r da divisão de n por 7 3. Se r = 1 forneça como resposta segunda feira. 4. Se r = 2 forneça como resposta terça feira. 5. Se r = 3 forneça como resposta quarta feira. 6. Se r = 4 forneça como resposta quinta feira. 7. Se r = 5 forneça como resposta sexta feira. 8. Se r = 6 forneça como resposta sábado. 9. Se r = 0 forneça como resposta domingo.

6. Indicando por A(x, y) a travessia dos integrantes x e y e por V(x) a volta do integrante x, teríamos:

1. A(baterista, baixista). 2. V(baterista). 3. A(guitarrista, vocal). 4. V(baixista) 5. A(baixista, baterista)

Capítulo 2

1.b) ((pow(3, 2) == 9) && (acos(0) == 0)) || (4 % 8 == 3) = (1 && 0) || 0 = 0 || 0 = 0.

2.a) /*Programa que converte uma temperatura dada em graus Fahrenheit para graus

Celsius */ #include <stdio.h> main() { float Fahrenheit, Celsius; printf("Digite a temperatura em Fahrenheit"); scanf("%f", &Fahrenheit); Celsius = 5 * (Fahrenheit 32)/9; printf("A temperatura de %.2f Fahrenheit corresponde a %.2f Celsius ", Fahrenheit,

2.b) /*Programa que inverte um numero com tres algarismos*/

#include <stdio.h> main() { int Num, Invert, Unid, Dez, Cent; printf("Digite o numero a inverter "); scanf("%d", &Num); Unid = Num % 10; Dez = (Num % 100)/10; Cent = Num/100; Invert = Unid*100 + Dez*10 + Cent; printf("Invertendo se %d obtemos %d \n", Num, Invert); }

2.c /*Programa para somar duas frações*/

#include <stdio.h> main() { int Num1, Den1, Num2, Den2, Num, Den; printf("Digite os termos das fracoes \n"); scanf("%d %d %d %d", &Num1, &Den1, &Num2, &Den2); Num = Num1*Den2 + Num2*Den1; Den = Den1*Den2; printf("(%d/%d) + (%d/%d) = (%d/%d)", Num1, Den1, Num2, Den2, Num, Den); }

2.d) /* Programa que determina o maior multiplo de um inteiro menor ou igual a outro inteiro*/ #include <stdio.h> main() { int Num, Divisor, MaiorMultiplo; printf("Digite o inteiro do qual ser o número procurado deve ser multiplo \n"); scanf("%d", &Divisor); printf("Digite o inteiro que deve ser maior do o que múltiplo procurado\n"); scanf("%d", &Num); MaiorMultiplo = Num Num % Divisor; printf(" \n O maior multiplo de %d menor do que ou igual %d e' %d \n", Divisor, Num,

MaiorMultiplo); }

2.e) /*Programa para calcular o perimetro de um poligono regular de n lados inscrito numa circunferencia de raio r*/ #include <stdio.h>

#include <math.h> main() { const float Pi = 3.1416; float r, Perim, Seno; int n; printf("Digite o numero de lados do poligono e o raio \n"); scanf("%d %f", &n, &r); Perim = 2*n*r*sin(Pi/n); printf("Perimetro do poligono regular de %d lados inscrito numa circunferencia de raio %.2f: %.2f \n", n, r, Perim); }

3. /*Programa para permutar os conteudos de duas variaveis sem utilizar uma variavel auxiliar*/ #include <stdio.h> main() { float x, y; printf("Digite os dois numeros \n"); scanf("%f %f", &x, &y); printf("Conteudos antes da troca x = %0.1f, y = %0.1f \n", x, y); x = x + y; y = x y; x = x y; printf("Conteudos depois da troca x = %0.2f, y = %0.2f \n", x, y); }

4. /*Programa para determinar entrada mais duas parcelas inteiras de uma compra*/

#include <stdio.h> main() { float Compra, Entrada; int Parcelas; printf("Digite o valor da compra: "); scanf("%f", &Compra); Parcelas = Compra/3; Entrada = Compra 2*Parcelas; printf("Entrada = %0.2f, Parcelas %d.00 \n", Entrada, Parcelas); }

5. /*Programa para converter um tempo dado em segundos para horas, minutos e segundos*/ #include <stdio.h> main() { int Tempo, Horas, Minutos, Segundos; printf("Digite o valor do intervalo de tempo (em segundos): "); scanf("%d", &Tempo); Horas = Tempo/3600; Minutos = (Tempo % 3600)/60; Segundos = Tempo % 60; printf("O intervalo de tempo de %d segundos equivale a %d h %d min %d s \n", Tempo,

Horas, Minutos, Segundos); }

6. /*Programa para converter um tempo dado em minutos para horas, minutos e segundos*/

#include <stdio.h> main() { float Tempo, Segundos; int Horas, Minutos; printf("Digite o valor do intervalo de tempo (em minutos): "); scanf("%f", &Tempo); Horas = Tempo/60; Minutos = Tempo 60*Horas; Segundos = (Tempo 60*Horas Minutos)*60; printf("O intervalo de tempo de %.2f min equivale a %d h %d min %.2f s \n", Tempo,

Horas, Minutos, Segundos); }

7. /*Programa para discriminar as notas de um saque num caixa eletrônico*/

#include <stdio.h> main() { int s, Saque, Notas100, Notas50, Notas10, Notas5, Notas1; printf("Digite o valor do saque: "); scanf("%d", &Saque); Notas100 = Saque/100; s = Saque % 100; Notas50 = s/50; s = s % 50; Notas10 = s/10; s = s % 10; Notas5 = s/5; Notas1 = s % 5; printf("Valor do saque: %d \n Distribuicao da notas: \n %d de 100 \n %d notas de 50 \n %d notas de 10 \n %d notas de 5 \n %d notas de 1", Saque, Notas100, Notas50, Notas10, Notas5, Notas1); }

8. /*Programa para determinar a prestação de um financiamento*/

#include <math.h> main() { float Valor, i, Coef, Pot, Prestacao; int n; printf("Digite o valor do financiamento: "); scanf("%f", &Valor); printf("Digite o valor da taxa: "); scanf("%f", &i); i = i/100; puts("Digite o número de prestações: "); scanf("%d", &n); Pot = pow(1 + i, n); Coef = (Pot 1)/(i*Pot); Prestacao = Valor/Coef; printf("Financiamento: %.2f\n Taxa: %.2f\n Número de prestações: %d\n Valor da prestação: %.2f", Valor, 100*i, n, Prestacao); }

Capítulo 3

1. /*Programa que determina o intervalo de tempo decorrido entre dois instantes*/ main() { int h1, min1, s1, h2, min2, s2, h, min, s; puts("Digite o instante inicial (horas, minutos e segundos)"); scanf("%d %d %d", &h1, &min1, &s1); puts("Digite o instante final (horas, minutos e segundos)"); scanf("%d %d %d", &h2, &min2, &s2); h = h2 h1; min = min2 min1; s = s2 s1; if ((h < 0) || ((h == 0) && (min < 0)) || ((h == 0) && (min == 0) && (s < 0))) puts("Dados invalidos! O segundo instante é anterior ao primeiro"); else { if (s < 0) { min = min 1; s = s + 60; } if (min < 0) { h = h 1; min = min + 60; } printf( "Entre os instantes %d h %d min %d s e %d h %d min %d s passaram se %d h %d min %d s", h1, min1, s1, h2, min2, s2, h, min, s); }

2. /*Programa para arredondar um numero dado*/

#include <stdio.h> main() { float Num, ParteFrac; int Arredondamento; printf("Digite um numero "); scanf("%f", &Num); Arredondamento = Num; ParteFrac = Num Arredondamento; if (ParteFrac >= 0.5)

(Parte 1 de 5)

Comentários