Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: BJM en 22 Octubre 2012, 13:58 pm



Título: Instruccion if
Publicado por: BJM en 22 Octubre 2012, 13:58 pm
Este codigo debe buscar el numero mayor de un array de punteros mostrar su valor y posicion, pero en la instruccion IF me da error

Código
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3.  
  4. int main()
  5. {
  6.  int *array[10];
  7.  
  8.  for(int i=0; i<10; i++)
  9.  {
  10.    printf(" \n Ingrese valor de array[%d]:  ",i); scanf("%d", (array+i));
  11.  }
  12.  
  13.  int may=0, pos = 0;
  14.  for(int i=0; i<10; i++)
  15.    if (*(array+i) > may)
  16.    {
  17.      may = *(array+i);
  18.      pos = i;
  19.    }
  20.  
  21. for(int i=0; i<10; i++)
  22.  {
  23.    printf(" \n valor posicion array[%d]= %d ", i, *(array+i));
  24.  }
  25.  
  26.  printf(" \n El valor mayor es: %d , en la pos array[i]", may, pos);
  27.  printf("\n\n);
  28.  system("pause");
  29. }
  30.  
  31.  


Título: Re: Instruccion if
Publicado por: rir3760 en 22 Octubre 2012, 17:00 pm
El problema principal es: antes de utilizar un puntero debes asignarle una dirección de memoria valida. Como utilizas un array de punteros debes hacerlo por cada uno de sus elementos.

Lo usual es reservar memoria mediante malloc/calloc/realloc, supongo eso ya lo viste en clase. El programa con las correcciones:
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int main(void)
  5. {
  6.   int *p[10];
  7.  
  8.   for (int i = 0; i < 10; i++)
  9.      p[i] = malloc(sizeof *p[i]);
  10.  
  11.   for (int i = 0; i < 10; i++){
  12.      printf("Ingrese valor de array[%d]:\n", i);
  13.      scanf("%d", *(p + i));
  14.   }
  15.  
  16.   int may = *p[0];
  17.   int pos = 0;
  18.   for (int i = 1; i < 10; i++)
  19.      if (**(p + i) > may){
  20.         may = **(p + i);
  21.         pos = i;
  22.      }
  23.  
  24.   for (int i = 0; i < 10; i++)
  25.      printf("Valor en array[%d] = %d\n", i, **(p + i));
  26.   printf("El mayor es: %d, en la pos %d\n", may, pos);
  27.  
  28.   for (int i = 0; i < 10; i++)
  29.      free(p[i]);
  30.  
  31.   return 0;
  32. }

Un saludo


Título: Re: Instruccion if
Publicado por: BJM en 22 Octubre 2012, 17:44 pm
Gracias rir3760, copile tu codigo y en la linea 9, me indica error esto es lo que dice:
 invalid conversion from `void*' to `int*'

Código
  1. p[i] = malloc(sizeof *p[i]);

En esta linea me indica error, lo copile con dev-c++


Título: Re: Instruccion if
Publicado por: rir3760 en 22 Octubre 2012, 17:48 pm
copile tu codigo y en la linea 9, me indica error esto es lo que dice:
invalid conversion from `void*' to `int*'

Código
  1. p[i] = malloc(sizeof *p[i]);

En esta linea me indica error, lo copile con dev-c++
Si lo compilas como C no debe generar ningún error.

Si, por alguna extraña razón, lo compilas como C++ se genera el mensaje de error que mencionas.

Un saludo