Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: vaillo33 en 13 Enero 2019, 09:04 am



Título: Vectores y matrices en funciones en C
Publicado por: vaillo33 en 13 Enero 2019, 09:04 am
Buenos días, mi duda es la siguiente:
Al realizar un programa con diferentes funciones();, en el que no se puede utilizar variables globales, necesito utilizar un vector/matriz, que necesito ir editando y guardando en diferentes funciones, ¿los podría pasar a otra función() de alguna manera?, o ¿tendría que hacerlo todo en una misma función?, o ¿alguna otra idea?, gracias.


Título: Re: Vectores y matrices en funciones en C
Publicado por: K-YreX en 13 Enero 2019, 10:28 am
No entiendo muy bien tu duda, pero si quieres pasar un array n-dimensional a una o más funciones claro que puedes hacerlo. Simplemente tienes que pasar en otro/s parámetro/s su tamaño para poder recorrerlo.
Si no he resuelto tu duda y me puedes explicar un poco mejor a que te refieres, intentaré ayudarte. Suerte  :-X


Título: Re: Vectores y matrices en funciones en C
Publicado por: vaillo33 en 13 Enero 2019, 11:14 am
La cosa es que yo tengo este código(sigo abajo del código):
Código:
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#include <conio.h>
int controladorCarton1=0, final=0, bolas=0, vectorcarton1 [20], sacadas [100], numeroscarton1[100];
int contador1=0, numerosbolas[100], controladorBola=0;
char x=0x58;
void ImprimoPrincipio(void){
    printf("----------------------------\n");
    printf("Juego del bingo simplificado\n");
    printf("----------------------------\n");
}

int GeneradorNumero(void){           //Genero un numero aleatorio
    int num;

    num = rand() % 100;
    return num;
}
int Bola(void){
    int y=0, z, v;
    if(controladorBola==0){
        for(int x=0;x<100;x++){          //creo un vector con todos los numeros del 1 al 100
            numerosbolas[y]=x+1;
            y++;
            controladorBola=1;
        }
    }if(controladorBola==1){
        do{
            z=GeneradorNumero();
        }while(numerosbolas[z]==0);
        v=numerosbolas[z];
        numerosbolas[z]=0;

    }
    return v;
}

void Carton1(void){
    int y=0, z, v, bola;
    if(controladorCarton1==0){
        printf("Carton 1: \n");
        for(int x=0;x<100;x++){          //creo un vector con todos los numeros del 1 al 100
            numeroscarton1[y]=x+1;
            y++;
        }
        for(int u=0;u<20;u++){
            z=GeneradorNumero();

            do{
                z=GeneradorNumero();
            }while(numeroscarton1[z]==0);

            vectorcarton1[u]=numeroscarton1[z];
            numeroscarton1[z]=0;
            printf("%d",vectorcarton1[u]);
            v=vectorcarton1[u]/10;
            if(v<1){
                printf("  ");
            }else{
                printf(" ");
            }
            if(u==4||u==9||u==14||u==19){
                printf("\n");

            }
        }
    }else{
        printf("Bolas: ");
        bola=Bola();
        sacadas[bolas]=bola;
        for(int a=0;a<=bolas;a++){
            printf("%d ",sacadas[a]);
        }
        bolas++;
        printf("\nCarton 1:\n");
        for(int i=0;i<20;i++){
            if(vectorcarton1[i]==bola){
                vectorcarton1[i]=x;
                contador1=contador1+1;

            }
        }
        for(int j=0;j<20;j++){
            if((int(vectorcarton1[j])==88)){
                printf("%c",vectorcarton1[j]);
                printf("  ");
                if(j==4||j==9||j==14||j==19){
                    printf("\n");

                }
            }else{
                printf("%d",vectorcarton1[j]);
                v=vectorcarton1[j]/10;
                if(v<1){
                    printf("  ");
                }else{
                    printf(" ");
                }

                if(j==4||j==9||j==14||j==19){
                    printf("\n");

                }
            }
        }
        if(contador1==20){
            printf("Gana el jugador 1\n");
            final=1;
            return;

        }
    }


    controladorCarton1=1;
}

int main(void){
    srand(time(NULL));
    ImprimoPrincipio();
    Carton1();
    printf("\n");
    getchar();
    do{
        system("cls");
        ImprimoPrincipio();
        Carton1();
        getchar();
    }while(final==0);
    getchar();
    return 0;

}
Me acabo de dar cuenta que no se pueden utilizar variables globales, y no se como puedo utilzar por ejemplo: el vector numerosbolas[100], en la función Carton1, si no fuera por esa variable global que he creado, no sabría utilizarlo en otra función como Carton1 para poder leer ese vector, editarlo y guardarlo, no se si me he explicado bien. :-X


Título: Re: Vectores y matrices en funciones en C
Publicado por: K-YreX en 13 Enero 2019, 11:32 am
Cuando no puedas usar variables globales o aunque puedas si prefieres no usarlas ya que no es recomendable porque el código pierde seguridad, todo lo que no puedes usar en una función porque no es global, se lo pasas como parámetros. Además los vectores cuando no se usa todavía memoria dinámica se suelen crear usando una constante para el tamaño, así si luego se quiere cambiar el tamaño, basta con cambiar el valor de esa constante.

Te pongo un ejemplo bastante completo que tiene cómo pasar arrays como parámetros, cómo usar constantes y qué hacer si no vamos a usar el array entero.

Código
  1. #include <stdio.h>
  2.  
  3. const int TAM = 100;
  4.  
  5. void mostrarVector(int[], int);
  6.  
  7. int main(){
  8.    int vector[TAM];
  9.    int util = 10; // se podria preguntar al usuario cuantos valores quiere ingresar
  10.    for(int i = 0; i < util; i++){
  11.        printf("Elemento %d: ", i);
  12.        scanf("%d", &vector[i]);
  13.    }
  14.    printf("\nEl contenido del array es: ");
  15.    mostrarVector(vector, util);
  16. }
  17.  
  18. void mostrarVector(int v[], int size){
  19.    for(int i = 0; i < size; i++)
  20.        printf("%d  ", v[i]);
  21.    printf("\n");
  22. }

Ahora aprovecha las cosas que aparecen en este ejemplo para adaptarlo a tu código. Suerte :-X

PD: No utilices la librería <conio.h>, no es estándar.


Título: Re: Vectores y matrices en funciones en C
Publicado por: vaillo33 en 13 Enero 2019, 12:07 pm
Muchas gracias por tu explicación! Ya lo entendí!! :D


Título: Re: Vectores y matrices en funciones en C
Publicado por: ashtag en 15 Enero 2019, 21:46 pm
Hola, tengo problema con la parte de aumentar la producción hasta un 50% usando vectores, ayúdenme porfavor
En una hacienda hay un hato que se compone de N vacas. Diseñe un programa que guarde en un vector la producción de leche diaria (en litros) de cada una de las vacas, además que calcule la producción total del hato diario y cual es la ubicación de la vaca que dio más leche en el día.

Si consideramos como producción normal 25 litros diarios y ninguna vaca puede producir más de 40 litros por día, cree un nuevo vector en el que se clasifique la producción según el siguiente criterio, si la producción está entre 20 y 25 litros etiqueta “PRODUCCION MEDIA”, si supera los 25 litros visualizar “ALTA PRODUCCION”, contabilice cuantas vacas tienen producción media y cuantas altas. Calcule también el promedio de la producción de las vacas.

Para incrementar la producción hasta un 50% de leche nos aconsejan implementar 2 medidas:

Realizar 3 ordeños al día, cuyo incremento hasta del 30%, con posibles valores (1,2,3) que equivalen 1=0%; 2=15% y 3=30% de incremento
Tener una dieta balanceada, hasta 20% de incremento (1,2,3) que equivalen 1=0%; 2=10% y 3=20% de incremento
Cargue los vectores de ordeños y dieta, calcule los incrementos, sume los dos incrementos y calcule el incremento proyectado de producción de leche para cada vaca y el incremento total de la hacienda ganadera.


Título: Re: Vectores y matrices en funciones en C
Publicado por: K-YreX en 15 Enero 2019, 22:00 pm
Si vas a preguntar sobre algo que no está directamente relacionado con este tema, debes abrir un tema nuevo para tu problema. Además de eso te aconsejo que pongas el código que tengas hecho para ver cómo lo llevas (ponlo entre etiquetas de código GeSHi, si lo pones...  :silbar:)