Foros del Web » Programación para mayores de 30 ;) » C/C++ »

programa en c (Devc++)

Estas en el tema de programa en c (Devc++) en el foro de C/C++ en Foros del Web. Tengo una duda con este codigo Código: int main() { int n,i; double vmenor; double *elemento[50]; puts("Cuantos elementos "); scanf("%d",&n); for(i=0;i<n;i++) { printf("Elemento [%d]",i+1); scanf("%d",(elemento+i)); ...
  #1 (permalink)  
Antiguo 08/06/2009, 11:19
 
Fecha de Ingreso: junio-2009
Mensajes: 6
Antigüedad: 14 años, 10 meses
Puntos: 0
Pregunta programa en c (Devc++)

Tengo una duda con este codigo
Código:
int main()
{
    int n,i;
    double vmenor;
    double *elemento[50];
    puts("Cuantos elementos ");
    scanf("%d",&n);
    for(i=0;i<n;i++)
    {
                    printf("Elemento [%d]",i+1);
                    scanf("%d",(elemento+i));
    }
    vmenor = menor(n,*elemento);
    getch();
    printf("El menor es %d \n\n",vmenor);
    system("pause");
    return 0;
}
double menor(int n,double *elemento)
{
       double men;
       int j,m;
       men = elemento[0];
       for(j=1;j<n;j++)
       {
                       if(elemento[j]<men)
                            men=elemento[j];
       }
       return men;
}
lo que quiero que haga el programa es leer n numeros e imprimir el menor pero lo tengo q hacer con punteros y no se utilizarlos muy bien como habran notado cuando lo compilo no marca errores pero cuando lo corro con debug me parace un erro que dice "An access violation(Segmentation Fault) raised in your program"
espero que alguien pueda ayudarme con este programa
  #2 (permalink)  
Antiguo 09/06/2009, 01:34
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años
Puntos: 74
Respuesta: programa en c (Devc++)

Esto son 50 punteros a double:
double *elemento[50];

Esto querrias vos:
double elemento[50];

Despues tenes que pasarlo correctamente:
vmenor = menor(n, elemento);

En menor inverti la condicion:
if(men < elemento[j])
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #3 (permalink)  
Antiguo 18/06/2009, 09:15
 
Fecha de Ingreso: junio-2009
Mensajes: 6
Antigüedad: 14 años, 10 meses
Puntos: 0
Respuesta: programa en c (Devc++)

lo que debe hacer el programa en si es tomar n numeros y solamente decir cual es el menor pero debo utilizar punteros para hacerlo por eso hice el
[CODE]double *elemento[50][\CODE]
pero no se utilizar bien los punteros ademas el maestro me dijo que cuando llamo a la funcion con
[CODE] menor(n,*elemento)[\CODE]
estoy pasando unicamente UN valor de elemento, y en un libro de programacion en c, entendi que asi estoy pasando la referencia al vector y me confundio aun mas
aunq la verdad el error que comente ocurre cuando hago un debug, antes de pedir el 2 elemento
  #4 (permalink)  
Antiguo 18/06/2009, 09:24
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años
Puntos: 74
Respuesta: programa en c (Devc++)

Proba lo que te dije ...
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #5 (permalink)  
Antiguo 18/06/2009, 10:16
 
Fecha de Ingreso: junio-2009
Mensajes: 6
Antigüedad: 14 años, 10 meses
Puntos: 0
Respuesta: programa en c (Devc++)

ahora lo tengo de esta manera

Código:
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
double menor(int n,double elemento);
double men;
int main()
{
    int n,i;
    double vmenor;
    double elemento[50];
    puts("Cuantos elementos ");
    scanf("%d",&n);
    for(i=0;i<n;i++)
    {
                    printf("Elemento [%d]",i+1);
                    scanf("%d",&elemento[i]);
                    fflush(stdin);
    }
    vmenor = menor(n,elemento);//paso por referencia
    getch();
    printf("El menor es %d \n\n",men);
    system("pause");
    return 0;
}
double menor(int n,double elemento)
{
       //double *men;
       int j,m;
       men = elemento[0];
       for(j=1;j<n;j++)
       {
                       if(elemento[j] < men)
                            men = elemento[j];
       }
       return (men);
}
pero de esta manera no estoy usando punteros y me sale incompatible type for argument 2 of `menor' en vmenor = menor(n,elemento)

en las asignaciones y comparacion de men arroja un error de 29 E:\programacion\examen_1.c subscripted value is neither array nor pointer

pero de esta manera no uso los apuntadores y eso es lo q necesito hacer
  #6 (permalink)  
Antiguo 18/06/2009, 10:33
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años
Puntos: 74
Respuesta: programa en c (Devc++)

Yo no te dije que no usaras punteros para la funcion menor, sino que no declares 50 punteros cuando lo que queres es un array de 50 elementos (que se pasa siempre como puntero, tal como leiste, al pasarse por referencia), la funcion menor no tiene que cambiar su signature (el segundo parametro tiene que seguir siendo double *).
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #7 (permalink)  
Antiguo 18/06/2009, 10:35
 
Fecha de Ingreso: junio-2009
Mensajes: 6
Antigüedad: 14 años, 10 meses
Puntos: 0
Respuesta: programa en c (Devc++)

ahora lo tengo asi
Código f:
Ver original
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<conio.h>
  4. double *menor(int n,double *elemento);
  5. double men;
  6. int main()
  7. {
  8.     int n,i;
  9.     double *vmenor;
  10.     double *elemento[50];
  11.     puts("Cuantos elementos ");
  12.     scanf("%d",&n);
  13.     for(i=0;i<n;i++)
  14.     {
  15.                     printf("Elemento [%d]",i+1);
  16.                     scanf("%d",&elemento[i]);
  17.     }
  18.     menor(n,*elemento);
  19.     getch();
  20.     printf("El menor es %d \n\n",men);
  21.     system("pause");
  22.     return 0;
  23. }
  24. double *menor(int n,double *elemento)
  25. {
  26.        //double *men;
  27.        int j,m;
  28.        men = *elemento;
  29.        for(j=1;j<n;j++)
  30.        {
  31.                        if(elemento[j] < men)
  32.                             men = *elemento;
  33.        }
  34.        return 0;
  35. }
y el error de la violacion de acceso aprace en la linea
Código:
 men = *elemento;
tambien intente con
men = elemento[0]; // el primer elemento pero sigue teniendo el mismo error

alguien conoce alguna solucion ?
  #8 (permalink)  
Antiguo 18/06/2009, 10:46
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años
Puntos: 74
Respuesta: programa en c (Devc++)

La solucion es pasar el array correctamente, mira mi primer mensaje, tenes que pasarlo asi:
Código:
menor(n, elemento);
Ademas hay mas problemas, tenes que recibir lo que sea doble con %lf y no con %d. Y la condicion orignal estaba bien, mal por mi:

Código:
if(men > elemento[j])
Asi funciona bien:
Código:
double menor(int n,double *elemento);

int main()
{
    int n,i;
    double vmenor;

    double elemento[50];
    puts("Cuantos elementos ");
    scanf("%d",&n);
    for(i=0;i<n;i++)
    {
       printf("Elemento [%d]",i+1);
       scanf("%lf",&elemento[i]);
    }

    vmenor = menor(n, elemento);
    getchar();
    printf("El menor es %lf \n\n",vmenor);
    system("pause");
    return 0;
}
double menor(int n,double *elemento)
{
       double men;
       int j,m;
       men = elemento[0];
       for(j=1;j<n;j++)
       {
         if(men > elemento[j])
           men=elemento[j];
       }
       return men;
}
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO

Última edición por Eternal Idol; 18/06/2009 a las 11:05
  #9 (permalink)  
Antiguo 18/06/2009, 14:58
 
Fecha de Ingreso: junio-2009
Mensajes: 3
Antigüedad: 14 años, 10 meses
Puntos: 0
Sonrisa Respuesta: programa en c (Devc++)

darkchaos, aqui te dejo el programa con punteros.

Código:
#include <stdio.h>
#include <stdlib.h>

double menor(int n, int *ptrElemento)
{
       int men;
       int j;       
       for(j=0;j<n;j++)
       {
                       if(*(ptrElemento+j)<men){ //*(ptrElemento+j) = elemento[j]
                            men= *(ptrElemento+j);                            
                       }
       }
       return men;
}

int main()

{
    int i, n=10;
    int vmenor;
    int elemento[n];
    int *ptrInt = 0; //Inicializamos el puntero

    for(i=0;i<n;i++) {
         printf("Elemento [%d]: ",i+1);
         scanf("%i", &elemento[i]);		 

    }
	
    ptrInt = elemento; //apuntamos al primer elemento del arreglo elemento[50]
    vmenor = menor(n, ptrInt);
    //getch();
    printf("El menor es %i \n\n",vmenor);

    //system("pause");
    return 0;
}
  #10 (permalink)  
Antiguo 18/06/2009, 15:02
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años
Puntos: 74
Respuesta: programa en c (Devc++)

jairGrunge excepto que usas inten lugar de double no hay diferencia, un array se pasa por referencia asi que tu programa lo unico que hace es introducir una redundancia, un puntero al array.
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #11 (permalink)  
Antiguo 19/06/2009, 06:15
 
Fecha de Ingreso: junio-2009
Mensajes: 3
Antigüedad: 14 años, 10 meses
Puntos: 0
Respuesta: programa en c (Devc++)

Cita:
Iniciado por Eternal Idol Ver Mensaje
jairGrunge excepto que usas inten lugar de double no hay diferencia, un array se pasa por referencia asi que tu programa lo unico que hace es introducir una redundancia, un puntero al array.

darkchaos dijo:
Cita:
lo que quiero que haga el programa es leer n numeros e imprimir el menor pero lo tengo q hacer con punteros
Utilice un apuntador para saber cual es el menor de los datos en el arreglo elemento.
  #12 (permalink)  
Antiguo 19/06/2009, 06:41
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años
Puntos: 74
Respuesta: programa en c (Devc++)

Si, aunque es irrelevante debido a lo anteriormente explicado que pareces no comprender, lo que no dijo fue que queria trabajar con enteros y devolver una variable de tipo int en una funcion que deberia devolver double.
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #13 (permalink)  
Antiguo 19/06/2009, 08:45
 
Fecha de Ingreso: junio-2009
Mensajes: 3
Antigüedad: 14 años, 10 meses
Puntos: 0
Respuesta: programa en c (Devc++)

Cita:
Iniciado por Eternal Idol Ver Mensaje
Si, aunque es irrelevante debido a lo anteriormente explicado que pareces no comprender, lo que no dijo fue que queria trabajar con enteros y devolver una variable de tipo int en una funcion que deberia devolver double.

Esto(tipo int) es solo un pequeño detalle, lo que el postulante indico esta reflejado.
  #14 (permalink)  
Antiguo 19/06/2009, 09:48
 
Fecha de Ingreso: junio-2009
Mensajes: 6
Antigüedad: 14 años, 10 meses
Puntos: 0
Respuesta: programa en c (Devc++)

Gracias Eternal Idol y jairGrunge por la ayuda estoy revisando los dos aunque el primero si tengo duda de los punteros en el segundo lo compile con dev c++ en vista y corrio sin problemas cuando lo compile en dev c++ en xp siempre no importando cuantos numeros lea el resultado era -1
muchas gracias a los dos
saludos
  #15 (permalink)  
Antiguo 19/06/2009, 09:55
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años
Puntos: 74
Respuesta: programa en c (Devc++)

De nada, lee todo y recorda lo que ya encontraste un array se pasa por referencia.
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 06:07.