Dev - C++ - error programa

   
Vista:

error programa

Publicado por jorge (2 intervenciones) el 04/11/2014 08:55:55
buenas, el siguiente codigo me da varios errores y no encuento el por que, alguien me podria ayudar? pego el codigo y los errores

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include <stdio.h>
 
void leerlista(int cantidad,int lista[cantidad],int *buscado) {
   int elemento;
   printf("Teclealos: ");
   for (elemento = 0; elemento < cantidad; elemento++)
      {
      scanf("%i",&lista[elemento]);
      }
   printf("Numero a buscar: ");
   scanf("%i",&*buscado);
}
int escribir(int cantidad, int lista[cantidad], int buscado)
   {
   int elemento, cuenta;
   cuenta = 0;
   for (elemento = 0; elemento < cantidad; elemento++)
      {
      if (lista[elemento]==buscado)
         {
         cuenta++;
         }
      }
   printf("Esta %i veces\n",cuenta);
   }
 
void main()
   {
   int cantidad, buscado;
    printf("Cantidad: ");
   scanf("%i",&cantidad);
      int lista[cantidad];
      leerlista(cantidad,lista,&buscado);
      escribir(cantidad,lista,buscado);
   }


los errores son:
`cantidad' was not declared in this scope
In function `void leerlista(int, int*)':
`lista' undeclared (first use this function)
(Each undeclared identifier is reported only once for each function it appears in.)
At global scope:
`cantidad' was not declared in this scope
`int escribir(int, int)':
`lista' undeclared (first use this function)
At global scope:
`main' must return `int'
In function `int main(...)':
too many arguments to function `void leerlista(int, int*)'
at this point in file
invalid conversion from `int*' to `int'
too many arguments to function `int escribir(int, int)'
: at this point in file
Execution terminated
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de vangodp

error programa

Publicado por vangodp (287 intervenciones) el 06/11/2014 17:37:02
a ver.... hay mas de una forma de pasar una lista a una funcion.
una forma es pasar por valor y otra por referencia.
Cuando pasas por valor estas haciendo una copia de un arreglo nuevo.... o sea es como declarar dicho arrego.
Que necesitas para declarar un arreglo? Su tamaño hombre...
osea que eso que te pide: "cantidad" deberia ser una constante o una variable global que estuviera definida antes de la funcion que la pida.

ejemplo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <stdio.h>
#define cantidad 100
 
 
void leerlista ( int cantidad, int lista[cantidad], int *buscado ) {
    int elemento;
    printf ( "Teclealos: " );
 
    for ( elemento = 0; elemento < cantidad; elemento++ ) {
        scanf ( "%i", &lista[elemento] );
    }
 
    printf ( "Numero a buscar: " );
    scanf ( "%i", &*buscado );
}
 
....

lo malo de esto es que no puedes pedir el tamaño ya que sera una constante.

otra forma es pasar por referencia.
Cuando pasas por referencia no estas haciendo una copia del arreglo, sino estas pasando el mismo arreglo.
Es como si le pasaras un papel que diga "el arreglo esta en este lugar en la memoria. Vaya allá y hago los cambios". Capiche?

una forma bien puede ser...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include <stdio.h>
 
 
 
 leearreglo ( char *arreglo ) {
    printf("%s\n\n", arreglo);
}
 
void modificaarreglo( char *arreglo, int TAM ){
    int i;
    for( i = 0; i < TAM-1; i++){
        arreglo[i] = arreglo[i] - 32;
    }
 
}
 
int main() {
    int i = 0;
    char arreglo[] = "arreglo de prueba";
    //TAM tiene el tamaño del arreglo
    int TAM = sizeof ( arreglo ) / sizeof( arreglo[0] );
 
 
    leearreglo( arreglo );
    modificaarreglo( arreglo, TAM );
 
    for( i = 0; i < TAM-1; i++){
        printf("%c", arreglo[i]);
    }
 
    getchar();
    return 0;
}

Busque se por internet... Como pasar arreglo por valor y por referencia en c, y encontraras el santo grial =)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar