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

 

 


Tema destacado: Los 10 CVE más críticos (peligrosos) de 2020


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

Desconectado Desconectado

Mensajes: 12


Ver Perfil
Problema de compilación
« en: 8 Agosto 2013, 22:01 pm »

Hola buenas estoy empezando en esto de la programación y en la carrera nos piden que definamos una estructura llamada Array, y posteriormente definamos unas funciones. El problema lo tengo a la hora de definir la función ya que me tira error de compilación en la linea donde se define la función. Este es el código.

Código:
// Crea y devuelve un array de tamaño n = lsup-linf+1
// con los números enteros comprendidos entre los límites
// linf y lsup, asignados al array de forma aleatoria entre los
// índices 1 y n. El array contendrá finalmente una
// permutación con los números enteros comprendidos entre
// dichos límites.
// Req: linf<=lsup
struct Array {int *v; int n;};

Array ArrayCreaAleatorio(int linf, int lsup;)
{
      Array a;
      a.n=lsup-linf+1;
      a.v=malloc(sizeof(Array)*a.n);
      for (int i=0; i<a.n;i++)
          a.v[i]=linf+i;
      for (int j=0;j<=a.n-2;j++)
      {
          int k=EnteroAleatorio(j+1,a.n-1);
          int aux=a.v[j];
          a.v[j]=a.v[k];
          a.v[k]=aux;
      }
      return a;      
}

Si alguien me puede decir donde la estoy jodiendo, le estaría muy agradecido.


« Última modificación: 8 Agosto 2013, 22:19 pm por shulneos » En línea

avesudra


Desconectado Desconectado

Mensajes: 724


Intentando ser mejor cada día :)


Ver Perfil
Re: Problema de compilación
« Respuesta #1 en: 8 Agosto 2013, 23:08 pm »

Hola buenas, suponiendo que EnteroAleatorio esté definido, el único problema es este:
Código
  1. Array ArrayCreaAleatorio(int linf, int lsup;)
Fíjate en el penúltimo carácter, eso no está bien, el punto y coma sobra, por lo que la línea quedaría:
Código
  1. Array ArrayCreaAleatorio(int linf, int lsup)

¡Un saludo!


En línea

Regístrate en
shulneos

Desconectado Desconectado

Mensajes: 12


Ver Perfil
Re: Problema de compilación
« Respuesta #2 en: 8 Agosto 2013, 23:56 pm »

Si EnteroAleatorio está definido en una función anterior:
Código:
int EnteroAleatorio(int linf, int lsup)
{
    return linf+rand()%(lsup-linf+1);
}

He corregido lo del ; de la función pero me sigue tirando el mismo error:
 syntax error before "ArrayCreaAleatorio"

Gracias por responder
En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: Problema de compilación
« Respuesta #3 en: 9 Agosto 2013, 01:22 am »

Estas compilando ese fragmento como C++, ¿Correcto?

Con la modificación que te indico avesudra debería compilar sin problemas, si no es así por favor publica el código fuente completo.

Un saludo
En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
shulneos

Desconectado Desconectado

Mensajes: 12


Ver Perfil
Re: Problema de compilación
« Respuesta #4 en: 9 Agosto 2013, 01:26 am »

No, compilo en C, no se las diferencias que habrá porque es mi primer año de carrera pero de momento C. Publico todo el código para verlo mejor.
Código:
#include <stdlib.h>
#include <stdio.h>


// Lee por teclado dos enteros linf y lsup,
// tales que linf<=lsup.

void LimitesLee(int * linf, int * lsup)
{
     printf("Introduzca dos enteros para los límites inferior y superior: \n");
     scanf ("%d %d",linf,lsup);
     while (*linf>*lsup)
     {
           printf("El limite inferior no puede ser mayor que el superior\n");
           printf("Por favor, vuelva a introducir los límites\n");
           scanf("%d %d",linf,lsup);
     }
}
// Imprime por pantalla los enteros linf y lsup con formato:
// Limites: [linf,lsup]
void LimitesImprime(int linf, int lsup)
{
     printf("Los límites inferior y superior son:[%d,%d]\n",linf,lsup);
}
// Genera y devuelve un entero aleatorio entre los límites
// linf y lsup.
int EnteroAleatorio(int linf, int lsup)
{
    return linf+rand()%(lsup-linf+1);
}
// Imprime por pantalla un entero e con formato:
// Entero: e
void EnteroImprime(int e)
{
     printf("Entero: %d \n",e);
}



// Crea y devuelve un array de tamaño n = lsup-linf+1
// con los números enteros comprendidos entre los límites
// linf y lsup, asignados al array de forma aleatoria entre los
// índices 1 y n. El array contendrá finalmente una
// permutación con los números enteros comprendidos entre
// dichos límites.
// Req: linf<=lsup
struct Array {int *v; int n;}

Array ArrayCreaAleatorio(int linf, int lsup)
{
      Array a;
      a.n=lsup-linf+1;
      a.v=malloc(sizeof(Array)*(a.n));
      for (int i=0; i<a.n;i++)
          a.v[i]=linf+i;
      for (int j=0;j<=a.n-2;j++)
      {
          int k=EnteroAleatorio(j+1,a.n-1);
          int aux=a.v[j];
          a.v[j]=a.v[k];
          a.v[k]=aux;
      }
      return a;      
}



int main()
{
    char nombre[10];
    int  edad;
    printf ("Hola mundo\n");
    printf ("Dime tu nombre: ");
    scanf  ("%s",nombre);
    printf ("Dime tu edad: ");
    scanf  ("%d",&edad);
    while(edad<0)
              {
              printf("Edad erronea, introduce edad: ");
              scanf("%d",&edad);
              }
    printf ("Hola %s tienes %d tacos\n",nombre,edad);
    
    int linf=0;
    int lsup=0;
    int ernd=0;
    int opcion=0;
    Array a=ArrayCreaAleatorio(linf,lsup);
    while (opcion!=7)
    {
          printf("1. Imprimir en pantalla los límites actuales.\n");
          printf("2. Imprimir en pantalla el entero aleatorio actual.\n");
          printf("3. Imprimir en pantalla el array actual.\n");
          printf("4. Leer desde teclado nuevos límites.\n");
          printf("5. Generar un nuevo entero aleatorio dentro de los límites actuales.\n");
          printf("6. Generar un nuevo array aleatorio dentro de los limites actuales.\n");
          printf("7. Salir.\n");
          printf("Introducir opción (1-5):\n");
          scanf("%d",&opcion);
          switch(opcion)
          {
              case 1:LimitesImprime(linf,lsup);break;
              case 2:EnteroImprime(ernd);break;
              case 3:break;
              case 4:LimitesLee(&linf,&lsup);
                     LimitesImprime(linf,lsup);break;
              case 5:ernd=EnteroAleatorio(linf,lsup);
                     EnteroImprime(ernd);break;
              case 6:break;
              case 7:break;
              default: printf("Error, la opción ha de estar comprendida entre 1-5\n");
          }
                      
                        
    }
        system("pause");
    return 0;
}
En línea

xiruko


Desconectado Desconectado

Mensajes: 438


Ver Perfil
Re: Problema de compilación
« Respuesta #5 en: 9 Agosto 2013, 06:10 am »

Código
  1. struct Array {int *v; int n;};

Te faltó el ';' al final de la declaración del struct. Debajo tienes la siguiente declaración:

Código
  1. Array ArrayCreaAleatorio(int linf, int lsup)
  2. {
  3.      Array a;
  4.      //...

Y bueno para declarar el tipo de retorno de la función y la variable de esta manera deberías usar lo siguiente para declarar el struct:

Código
  1. typedef struct {int *v; int n;} Array;

Si quieres declarar el struct tal y como lo tenías antes entonces deberías declarar el tipo de retorno y la variable de esta manera:

Código
  1. struct Array ArrayCreaAleatorio(int linf, int lsup)
  2. {
  3.      struct Array a;
  4.      //...

No sé si tendrás el mismo error en otras líneas, pero bueno eso ya te lo dejo a ti.

Saludos.
En línea

shulneos

Desconectado Desconectado

Mensajes: 12


Ver Perfil
Re: Problema de compilación
« Respuesta #6 en: 9 Agosto 2013, 13:31 pm »

Muchas gracias, estaba cometiendo el error al declarar la estructura, he utilizado typedef para definirla y no me ha causado problemas. Muchas gracias por todos los que me han respondido. Espero ser yo el que ayude la proxima vez. Aunque por ahora sólo sepa programar en ensamblador y Pascal.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Problema con la compilacion... « 1 2 »
Programación C/C++
Karcrack 13 11,994 Último mensaje 30 Agosto 2010, 21:07 pm
por Littlehorse
Problema compilación con Gcc
Programación C/C++
R3tr0 3 4,300 Último mensaje 20 Marzo 2011, 13:13 pm
por R3tr0
problema con la compilación con cx_Freeze
Scripting
yoelrodguez 4 2,544 Último mensaje 9 Agosto 2015, 06:44 am
por Eleкtro
PROBLEMA DE COMPILACION
ASM
BANZER94 1 2,131 Último mensaje 4 Octubre 2015, 10:39 am
por Eternal Idol
MOVIDO: PROBLEMA DE COMPILACION
Programación General
Eleкtro 0 1,406 Último mensaje 3 Octubre 2015, 18:43 pm
por Eleкtro
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines