Baixe o app para aproveitar ainda mais
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. }
Compartilhar