elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Guía actualizada para evitar que un ransomware ataque tu empresa


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Ayuda con ejercicio basico en C
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: Ayuda con ejercicio basico en C  (Leído 6,427 veces)
MartaR95

Desconectado Desconectado

Mensajes: 9


Ver Perfil
Ayuda con ejercicio basico en C
« en: 11 Diciembre 2016, 01:37 am »

Hola!! Estoy empezando a estudiar el lenguaje c y necesito un poco de ayuda con este ejercicio xD Esta casi todo hecho y solo falta compilarlo y ver si funciona, pero no estoy muy segura de como hacer la ultima parte.

Necesito hacer lo siguiente: cuando se elige la opción 4 del menu, el programa debe hacer un recorrido de la matriz (creo que es un recorrido) y comprobar si existen valores en la primera columna que sean superiores a 1, en la segunda columna que sean superiores a 0.2 y en la tercera columna que sean superiores a 0.02. Si encuentra estos valores aparecera un mensaje que indica que hay al menos un valor anomalo, de lo contrario, aparecerá un mensaje indicando que los valores que has introducido son correctos.

Si alguien me pudiera echar un cable estaría muy agradecida. Muchas gracias de antemano por vuestra ayuda y por vuestro tiempo! ^^

Código
  1. #include <conio.h>
  2. #include <math.h>
  3. #include <stdio.h>
  4. #include <stdlib.h>
  5. #define NUMPIPETAS 3
  6. #define MAXMEDICIONES 5
  7.  
  8. void leerMediciones(int m[NUMPIPETAS][MAXMEDICIONES]);
  9. void imprimirMediciones(int m[NUMPIPETAS][MAXMEDICIONES]);
  10. void calcularPromedio (int m[NUMPIPETAS][MAXMEDICIONES]);
  11. void calcularDesviacionTipica(int m[NUMPIPETAS][MAXMEDICIONES]);
  12. void calcularErrorAleatorio(int m[NUMPIPETAS][MAXMEDICIONES]);
  13. void buscarAnomalos(int m[NUMPIPETAS][MAXMEDICIONES]);
  14.  
  15. void main(){
  16.    int matriz[NUMPIPETAS][MAXMEDICIONES];
  17.    int m[NUMPIPETAS][MAXMEDICIONES], sumaColumnas[NUMPIPETAS];
  18.    float x[15];
  19.    int opc=0;
  20.    char choice;
  21.    do {
  22.        leerMediciones(m);
  23.        system("cls");
  24.        printf("-----------MENU-----------\n\n");
  25.        printf("1.- Introducir las mediciones\n");
  26.        printf("2.- Imprimir mediciones\n");
  27.        printf("3.- Calcular error aleatorio\n");
  28.        printf("4.- Buscar valores anomalos\n");
  29.        printf("0.- Salir\n\n");
  30.        printf("Elige una opcion: ");
  31.        scanf("%d",&opc);
  32.        printf("----------------------------\n");
  33.  
  34.        switch(opc)
  35.        {
  36.            case 1: leerMediciones(matriz);
  37.                    break;
  38.  
  39.            case 2: imprimirMediciones(matriz);
  40.                    break;
  41.  
  42.            case 3: calcularPromedio (matriz);
  43.                    calcularDesviacionTipica(matriz);
  44.                    calcularErrorAleatorio(matriz);
  45.                    break;
  46.  
  47.            case 4: buscarAnomalos(matriz);
  48.                    break;
  49.  
  50.            default:printf("Opcion no valida. Por favor, vuelva a elegir. \n");
  51.  
  52.        }
  53.      }while(choice !=4);
  54.  
  55.  
  56.        imprimirMatriz(matriz);
  57.     }
  58. void leerMediciones(int m[NUMPIPETAS][MAXMEDICIONES]){
  59.  
  60.    int i,j;
  61.  
  62.    printf("Introduzca los elementos de la matriz %dx%d\n",NUMPIPETAS,MAXMEDICIONES);//deberia poner aqui i y j en vez de numpipetas y maxmediciones??
  63.  
  64.      for(i=0;i<NUMPIPETAS;i++){
  65.          for(j=0;j<MAXMEDICIONES;j++){
  66.  
  67.            printf("Fila %d - Columna %d: ", i,j);
  68.            scanf("%d", &m[i][j]);
  69.  
  70.         }
  71.      }
  72. }
  73.  
  74. void imprimirMediciones(int m[NUMPIPETAS][MAXMEDICIONES]){
  75.  
  76.    int i,j;
  77.  
  78.    printf("Impresion de la Matriz:\n");
  79.  
  80.       for(i=0;i<NUMPIPETAS;i++){
  81.           for(j=0;j<MAXMEDICIONES;j++){
  82.  
  83.               printf("%d ", m[i][j]);
  84.           }
  85.                printf("\n");
  86.       }
  87. }
  88.  
  89.  
  90. void calcularPromedio (int m[NUMPIPETAS][MAXMEDICIONES]){
  91.  
  92.   int i,j;
  93.   float sumaTotal, sumaColumnas[NUMPIPETAS], suma, media;
  94. /*Ahora calculamos la media*/
  95. /*Pero primero hacemos la suma total*/
  96.  
  97.    sumaTotal=0;
  98.  
  99.     for(i=0;i<NUMPIPETAS;i++){
  100.        for(j=0;j<MAXMEDICIONES;j++){
  101.  
  102.            sumaTotal = sumaTotal + m[NUMPIPETAS][MAXMEDICIONES];
  103.  
  104.                     }
  105.                }
  106.  
  107.  
  108.  
  109.            /*Calculamos la suma de cada columna*/
  110.                for(j=0;j<MAXMEDICIONES;j++){
  111.                    suma = 0;
  112.                    for(i=0;i<NUMPIPETAS;i++){
  113.                        suma = suma + m[NUMPIPETAS][MAXMEDICIONES];
  114.                    }
  115.                  sumaColumnas[j] = suma;
  116.  
  117.            /*Ahora hacemos la media de cada columna*/
  118.                  media = suma/5;
  119.                }
  120.  
  121. }
  122.  
  123. void calcularDesviacionTipica(int m[NUMPIPETAS][MAXMEDICIONES]){
  124.  
  125.   int i,j;
  126.   float suma1=0, media, varianza, desviacion_tipica;
  127.   int x[i];
  128. /*Calculamos la desviacion tipica*/
  129.  
  130.    for(i=0;i<NUMPIPETAS;i++){
  131.        for(j=0;j<MAXMEDICIONES;j++){
  132.                {
  133.                 suma1 = suma1 + pow((media - x[i]), 2);
  134.                }
  135.  
  136.        }
  137.    }
  138.  
  139.    varianza = suma1 / 4;
  140.    desviacion_tipica = sqrt(varianza);
  141.        printf("Desviacion tipica = %.2f\n", desviacion_tipica);
  142.        getch();
  143.  
  144. }
  145.  
  146.  
  147. void calcularErrorAleatorio(int m[NUMPIPETAS][MAXMEDICIONES]){
  148.  
  149.   float error_aleatorio, desviacion_tipica;
  150.  
  151.    error_aleatorio = desviacion_tipica/sqrt(5);
  152.        printf("Error aleatorio = %.2f\n", error_aleatorio);
  153.        getch();
  154.  
  155. }
  156.  
  157. void buscarAnomalos(int m[NUMPIPETAS][MAXMEDICIONES]){
  158.    //buscar numeros mayores que 1 en la primera columna
  159.    //mayores que 0.2 en la segunda columna y que 0.02 en la tercera columna
  160.  
  161. int i,j;
  162.  
  163. /*Vamos a hacer un recorrido para calcular los valores anomalos*/
  164.    for(j=0;j<MAXMEDICIONES;j++){
  165.         for(i=0;i<NUMPIPETAS;i++){
  166.            if
  167.  
  168.  
  169.  
  170.         }
  171.    }
  172.  
  173.  
  174. }


« Última modificación: 11 Diciembre 2016, 05:15 am por engel lex » En línea

Kenji-chan

Desconectado Desconectado

Mensajes: 104


Ver Perfil
Re: Ayuda con ejercicio basico en C
« Respuesta #1 en: 11 Diciembre 2016, 03:30 am »

para poder hacer esa comprobación  tienes que trabajar con float y tu estas trabajando con int  ala hora de hacer la comprobacion te daria un error.

y tu programa que es lo que hace exactamente??


En línea

MartaR95

Desconectado Desconectado

Mensajes: 9


Ver Perfil
Re: Ayuda con ejercicio basico en C
« Respuesta #2 en: 11 Diciembre 2016, 03:48 am »

Hola! Probé con float pero me salia este error: 'array subscript is not an integer'.
Pues el programa deberia hacer lo siguiente:
Debe aparecer un menu con 4 opciones:
Si eliges la primera opcion te pedirá que introduzcas los datos de una matriz de 5 filas y 3 columnas.
Si eliges la opcion 2 imprime por pantalla la matriz con los datos introducios anteriormente.
Si eliges la opcion tres te dará la desviación tipica y el error aleatorio de los datos (te debe dar tres datos, uno para cada columna).
Y si eliges la opcion 4 pues debe hacer lo que explique antes: comprobar que en la primera columna de la matriz no haya ningun dato superior a 1, etc.

Gracias por contestar! Intentaré hacerlo con float (solo el ultimo apartado?) aunque como he comentado me da error  :)
En línea

Kenji-chan

Desconectado Desconectado

Mensajes: 104


Ver Perfil
Re: Ayuda con ejercicio basico en C
« Respuesta #3 en: 11 Diciembre 2016, 04:18 am »

muéstrame el código que tienes
En línea

Kenji-chan

Desconectado Desconectado

Mensajes: 104


Ver Perfil
Re: Ayuda con ejercicio basico en C
« Respuesta #4 en: 11 Diciembre 2016, 04:23 am »

para hacer las comprobaciones ambas deben ser del mismo tipo

m[0][0] es un int como en cualquier otra pocicion

y si pones m[2][1]>0.2 te dara error por que 0.2 es de tipo flotante

En línea

MAFUS


Desconectado Desconectado

Mensajes: 1.603



Ver Perfil
Re: Ayuda con ejercicio basico en C
« Respuesta #5 en: 11 Diciembre 2016, 10:39 am »

Las matrices deben ser reales, los indices para recorrerlas enteros.
En línea

MartaR95

Desconectado Desconectado

Mensajes: 9


Ver Perfil
Re: Ayuda con ejercicio basico en C
« Respuesta #6 en: 11 Diciembre 2016, 11:40 am »

No estoy muy segura de como hacer el recorrido que necesito  :/
Solo tengo la primera parte y no se si esta bien o como continuar: es el código que tengo arriba, a partir de
 voidBuscarAnomalos.
En línea

MartaR95

Desconectado Desconectado

Mensajes: 9


Ver Perfil
Re: Ayuda con ejercicio basico en C
« Respuesta #7 en: 11 Diciembre 2016, 14:32 pm »

Ya he terminado el ejercicio y ha salido bien (aunque he tenido que cambiar varias cosas xD).
Gracias a todos por vuestra ayuda : )
En línea

class_OpenGL


Desconectado Desconectado

Mensajes: 437

Si usas Direct3D, no eres mi amigo :P


Ver Perfil
Re: Ayuda con ejercicio basico en C
« Respuesta #8 en: 11 Diciembre 2016, 19:31 pm »

void leerMediciones(int m[NUMPIPETAS][MAXMEDICIONES])

Ni en C ni en C++ puedes pasar arreglos multidimensionales por parámetros, lo que puedes pasar son punteros dobles. Cuando haces este prototipo, el programa compila, pero cuando llamas a la función con un arreglo multidimensional, este se convierte a puntero a puntero, por lo que produce efectos indeterminados.
En línea

Programador aficionado. Me quiero centrar en programar videojuegos. La API que uso para crearlos es OpenGL
MAFUS


Desconectado Desconectado

Mensajes: 1.603



Ver Perfil
Re: Ayuda con ejercicio basico en C
« Respuesta #9 en: 11 Diciembre 2016, 20:06 pm »

En realidad C solo obvia la primera dimensión y transforma la firma a void leerMediciones(int *m[5])

Si por el contrario la firma fuese void leerMediciones int **m) y la se llama a la función pasando un array bidimensional el compilador informará de dos avisos:

c.c: In function ‘main’:
c.c:13:20: warning: passing argument 1 of ‘leerMediciones’ from incompatible pointer type [-Wincompatible-pointer-types]
     leerMediciones(m);
                    ^

c.c:6:6: note: expected ‘int **’ but argument is of type ‘int (*)[5]’
void leerMediciones(int **m) {
      ^
En línea

Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[PYTHON] Ayuda con ejercicio básico
Programación General
K4sS- 1 2,234 Último mensaje 7 Abril 2013, 22:47 pm
por K4sS-
Ayuda en ejercicio basico
.NET (C#, VB.NET, ASP)
The_Saint 2 2,343 Último mensaje 16 Abril 2013, 20:27 pm
por The_Saint
Ejercicio básico Python
Programación General
srg 3 2,602 Último mensaje 30 Octubre 2013, 01:46 am
por Mitsu
Consulta sobre ejercicio basico en C?
Programación C/C++
palacio29 5 3,087 Último mensaje 14 Diciembre 2016, 07:45 am
por jessec01
Ejercicio basico con c++ (Ayuda con el prinft) « 1 2 »
Programación C/C++
El_newbie2017 16 7,707 Último mensaje 4 Junio 2017, 00:23 am
por El_newbie2017
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines