Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #57 da revista programar. Faz já o download aqui!

kvyil

"Passar" vector para uma função

Mensagens Recomendadas

kvyil    0
kvyil

Boa noite caros programadores :P

Estou mais uma vez com um enorme problema, a situação é a seguinte:

- Tenho uma função com o mome de jogo. em que já devem conhecer que serve para gerar um numero aleatório, as tentativas para acertar no numero aleatório são guardadas num vector.

- Estou a tentar criar uma outra função que seja responsável por guardar os valores desse vector num ficheiro.

A minha grande questão é, como é que chamo a função de criar ficheiros no sitio onde pretendo e como passo o array da função do jogo

para a que seja manipulado na função criar ficheiros. Espero ter me feito entender.  :)

O código da função jogo é o seguinte:


void jogo () {
         int palpite [100];
         int b=0, a=0, alea, num, qtd=0;
         clock_t start, end; //tipo de dados para a biblioteca Time
         double elapsed; 
         start = clock();//inicio da contagem do tempo 
                cabecalho();                
                printf("Adivinhe o n%cmero entre 0 e 100: ", 163);//pede o numero ao user pela primeira vez
                scanf("%d", &num); 
                //srand(time(NULL));//gera um numero aleatorio cada vez que é executado o programa
                alea=rand()%100+1;//gera o numero entre 0 e 100
                while(num !=alea){ //repete o ciclo enquanto o numero for diferente do gerado
                
                palpite [a++] = num; //regista o palpite no array 
                                 if(num <alea) //se o numero for nemor que o aleatorio faz o seguinte: 
                                             {
                                                  qtd++;//Encrementador que conta o numero de tentativas
                                                  system("color 04");// amarela, quando o numero menor que o gerado pelo programa
                                                  printf("N%cmero escolhido menor que o pretendido, AUMENTE um pouco\n\n",163);
                                                  printf("Digite outro n%cmero inteiro entre 0 ate 100: ",163);
                                                  scanf("%d", &num);
                                                  system("cls");//limpa a consola de tudo o que foi escrito
                                                  cabecalho();
                                              }
                                 else //se não for nanor então é maior que o pretendido e faz: 
                                      {
                                              system("cls");//limpa a consola de tudo o que foi escrito
                                              cabecalho();
                                              qtd++;//Encrementador que conta o numero de tentativas
                                              system("color 06");// vermelha ser utilzado quando o utilizador inserir um numero maior
                                              printf("N%cmero escolhido maior que o pretendido, DIMINUA um pouco\n\n",163);
                                              printf("Digite outro n%cmero inteiro entre 0 ate 100: ",163);
                                              scanf("%d", &num);
                                              system("cls");//limpa a consola de tudo o que foi escrito
                                              cabecalho();
                                      }
                } //então sai do ciclo se o numero digitado for igual ao gerado
                system("color 02");//verde, é utilizada quando o utilizador acerta no numero
                end = clock();//fim da contagem do tempo do programa
                elapsed = ((double) (end - start)) / CLOCKS_PER_SEC; //calcula a difereça do tempo inicial com o final 
                system ("cls");
                cabecalho();
                printf ("Parab%cns acertou no n%cmero!!\n\n", 130, 163);
                printf ("Resultado da Jogada:\n\n"); //felicita o utilizador por ter acertado no numero
                printf ("O n%cmero correcto: %d\n", 163, alea); //Diz então qual foi o numero gerado
                printf ("Tentativa(s) usada(s): %d\n", qtd); //mostra as tentativas utilizadas   
                printf ("Tempo: %.2f segundos \n\n",elapsed); //apresenta o tempo que demorou - diferena do end e do start                
                printf ("As tentativas usadas foram as seguintes:\n"); 
                for (b = 0; b < a; b++){ //ciclo que mostra as tentativas do array
                printf("%d, ", palpite[b]);}
                printf ("\n");


está parte está a funcionar como o esperado, só queria mesmo era saber como chamo a função de criar ficheiro logo a seguir a este código, e depois como passo para a função de criar ficheiro os dados do array.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
KTachyon    272
KTachyon

void guarda(int array[], int num_elems) {
    // do something
}

ou

void guarda(int* array, int num_elems) {
    // do something
}

E passas com o nome do array:

guarda(nome_do_array, numero_de_elementos);

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
kvyil    0
kvyil

Devo estar a fazer alguma coisa de errado. Porque ele cria-me um ficheiro com texto que nunca mais acaba :(

eu declaro a função antes da main:

void cria_ficheiro(int *aleatorio, int *quantidades, double *tempo, int *conta_a, int *conta_b, int vector, int *num_b);


depois chamo-a da seguinte forma:

cria_ficheiro (&alea, &qtd, &elapsed, &b, &a, &palpite, &elementos);


e por fim é assim que ela está criada:

void cria_ficheiro (int *aleatorio, int *quantidades, double *tempo, int *conta_a, int *conta_b, int vector, int *num_b)
{             
                  FILE *fp;
                  fp = fopen ("resultado.txt", "w");
                  for (conta_b = 0; conta_b < conta_a; conta_b++){ //ciclo que mostra as tentativas do array
                  fprintf (fp, "As tentativas foram: %d \n", vector, *num_b);}
                  fprintf (fp, "O numero aleaatorio foi: %d, as tentativas %d , e tempo foi %f \n", *aleatorio, *quantidades, *tempo);
                  fclose (fp);                 
                  //printf ("O numero aleaatorio foi: %d, as tentativas %d , e tempo foi %f \n", *aleatorio, *quantidades, *tempo);
}


Acho que me estou a confundir com os apontadores e não sei o que realmente é passado para a função se é o valor de cada posição do array ou se é o endereço de memoria :confused:

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
KTachyon    272
KTachyon

Estás a passar o endereço de memória para tudo. É para isso que serve o & antes da variável. Repara também que um array funciona da mesma forma que um ponteiro. O nome da variável que representa o array é o ponteiro para a primeira posição do array. O índice soma ao ponteiro o valor*sizeof(type_of_array).

Aquilo que estás a fazer é enviar o endereço para o endereço do array, logo, em vez de acederes ao array, vais aceder a um sítio que tem o endereço para o array:

&array -> array -> (0) (1) (2) (3) ...

O que estás a fazer:

&array -> (0) (1) (2) (3) ...

Sendo que esses valores não estão aí. Logo estás a aceder a "lixo".

A mesma coisa para o ponteiro do número de elementos (que assumo que é a tua variável quantidades). Tu tens um valor, por exemplo 52 que está num determinado local de memória. Tu estás a enviar o ponteiro para a função. O que recebes lá é um endereço:

&quantidades -> (quantidades) 52

A não ser que queiras alterar o valor dessa variável dentro da função, não faz sentido estares a enviar um ponteiro para lá. Basta enviares o valor, ou seja, a variável quantidades, per se.

Se queres enviar o ponteiro para dentro da função, mas queres ler conteúdo dessa variável, tens que indicar em código:

//main
int quantidades = 52;
int x = &quantidades; // x tem o endereço de memória onde está o 52 (isto não é correcto, não compila correctamente em 64-bit)
int y = quantidades; // y tem o valor 52

funcao(&quantidades);

//... fim do main

void funcao(int *quantidades) {
    int x = quantidades; // x tem o endereço de memória onde está o 52 (isto não é correcto, não compila correctamente em 64-bit)
    int y = (*quantidades); // y tem o valor 52
}

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora


×

Aviso Sobre Cookies

Ao usar este site você aceita a nossa Política de Privacidade