Funçao Inserir em C - Nao entendo

8 respostas
B

Oi Pessoal!

Sera que alguem pode me ajudar, preciso concluir esse trabalho pra faculdade em poucos dias, ja e um trablho de recuperaçao e nao sei o que faço mais ja pesquiei muito e nao consigo concluir. Na parte //implemente aqui, Significa que tenho que prencher pra que eu possa fazer o programa rodar sao apenas duas funçoes, um de inserir e outra de gerar relatorio.

agradeço mais uma vez.

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


/*****************************************Definições***************************************/
#define TAM_STRING 100
#define SEMENTE 500


/*****************************************Estruturas***************************************/
//Estrutura utilizada para armazenaros dados de uma aposta
typedef struct Aposta
{
	int iCodigoAposta;
	char strEstado[3];
	char strCidade[50];
	int vetNumeros[6];
	struct Aposta* ptProxima;
}stAposta;

//Estrutura utizada para definir uma lista de apostas
typedef struct Lista
{
	stAposta* ptInicio;
	stAposta* ptFim;
	int iTotal;
}stLista;


/****************************************Protótipos das funções****************************/
void mostraMenu(void);
void sorteiaNumeros(int*);
int jaSorteado(int*, int);
void leArquivo(stLista*);
stAposta* criaAposta(char *);
void insereApostaLista(stLista*, stAposta*);
void geraRelatorio(stLista*, int*);
void liberaMemoria(stLista*);

/*------------------------------------------------------------------------------------------
* Nome da função: main
* Descrição: Função principal de um programa em C
* Parâmetros: int, char**
* Retorno: int
------------------------------------------------------------------------------------------*/
int main(int argc, char* argv[])
{
	//Declaração das variáveis utilizadas
	stLista listaApostas;
	int iOpcao = 0;
	int vtNumerosSorteados[6];

	//Inicializando variáveis ponteiros da lista
	listaApostas.ptInicio = NULL;
	listaApostas.ptFim = NULL;
	listaApostas.iTotal = 0;
	
	//Configuração da semente utilizada no sorteio dos números
	srand(SEMENTE);

	//Loop do Menu
	while(iOpcao!=4)
	{
		//Mosta o menu principal
		mostraMenu();

		//Le a opcao
		scanf("%d",&iOpcao);

		//Chama as funções correspondentes
		if (iOpcao == 1)
		{
			//Chama a função para a leitura do arquivo e criação da lista de apostas
			leArquivo(&listaApostas);
		}
		else if (iOpcao == 2)
		{
			//Chama a função que realiza o sorteio dos números
			sorteiaNumeros(vtNumerosSorteados);
		}
		else if (iOpcao == 3)
		{
			//Chama a função que gera o arquivo de resultados
			geraRelatorio(&listaApostas, vtNumerosSorteados);
		}
	}

	//Chama a função que Libera a memória alocada dinamicamente
	liberaMemoria(&listaApostas);

	return 0;
}


/**************************************Implementação das funções****************************/
/*------------------------------------------------------------------------------------------
* Nome da função: mostraMenu()
* Descrição: esta função imprime o menu na tela
* Parâmetros: Nenhum
* Retorno: Nenhum
------------------------------------------------------------------------------------------*/
void mostraMenu(void)
{
    printf("\n  |------------------------------------------------|\n");
    printf("  |                                                |\n");    
    printf("  |            LOTERIAS TADS                       |\n");
    printf("  |                                                |\n");
    printf("  |------------------------------------------------|\n");
    printf("  |                                                |\n");
    printf("  |    <1> Ler Apostas                             |\n");    
    printf("  |    <2> Sortear numeros                         |\n");    
    printf("  |    <3> Gerar relatorio do sorteio              |\n");    
    printf("  |    <4> Sair                                    |\n");    
    printf("  |                                                |\n");    
    printf("  |------------------------------------------------|\n\n");    
    printf("\t\tOpcao: ");    
}

/*------------------------------------------------------------------------------------------
* Nome da função: leArquivo()
* Descrição: esta função realiza a leitura das apostas no arquivo e cria a lista de apostas
* Parâmetros: stLista*
* Retorno: Nenhum
------------------------------------------------------------------------------------------*/
void leArquivo(stLista* ptLista)
{
	//Declara a string responsável pelo armazenamento da linha lida do arquivo
	char strLinha[TAM_STRING];

	//Variável temporária para uma aposta
	stAposta* ptTmpAposta = NULL;

	//Realiza a abertura do arquivo
	FILE* ptArquivo = fopen("apostas.txt","rt");

	//Testa se o arquivo foi aberto com sucesso
	if (!ptArquivo)
	{
		printf("Arquivo de entrada nao pode ser aberto\n");
		return;
	}

	//Enquanto não for final de arquivo
	while(!feof(ptArquivo))
	{
		//Realiza a leitura de uma linha do arquivo
		fgets(strLinha,TAM_STRING,ptArquivo);

		//Extrai os dados da String lida do arquivo e preenche a estrutura da aposta
		ptTmpAposta = criaAposta(strLinha);

		//Insere uma aposta na lista dinâmica
		insereApostaLista(ptLista, ptTmpAposta);

		//Incrementa o total da apostas da lista
		ptLista->iTotal++;
	}

	//Fecha o arquivo
	fclose(ptArquivo);

	//Anula ponteiroS locais
	ptTmpAposta = NULL;
	ptArquivo = NULL;
}

/*------------------------------------------------------------------------------------------
* Nome da função: criaAposta()
* Descrição: esta função retira os dados de uma linha do arquivo e cria uma aposta
* Parâmetros: char*
* Retorno: stAposta*
------------------------------------------------------------------------------------------*/
stAposta* criaAposta(char* strLinha)
{
	//Declara um ponteiro para stAposta e variável auxiliar
	stAposta* ptTempAposta = NULL;
	int iIndice = 0;

	//Aloca memória para a estrutura  e inicializa o ponteiro
	ptTempAposta = (stAposta*)malloc(sizeof(stAposta));

	//Testa se a memória foi alocada
	if (!ptTempAposta)
	{
		printf("Nao foi possivel alocar a memoria");
		exit(1);
	}

	//Anula o ponteiro da estrutura
	ptTempAposta->ptProxima = NULL;

	//Quebra a string em tokens e atribui os valores para a estrutura
	ptTempAposta->iCodigoAposta = atoi(strtok(strLinha,";,/"));
	strcpy(ptTempAposta->strEstado,strtok(NULL,";,/"));
	strcpy(ptTempAposta->strCidade,strtok(NULL,";,/"));
	
	//Preenche o vetor de números
	for (iIndice=0; iIndice<6; iIndice++)
	{
		ptTempAposta->vetNumeros[iIndice] = atoi(strtok(NULL,";,/"));
	}
	
	//Retorna a estrutura preenchida
	return ptTempAposta;
}

/*------------------------------------------------------------------------------------------
* Nome da função: insereApostaLista()
* Descrição: esta função insere uma nova aposta na lista
* Parâmetros: stLista*, stAposta*
* Retorno: Nenhum
------------------------------------------------------------------------------------------*/
void insereApostaLista(stLista* ptLista, stAposta* ptAposta)
{

	[size=24][size=12]//Implemente aqui[/size][/size]



}

/*------------------------------------------------------------------------------------------
* Nome da função: sorteiaNumeros()
* Descrição: esta função sorteia 6 numeros entre 1 e 20
* Parâmetros: int*
* Retorno: Nenhum
------------------------------------------------------------------------------------------*/
void sorteiaNumeros(int* ptVetor)
{
	//Variaveis locais
	int iIndice = 0, iPosicao = 0, iAux = 0;

	//Realiza o sorteio
	for (iIndice=0; iIndice<6; iIndice++)
	{
		iAux = 1+rand()%20;

		//Numero sorteado  existe no vetor?
		while(jaSorteado(ptVetor,iAux))
		{
			iAux = 1+rand()%20;
		}

		//Atribui o valor sorteado
		ptVetor[iIndice] = iAux;
	}

	//Ordena os números do vetor (Bubble sort)
	for (iIndice=0; iIndice<6; iIndice++)
	{
		for (iPosicao=0; iPosicao<5-iIndice; iPosicao++)
		{
			if (ptVetor[iPosicao]>ptVetor[iPosicao+1])
			{
				iAux = ptVetor[iPosicao];
				ptVetor[iPosicao] = ptVetor[iPosicao+1];
				ptVetor[iPosicao+1] = iAux;
			}
		}
	}

	//Imprime numeros na tela
	for (iIndice=0; iIndice<6; iIndice++)
	{
		printf("%d ",ptVetor[iIndice]);
	}
}

/*------------------------------------------------------------------------------------------
* Nome da função: jaSorteado()
* Descrição: verifica se um número já está contido no vetor de números sorteados ou não
* Parâmetros: int*, int
* Retorno: int
------------------------------------------------------------------------------------------*/
int jaSorteado(int* ptVetor, int iNumero)
{
	//Variáveis locais
	int iIndice=0;

	//Passa pelo vetor verificando
	for (iIndice=0; iIndice<6; iIndice++)
	{
		if (ptVetor[iIndice] == iNumero)
		{
			return 1;
		}
	}

	return 0;
}

/*------------------------------------------------------------------------------------------
* Nome da função: geraRelatorio()
* Descrição: esta função cria um arquivo contendo um relatorio com os resultado obtidos
* Parâmetros: stLista*, int*
* Retorno: Nenhum
------------------------------------------------------------------------------------------*/
void geraRelatorio(stLista* ptLista, int* ptVetor)
{




	[size=24]//Implemente aqui[/size]





}

/*------------------------------------------------------------------------------------------
* Nome da função: liberaMemoria()
* Descrição: esta função libera a memória alocada dinamicamente para as apostas da lista
* Parâmetros: stLista*
* Retorno: Nenhum
------------------------------------------------------------------------------------------*/
void liberaMemoria(stLista* ptLista)
{
	//Variável temporária
	stAposta* ptTemp = NULL;

	//Verifica se a lista está vazia
	if (!ptLista || !ptLista->ptInicio)
	{
		return;
	}
	
	//Desaloca todos os nós da lista
	while (ptLista->ptInicio != NULL)
	{
		ptTemp = ptLista->ptInicio;
		ptLista->ptInicio = ptLista->ptInicio->ptProxima;
		free(ptTemp);
	}

	//Anula ponteiros
	ptLista->ptInicio = NULL;
	ptLista->ptFim = NULL;
	ptTemp = NULL;
}

8 Respostas

W

Não entendi muito bem. Qual sua dúvida mesmo?

B

[quote] Nao e apenas uma duvida eu nao estou conseguindo completar onde tem //implemente aqui entendeu? na Linha 217 e 305 voce ver melhor, agradeço a ajuda

F

Passa uma parte do código que vc tentou implementar nessas Functions. Ai dá pra ver onde é o problema.

B
F

Opa isso aqui com certeza vai ajudar:

http://www.ic.unicamp.br/~cmrubira/aacesta/cpp/cpp15.html

:smiley:

B

fabiomazzo:
Opa isso aqui com certeza vai ajudar:

http://www.ic.unicamp.br/~cmrubira/aacesta/cpp/cpp15.html

:smiley:

[quote]Valeu cara mais infelizmente eu nao gosto de C por isso nem interpletar eu sei. Gostaria de mais opçoes se possivel… agradeço por tudo…[quote]

W

[quote=BEIJAMEK]

fabiomazzo:
Opa isso aqui com certeza vai ajudar:

http://www.ic.unicamp.br/~cmrubira/aacesta/cpp/cpp15.html

:smiley:

vc pode começar a partir de agora.
http://www.ime.usp.br/~pf/algoritmos/aulas/lista.html
http://www.ime.usp.br/~pf/mac0122-2002/aulas/llists.html
http://pt.wikibooks.org/wiki/Programar_em_C/Listas_encadeadas

Pelo que entendi vc tem que armazenar todas as apostas efetuadas em uma lista encadeada. O relatório gerado deve ser armazenado lista encadeada tbm.
Isso é relativamente fácil de fazer, mas a tarefa é sua. Sugiro que comece a estudar…
Repetir essa matéria pode ser interessante. Se não gosta de programar, mude de curso. :oops:

B

[quote=walissongpi][quote=BEIJAMEK]

fabiomazzo:
Opa isso aqui com certeza vai ajudar:

http://www.ic.unicamp.br/~cmrubira/aacesta/cpp/cpp15.html

:smiley:

vc pode começar a partir de agora.
http://www.ime.usp.br/~pf/algoritmos/aulas/lista.html
http://www.ime.usp.br/~pf/mac0122-2002/aulas/llists.html
http://pt.wikibooks.org/wiki/Programar_em_C/Listas_encadeadas

Pelo que entendi vc tem que armazenar todas as apostas efetuadas em uma lista encadeada. O relatório gerado deve ser armazenado lista encadeada tbm.
Isso é relativamente fácil de fazer, mas a tarefa é sua. Sugiro que comece a estudar…
Repetir essa matéria pode ser interessante. Se não gosta de programar, mude de curso. :oops:

[quote]Valeu cara vou ver o que posso fazer, mais gostar de programar gosto mais so em JAVA acho C muito chato e arcaico, entende, mais tudo bem vou ver o que posso fazer, mais ficaria gratos se voces me ajudasse fazendo. Obrigado pela atençao…

Criado 9 de abril de 2010
Ultima resposta 9 de abr. de 2010
Respostas 8
Participantes 3