Ajudinha em C

2 respostas
K

Pessoas estou fazendo um projeto pra faculdade onde tenho que calcular o tempo gasto por diversas funções de busca dentro de um vetor para achar um valor x…
O projeto passou duas funções de geração de números aleatórios para agente usar…
mais elas dão erro hora q eu compilo…
o Código é esse:

/* 
 * File:   main.c
 * Author: brunolopessalustiano
 *
 * Created on 18 de Novembro de 2011, 20:09
 */

#include <stdio.h>
#include <stdlib.h>

/*
 * 
 */
int main(int argc, char** argv) {
    double hinicio, hfim, tempoGasto;
    double vet[100];
    int i, num;
    
        
    for(i=0;i<100;i++){
        vet[i]= unif[telefone removido], 0, 100000);
    }
    hinicio = clock();
    buscaLinear(vet,87,100);
    hfim = clock();
    tempoGasto = hfim - hinicio;
    printf("Tempo gasto na Busca Linear doubles: &.2d/n", tempoGasto);
    
    return (EXIT_SUCCESS);
}



/**********************************************************
Algoritmo 1 Gerador de numeros reais aleatorios
**********************************************************/
double unif(long int *seed, double low, double high)
{
    double unif_ret;
    long int m,a,b,c, k;
    double value_0_1;
    m=[telefone removido];
    a=16807;
    b=127773;
    c=2836;
    k = *seed/b;
    *seed = a * (*seed % b) - k*c;
    if (*seed<0)
        *seed = *seed + m;
    value_0_1 = (double) *seed/m;
    unif_ret = low+value_0_1*(high - low);
    return (unif_ret);
}
//*********************************************************

/**********************************************************
Algoritmo 2 Gerador de numeros inteiros aleatorios
**********************************************************/
int inteiros_unif(long int *seed, int low, int high)
{
    int unif_ret;
    long int m,a,b,c, k;
    double value_0_1;
    m = [telefone removido];
    a = 16807;
    b = 127773;
    c = 2836;
    k = *seed/b;
    *seed = a * (*seed % b) - k * c;
    if (*seed<0)
        *seed = *seed + m;
    value_0_1 = (double) *seed/m;
    unif_ret = low+value_0_1*(high-low+1);
    return (unif_ret);
}
//*********************************************************

/**********************************************************
Busca Linear
**********************************************************/
void buscaLinear(double vet[], int procurado, double tam){
    int i;
    for(i=0;i<tam;i++){
        if(vet[i]==procurado)
            i = tam;
    }
}
//*********************************************************

Quando executo dá os seguintes erros:

"/usr/bin/make" -f nbproject/Makefile-Debug.mk QMAKE= SUBPROJECTS= .build-conf
"/usr/bin/make" -f nbproject/Makefile-Debug.mk dist/Debug/GNU-MacOSX/atps
mkdir -p build/Debug/GNU-MacOSX
rm -f build/Debug/GNU-MacOSX/main.o.d
gcc -c -g -MMD -MP -MF build/Debug/GNU-MacOSX/main.o.d -o build/Debug/GNU-MacOSX/main.o main.c
main.c:38: error: conflicting types for 'unif’
main.c:21: error: previous implicit declaration of ‘unif’ was here
main.c:81: warning: conflicting types for 'buscaLinear’
main.c:24: warning: previous implicit declaration of ‘buscaLinear’ was here
make[2]: *** [build/Debug/GNU-MacOSX/main.o] Error 1
make[1]: *** [.build-conf] Error 2
make: *** [.build-impl] Error 2

CONSTRUIR FALHOU (valor da saída 2, tempo total: 134ms)

Ae não estou conseguindo corrigir…sou meio noob ainda em programação…=P
Se algum puder me ajudar eu ficarei muito grato!!!
Obrigado desde já…flw!!!

2 Respostas

RafaelCassau

Boa noite KurinskLavinsk passei pelo mesmo processo na facul hoj foi meu ultimo dia de aula entao creio que posso ajudalo, vamos la

Segue abaixo o exemplo do metodo de ordenação boobleSort

void boobleSort(){
    void calcularTempo(double , double); //Prototipação do metodo que calcula o tempo gasto
    void lerArquivo(); //Prototipação
    void imprimir(); //Prototipação
    
    clock_t tempoInicio, tempoFim; //variaveis de tempo
    int i = 0;
    int temp = 0; 
    
    lerArquivo();
    tempoInicio = clock(); // recebe o tempo de inicio antes da ordenação
    
    for(int j = (TAM-1); j >= 0;j--){
		for(i = 0;i < j; i++){
			if(vet[i] > vet[i+1]){
				temp = vet[i];
				vet[i] = vet[i+1];
				vet[i+1] = temp;
			}
		}
	}

    imprimir();
    tempoFim = clock(); recebe o tempo de fim depois da ordenação   
    calcularTempo(tempoInicio, tempoFim);
}

metodo que calcula o tempo gasto e imprime

void calcularTempo(double tempoInicio, double tempoFim){
    double tempoGasto = ( (double) (tempoFim - tempoInicio) ) / CLOCKS_PER_SEC;
    printf("\n\n");
    printf("    --------------------------------------------------\n");
    printf("    | Esta operacao foi realizada em: %2.3f segundos |\n",tempoGasto);
    printf("    --------------------------------------------------\n");
    getch();
    menu();
}

espero ter ajudado pois tive uma dor de cabeça tremenda com isso, até +

E

Diferentemente do Java, para você chamar um método, é necessário que ele esteja pelo menos declarado antes de ser usado. O compilador C, se achar uma chamada a um método antes de ele ser declarado, chuta uma declaração (veja a linha 21) e depois reclama (quando achar a declaração de verdade - veja a linha 38 ). Você pode ter percebido isso porque os seguintes dois erros ocorreram:

main.c:38: error: conflicting types for 'unif'
main.c:21: error: previous implicit declaration of 'unif' was here

A solução para esse problema é posicionar o método ?“unif” antes do seu uso em “main” . O mesmo problema ocorreu com o método “inteiros_unif”.

Criado 18 de novembro de 2011
Ultima resposta 20 de nov. de 2011
Respostas 2
Participantes 3