Buscar

Funções e Procedimentos

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 10 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 10 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 10 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Funções e Procedimentos 
 
1) 
Descrição 
Problema 1: Escreva um programa que calcule as raízes reais de uma equação de 
segundo grau, ou emita uma mensagem caso as mesmas não existam. Este programa 
deve ter no mínimo 5 funções contando com a função "main". 
 
Exemplo 
Entrada 1: 
1 5 6 
 
Saída 1: 
Raiz 1: -2.00 
Raiz 2: -3.00 
 
Entrada 2: 
1 -4 -5 
 
Saída 2: 
Raiz 1: 5.00 
Raiz 2: -1.00 
 
Entrada 3: 
4 8 6 
 
Saída 3: 
Não existem raízes reais 
 
 
1. #include <stdio.h> 
2. #include <math.h> 
3. 
4. void ler(int *a,int *b,int *c){ 
5. scanf("%d %d %d", a, b, c); 
6. return; 
7. } 
8. int delta1(int a, int b, int c){ 
9. int delta; 
10. delta = pow(b, 2) - 4 * a * c; 
11. return delta; 
12. } 
13. 
14. float result1(int b, int c){ 
15. float resultado; 
16. resultado = -c/(float)b; 
17. return resultado; 
18. } 
19. float result2(int b, int delta, int a){ 
20. float resultado; 
21. resultado = (-b + sqrt(delta))/ 2 * (float)a; 
22. return resultado; 
23. } 
24. 
25. float result3(int b, int a, int delta){ 
26. float resultado; 
27. resultado = (-b - sqrt(delta))/2 * (float)a; 
28. return resultado; 
29. } 
30. 
31. int main() 
32. { 
33. int coefa, coefb, coefc, delta; 
34. float resultado, resultado1, resultado2; 
35. ler(&coefa, &coefb, &coefc); 
36. delta = delta1(coefa, coefb, coefc); 
37. if(coefa == 0){ 
38. resultado = result1(coefb, coefc); 
39. printf("Raiz: %.2f", resultado); 
40. } 
41. else{ 
42. if(delta < 0){ 
43. printf("Não existem raízes reais"); 
44. } 
45. else if(delta > 0){ 
46. resultado1 = result2(coefb, delta, coefa); 
47. resultado2 = result3(coefb, coefa, delta); 
48. printf("Raiz 1: %.2f\nRaiz 2: %.2f", resultado1, resultado2); 
49. } 
50. else{ 
51. resultado1 = result2(coefb, delta, coefa); 
52. printf("Raiz: %.2f", resultado1); 
53. } 
54. } 
55. } 
 
 
 
 
 
2) 
Descrição 
Problema 2: Escreva um programa, que calcule a quantidade de fatores primos 
(Omega) de um número desejado positivo. Formalmente, se a decomposição de n em 
fatores P primos resulta em p1^α1 p2^α2...pk^αk , queremos Omega(n) = 
SOMATORIO(αi). Por exemplo, n = 20 = 2^2 5^1, assim Omega(20) = 2 + 1 = 3. 
Informalmente, queremos saber quantas vezes um valor pode ser dividido por 
números primos. Este programa deve ter no mínimo 4 funções contando com a função 
"main". 
 
Exemplo 
Entrada 1: 
1 
Saída 1: 
Omega(1)=0 
 
Entrada 2: 
15 
Saída 2: 
Omega(15)=2 
 
Entrada4: 
10 
Saída4: 
Omega(10)=2 
 
 
 
 
 
 
 
1. #include <stdio.h> 
2. 
3. int ler(int valor){ 
4. scanf("%d",&valor); 
5. return valor; 
6. } 
7. int omega(int num){ 
8. int cont=0, var, i; 
9. var = num; 
10. for(i=2; i<=num; i++){ 
11. while(var % i == 0){ 
12. var = var/i; 
13. cont++; 
14. } 
15. } 
16. return cont; 
17. } 
18. 
19. void escrever(int a, int b){ 
20. printf("Omega(%d)=%d", a, b); 
21. return; 
22. } 
23. 
24. int main() 
25. { 
26. int var, num, omeg; 
27. num = ler(num); 
28. omeg = omega(num); 
29. escrever(num, omeg); 
30. 
31. } 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3) 
Descrição 
Problema 3: Escreva um programa que calcule todas as derivadas de uma dada equação 
de grau N. Este programa deve ter no mínimo 3 funções contando com a função 
"main". 
 
Exemplo 
Entrada 1: 
4 
1 2 3 4 5 
Saída 1: 
Equação: 1.0x^4 + 2.0x^3 + 3.0x^2 + 4.0x^1 + 5.0x^0 
Dev 1: Equação: 4.0x^3 + 6.0x^2 + 6.0x^1 + 4.0x^0 
Dev 2: Equação: 12.0x^2 + 12.0x^1 + 6.0x^0 
Dev 3: Equação: 24.0x^1 + 12.0x^0 
Dev 4: 24.0x^0 
 
Entrada 2: 
-1 
1 1 1 1 
Saída 2: 
Grau inválido 
 
Entrada 3: 
10 
1 2 3 4 5 6 7 8 9 10 11 
 
Saída 3: 
Equação: 1.0x^10 + 2.0x^9 + 3.0x^8 + 4.0x^7 + 5.0x^6 + 6.0x^5 + 7.0x^4 + 8.0x^3 + 
9.0x^2 + 10.0x^1 + 11.0x^0 
Dev 1: Equação: 10.0x^9 + 18.0x^8 + 24.0x^7 + 28.0x^6 + 30.0x^5 + 30.0x^4 + 
28.0x^3 + 24.0x^2 + 18.0x^1 + 10.0x^0 
Dev 2: Equação: 90.0x^8 + 144.0x^7 + 168.0x^6 + 168.0x^5 + 150.0x^4 + 120.0x^3 + 
84.0x^2 + 48.0x^1 + 18.0x^0 
Dev 3: Equação: 720.0x^7 + 1008.0x^6 + 1008.0x^5 + 840.0x^4 + 600.0x^3 + 360.0x^2 
+ 168.0x^1 + 48.0x^0 
Dev 4: Equação: 5040.0x^6 + 6048.0x^5 + 5040.0x^4 + 3360.0x^3 + 1800.0x^2 + 
720.0x^1 + 168.0x^0 
Dev 5: Equação: 30240.0x^5 + 30240.0x^4 + 20160.0x^3 + 10080.0x^2 + 3600.0x^1 + 
720.0x^0 
Dev 6: Equação: 151200.0x^4 + 120960.0x^3 + 60480.0x^2 + 20160.0x^1 + 3600.0x^0 
Dev 7: Equação: 604800.0x^3 + 362880.0x^2 + 120960.0x^1 + 20160.0x^0 
Dev 8: Equação: 1814400.0x^2 + 725760.0x^1 + 120960.0x^0 
Dev 9: Equação: 3628800.0x^1 + 725760.0x^0 
Dev 10: 3628800.0x^0 
 
Entrada 4: 
5 
3 2 1 -4 2 -3 
Saída 4: 
Equação: 3.0x^5 + 2.0x^4 + 1.0x^3 - 4.0x^2 + 2.0x^1 - 3.0x^0 
Dev 1: Equação: 15.0x^4 + 8.0x^3 + 3.0x^2 - 8.0x^1 + 2.0x^0 
Dev 2: Equação: 60.0x^3 + 24.0x^2 + 6.0x^1 - 8.0x^0 
Dev 3: Equação: 180.0x^2 + 48.0x^1 + 6.0x^0 
Dev 4: Equação: 360.0x^1 + 48.0x^0 
Dev 5: 360.0x^0 
 
 
 
 
 
 
 
 
 
 
 
1. #include <stdio.h> 
2. void ler(float a[], int n){ 
3. int i; 
4. i = n; 
5. while(i >= 0){ 
6. scanf("%f", &a[i]); 
7. i--; 
8. } 
9. return; 
10. } 
11. void derivada(float a[], int n, float der[]); 
12. void escrever(float a[], int n); 
13. 
14. int main() 
15. { 
16. int i,grau; 
17. float poli[40], der[40]; 
18. 
19. scanf("%d", &grau); 
20. if(grau < 0){ 
21. printf("Grau inválido"); 
22. } 
23. else{ 
24. ler(poli, grau); 
25. escrever(poli, grau); 
26. derivada(poli, grau, der); 
27. } 
28. 
29. } 
30. void escrever(float a[], int n){ 
31. int i; 
32. printf("Equação: %.1fx^%d ", a[n], n); 
33. i = n - 1; 
34. while(i>=0){ 
35. if(i == 0){ 
36. if(a[i] >= 0){ 
37. printf("+ %.1fx^%d", a[i], i); 
38. } 
39. else{ 
40. printf("- %.1fx^%d", -a[i], i); 
41. } 
42. } 
43. else if(a[i] != 0){ 
44. if(a[i] >= 0){ 
45. printf("+ %.1fx^%d ", a[i], i); 
46. } 
47. else{ 
48. printf("- %.1fx^%d ", -a[i], i); 
49. } 
50. } 
51. i--; 
52. } 
53. return; 
54. } 
55. 
56. void derivada(float a[], int n,float der[]){ 
57. int cont=1; 
58. while(n>0){ 
59. int k=n-1, j=n; 
60. while(j >= 0){ 
61. der[k] = a[j] * j; 
62. j--; 
63. k--; 
64. } 
65. int i; 
66. i = n-1; 
67. if(n > 1){ 
68. printf("\nDev %d: Equação: %.1fx^%d ", cont,der[i], i); 
69. } 
70. else{ 
71. printf("\nDev %d: %.1fx^%d ", cont,der[i], i); 
72. } 
73. i = n-2; 
74. while(i>=0){ 
75. if(i == 0){ 
76. if(der[i] >= 0){ 
77. printf("+ %.1fx^%d", der[i], i); 
78. } 
79. else{ 
80. printf("- %.1fx^%d", -der[i], i); 
81. } 
82. } 
83. else if(der[i] != 0){ 
84. if(der[i] >= 0){ 
85. printf("+ %.1fx^%d ", der[i], i); 
86. } 
87. else{ 
88. printf("- %.1fx^%d ", -der[i], i); 
89. } 
90. } 
91. i--; 
92. } 
93. n--; 
94. j=n; 
95. while(j >= 0){ 
96. a[j] = der[j]; 
97. j--; 
98. } 
99. cont++; 
100. } 
101. return; 
102. 
103. } 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4) 
Tarefa 05 - Funções e Procedimentos 
Descrição 
Problema 4: Escreva um programa que calculea multiplicação de 2 matrizes, ou 
emita uma mensagem caso a operação não seja possível. Importante lembrar que para 
a multiplicação da matriz 1 com a matriz 2 seja possível, as dimensões das 
matrizes devem seguir a seguinte regra: Seja a dimensão da matriz 1 igual a M x N, 
logo a matriz 2 precisa ser N x O para resultar em uma matriz 3 com dimensões M x 
O. Assim a dimensão coluna da matriz 1 deve ser igual a dimensão linha da matriz 
2. Este programa deve ter no mínimo 5 funções contando com a função "main". 
 
Exemplo 
Entrada 1: 
2 2 
2 2 
1 1 2 1 
2 4 3 5 
 
Saída 1: 
Matriz 1 (2x2) 
1 1 
2 1 
 
Matriz 2 (2x2) 
2 4 
3 5 
Matriz 1 * Matriz 2 (2x2) 5 9 
7 13 
 
Entrada 2: 
2 3 
3 2 
10 1 6 9 3 8 
8 5 4 5 7 0 
 
Saída 2: 
Matriz 1 (2x3) 
10 1 6 
9 3 8 
Matriz 2 (3x2) 
8 5 
4 5 
7 0 
Matriz 1 * Matriz 2 (2x2) 
126 55 
140 60 
 
Entrada 3: 
5 5 
5 10 
3 4 1 0 1 4 4 9 2 1 5 8 0 9 9 7 0 8 9 4 2 6 10 2 7 
 
8 7 5 4 8 0 0 1 9 8 7 2 10 2 1 4 6 2 8 4 0 1 10 3 0 8 4 3 6 6 2 10 3 1 5 5 9 7 10 
2 8 1 5 6 9 6 0 5 2 5 
 
Saída 3: 
Matriz 1 (5x5) 
3 4 1 0 1 
 
4 4 9 2 1 
 
5 8 0 9 9 
 
7 0 8 9 4 
 
2 6 10 2 7 
 
Matriz 2 (5x10) 8 7 5 4 8 0 0 1 9 8 
 
7 2 10 2 1 4 6 2 8 4 
 
0 1 10 3 0 8 4 3 6 6 
 
2 10 3 1 5 5 9 7 10 2 
 
8 1 5 6 9 6 0 5 2 5 
 
Matriz 1 * Matriz 2 (5x10) 
60 31 70 29 37 30 28 19 67 51 
 
72 66 161 59 55 104 78 58 144 111 
 
186 150 177 99 174 131 129 129 217 135 
 
106 151 162 85 137 133 113 114 209 142 
 
118 63 211 94 95 156 94 93 160 139 
Entrada 4: 
3 3 
2 3 
5 10 3 8 3 2 0 6 10 
1 2 8 0 8 7 
Saída 4: 
Não é possível realizar a operação, pois as matrizes não seguem a regra MxN, NxO = 
MxO. 
 
 
1. #include <stdio.h> 
2. void ler_mat(int a[][20], int b[][20],int *n1, int *n2, int *n3, int *n4){ 
3. int i,j; 
4. scanf("%d %d", n1, n2); 
5. scanf("%d %d", n3, n4); 
6. 
7. for(i=0; i <*n1; i++){ 
8. for(j=0; j<*n2; j++){ 
9. scanf("%d", &a[i][j]); 
10. } 
11. } 
12. for(i=0; i <*n3; i++){ 
13. for(j=0; j<*n4; j++){ 
14. scanf("%d", &b[i][j]); 
15. } 
16. } 
17. return; 
18. } 
19. void escrever_mat(int a[][20], int b[][20],int c[][20],int n1, int n2, int n3, 
int n4){ 
20. int i, j; 
21. if(n2 == n3){ 
22. printf("Matriz 1 (%dx%d)\n", n1,n2); 
23. for(i=0; i <n1; i++){ 
24. for(j=0; j<n2; j++){ 
25. printf("%d\t", a[i][j]); 
26. } 
27. printf("\n"); 
28. } 
29. printf("\n"); 
30. printf("Matriz 2 (%dx%d)\n", n3,n4); 
31. for(i=0; i <n3; i++){ 
32. for(j=0; j<n4; j++){ 
33. printf("%d\t", b[i][j]); 
34. } 
35. printf("\n"); 
36. } 
37. printf("\n"); 
38. printf("Matriz 1 * Matriz 2 (%dx%d)\n",n1, n4); 
39. for(i=0; i <n1; i++){ 
40. for(j=0; j<n4; j++){ 
41. printf("%d\t", c[i][j]); 
42. } 
43. printf("\n"); 
44. } 
45. } 
46. else{ 
47. printf("Não é possível realizar a operação, pois as matrizes não 
seguem a regra MxN, NxO = MxO."); 
48. } 
49. 
50. 
51. return; 
52. } 
53. void multiplicar_mat(int a[][20], int b[][20],int c[][20], int n1, int n2, int 
n3, int n4); 
54. 
55. 
56. int main() 
57. { 
58. int matriz1[20][20], matriz2[20][20], matriz_final[20][20], i,j, n1, n2, 
n3,n4; 
59. 
60. int n5=0, n6=0; 
61. ler_mat(matriz1, matriz2, &n1, &n2, &n3, &n4); 
62. multiplicar_mat(matriz1, matriz2, matriz_final,n1, n2, n3,n4); 
63. escrever_mat(matriz1, matriz2, matriz_final, n1, n2, n3,n4); 
64. } 
65. 
66. 
67. void multiplicar_mat(int a[][20], int b[][20], int c[][20],int n1, int n2, int 
n3, int n4){ 
68. int sum=0, i, j, k; 
69. if(n2 == n3){ 
70. for(i=0;i<n1;i++){ 
71. for(j=0;j<n4;j++){ 
72. for(k=0;k<n3;k++){ 
73. sum += a[i][k]*b[k][j]; 
74. } 
75. c[i][j]=sum; 
76. sum=0; 
77. } 
78. } 
79. } 
80. 
81. return; 
82. 
83. }

Outros materiais