FórumGdH

Página Inicial do Guia do Hardware

Registrar FAQ Calendário Pesquisar Mensagens de Hoje Marcar Fóruns Como Lidos

Voltar   FórumGdH > Profissional > Programação, scripts, web e banco de dados
Bem-vindo ao FórumGdH
Não se esqueça de se registrar, é grátis . Nós temos 759.264 usuários, convidamos você fazer parte de nossa comunidade também! Se ainda não encontrou o que procura use nossa pesquisa. Esperamos que aprecie nosso trabalho.

Resposta
 
Opções do Tópico
Antigo 02-06-2005, 20:13   #1 (permalink)
Mad Max 77
Membro Senior
 
Registrado em: Feb 2005
Mensagens: 262
Reputação: 15 Mad Max 77 está indo no caminho certo
Enviar mensagem via MSN para Mad Max 77
Padrão Linguagem c (função de leitura criada por mim dando "pa

Estou usando uma função de leitura criada por mim (é obrigatória neste trabalho da faculdade). Esta função retorna um fscanf onde são lidos duas strings e um inteiro. Acho que não é o ideal mas estou incrementando estas stings e este inteiro na própria função (as strings e o inteiro são parâmetros da função e estou usando um estrutura). Eis aí a função que está usando a função de leitura usada por mim. Ela retorna a maior media de determinada região (são 4 regiões alfa, beta, delta, gama e cada regiao tem um indice pluviometrico que é um inteiro) . O PROBLEMA É QUE A FUNÇÃO DE LEITURA NÃO CAPTURA OS INTEIROS PRESENTES NO ARQUIVO E RETORNA UM ENDEREÇO DE MEMÓRIA. ESTÁ EM DESTAQUE A FUNÇÃO DE LEITURA NO PROGRAMA ABAIXO.

void regiaomaischuvosa (void)
{
int k=0; //Será usada para representar índices de vetores;
float mediaalfa; //Variável correspondente à media pluviométrica da região alfa;
float mediabeta; //Variável correspondente à media da região beta;
float mediagama; //Variével correspondente à media da região gama;
float mediadelta; //Variável correspondente à media da região teta;
int somaalfa=0; //Variável correspondente à soma dos indices pluviométricos da região alfa;
int somabeta=0; //Variável correspondente à soma dos indices pluviométricos da região beta;
int somadelta=0; //Variável correspondente à soma dos indices pluviométricos da região teta;
int somagama=0; //Variável correspondente à soma dos indices pluviométricos da região gama;
int contaalfa=0; //Variável que contará a quantidade de aparições da região alfa;
int contabeta=0; //Variável que contará a quantidade de aparições da região beta;
int contadelta=0; //Variável que contará a quantidade de aparições da região teta;
int contagama=0;//Variável que contará a quantidade de aparições da região gama;
FILE *arquiv; //Variável relacionada à abertura do arquivo;
char nomearqu[30]; //Nome do arquivo a ser digitado pelo usuário.

typedef struct Est
{
char nom[6]; //Estrutura que corresponde à três dados a serem listados:nome(no[5]), data(da[9] e índice pluviométrico.);
char dat[9];
int plu;
}Est;

Est cadei[100]; //Vetor da estrutura criada;
printf("\033[42mDigite o nome do arquivo:\033[0m ");
scanf("%s",nomearqu);
system("clear");
if((arquiv=fopen(nomearqu,"r"))==NULL)
{
fprintf(stderr,"Erro!!! Arquivo inexistente!!\n");
main();
}
else //Abertura do arquivo somente para leitura;
{
************************************************** **************************
while((fscanf(arquiv,"%s %s %d", cadei[k].nom, cadei[k].dat, &cadei[k].plu)) != EOF)
************************************************** ********************************
{
if(!(strcmp(cadei[k].nom,"alfa"))) //Em cada situação em que o nome da região digitada pelo usuário seja igual ao nome da região no arquivo será incrementado seu contador(retrata o número de aparições de tal região) e será feita a soma dos indices pluviométricos da mesma região;
{
contaalfa++;
somaalfa= somaalfa + cadei[k].plu;
}

else
if(!(strcmp(cadei[k].nom,"beta")))
{
contabeta++;
somabeta= somabeta + cadei[k].plu;
}

else
if(!(strcmp(cadei[k].nom,"gama")))
{
contagama++;
somagama= somagama + cadei[k].plu;
}


else
if(!(strcmp(cadei[k].nom,"delta")))
{
contadelta++;
somadelta= somadelta + cadei[k].plu;
}

k++;
}

//Esta sequência de "if's" é necessária pois podem não aparecer algumas regiões no arquivo e, se isso ocorre, não há como comparar se uma média é maior que todas as outras. Por isso, caso a região não apareça, e necessário atribuir o valor 0 à sua média. Neste caso, este processo é feito atribuindo à somadosindices de uma região o valor 0 e ao seu contador um valor diferente de 0, para que a operação soma/contador seja igual a 0 e todas as médias possam ser comparadas;

if(contaalfa==0)
{
somaalfa=0;
contaalfa=1;
}

if(contabeta==0)
{
somabeta=0;
contabeta=2;
}

if(contadelta==0)
{
somadelta=0;
contadelta=3;
}

if(contagama==0)
{
somagama=0;
contagama=4;
}

//A media de cada região é obtida dividindo o somatório dos indices pluviométricos pela quantidade de vezes em que cada região aparece;
mediaalfa=((float)somaalfa/(float)contaalfa);
mediabeta=((float)somabeta/(float)contabeta);
mediadelta=((float)somadelta/(float)contadelta);
mediagama=((float)somagama/(float)contagama);

//As médias das regiões serão comparadas, será impresso o nome da região com o valor inteiro de sua média(maior média de todas as regiões comparadas);
if( (mediaalfa>=mediabeta) && (mediaalfa>=mediadelta) && (mediaalfa>=mediagama) )
printf ("\nA região mais chuvosa é alfa, com a media de indice pluviometrico de: %.1f mm\n\n",mediaalfa);

else if( (mediabeta>=mediaalfa) && (mediabeta>=mediagama) && (mediabeta>=mediadelta) )
printf ("\nA região mais chuvosa é beta, com a media de indice pluviometrico de: %.1f mm\n\n",mediabeta);

else if( (mediadelta>=mediabeta) && (mediadelta>=mediaalfa) && (mediadelta>=mediagama) )
printf ("\nA região mais chuvosa é delta, com a media de indice pluviometrico de:%.1f mm\n\n",mediadelta);

else if( (mediagama>=mediabeta) && (mediagama>=mediaalfa) && (mediagama>=mediadelta) )
printf ("\nA região mais chuvosa é gama, com a media de indice pluviometrico de: %.1f mm\n\n",mediagama);


fclose(arquiv); //Comando para fechar arquivo.
main();
}
}



int leitura (char reg[5],char dat[9], char plu[4], FILE *arqu)
{

return fscanf(arqu,"%s %s %s", reg, dat, plu);

}





Mad Max 77 está offline   Responder com Quote
Antigo 02-06-2005, 20:53   #2 (permalink)
guisantrew
Novo Membro
 
Registrado em: May 2005
Localização: São Paulo
Mensagens: 125
Reputação: 15 guisantrew está indo no caminho certo
Enviar mensagem via AIM para guisantrew
Padrão

Ao invez de usar muitos "Ifs" tente uma tomada, um switch ! , as vese muitos ifs podem dar um erro chamado missmatch. que ai o programa nao consegue aplicar as condicoes, isso nao acontece com o switch


Nao custa tentar !
__________________
Guilherme Matias Guerreiro
guisantrew está offline   Responder com Quote
Antigo 02-06-2005, 22:58   #3 (permalink)
Mad Max 77
Membro Senior
 
Registrado em: Feb 2005
Mensagens: 262
Reputação: 15 Mad Max 77 está indo no caminho certo
Enviar mensagem via MSN para Mad Max 77
Padrão

MAS O PROBLEMA ESTÁ NA FUNÇÃO DE LEITURA QUE ESTÁ DENTRO DO WHILE. Ela não retorna os inteiros que estão dentro do arquivo, mas sim um endereço de memória. Gostaria de saber o que fazer pra corrigir isso.
Mad Max 77 está offline   Responder com Quote
Antigo 03-06-2005, 18:22   #4 (permalink)
jqueiroz
Highlander
 
Avatar de jqueiroz
 
Registrado em: May 2002
Localização: Tijuca/RJ
Idade: 9
Mensagens: 87.782
Reputação: 1756 jqueiroz tem uma fabulosa reputaçãojqueiroz tem uma fabulosa reputaçãojqueiroz tem uma fabulosa reputaçãojqueiroz tem uma fabulosa reputaçãojqueiroz tem uma fabulosa reputaçãojqueiroz tem uma fabulosa reputaçãojqueiroz tem uma fabulosa reputaçãojqueiroz tem uma fabulosa reputaçãojqueiroz tem uma fabulosa reputaçãojqueiroz tem uma fabulosa reputaçãojqueiroz tem uma fabulosa reputação
Padrão

Primeiro, edite sua mensagem, e coloque o código entre tags [code] e [/code]. Sem isso, fica quase ilegível.

Citação:
Ao invez de usar muitos "Ifs" tente uma tomada, um switch ! , as vese muitos ifs podem dar um erro chamado missmatch. que ai o programa nao consegue aplicar as condicoes, isso nao acontece com o switch
guisantrew, do pouco que eu pude entender, ele não pode usar switch, pois ele está fazendo comparações relativas com valores diferentes, tipo a > b, b >= c. O switch só serve quando vc tem comparações de igualdade com valores fixos, e com a mesma expressão variável, tipo a==1, a==2, a==3, etc.
__________________
Visite Quepolis (link de indicação) | "chmod 777 nunca ajudou ninguém" (c) 2002-2010 JQueiroz/FGdH
CCNP: √ ² CCSI: □ | Conheça o Novo Bebuns
jqueiroz está offline   Responder com Quote
Antigo 03-06-2005, 21:33   #5 (permalink)
jackinabox
Veterano
 
Avatar de jackinabox
 
Registrado em: Nov 2004
Mensagens: 1.055
Reputação: 17 jackinabox está indo no caminho certo
Padrão

Citação:
Postado Originalmente por guisantrew
as vese muitos ifs podem dar um erro chamado missmatch. que ai o programa nao consegue aplicar as condicoes, isso nao acontece com o switch
Não entendi o que você está tentando dizer...

Mas, como disse o jqueiroz, nesse caso não dá para utilizar switch, que só pode ser aplicado sobre um valor "integral".
__________________
Jeferson Charles Mayer

"Como é que eu vou enxergar a tal floresta, com todas essas árvores atrapalhando a visão?"
jackinabox está offline   Responder com Quote
Antigo 06-06-2005, 13:21   #6 (permalink)
k4z1nh0
Novo Membro
 
Registrado em: Apr 2005
Mensagens: 104
Reputação: 15 k4z1nh0 está indo no caminho certo
Enviar mensagem via MSN para k4z1nh0
Padrão

ta totalmente ilegivel esse codigo...como jqueiroz mencionou coloque as tags [code ] [/code]
__________________
+--------------------------------+
+ Um abraço +
+--------------------------------+
k4z1nh0 está offline   Responder com Quote
Resposta


Opções do Tópico

Regras de Mensagens
Você não pode criar tópicos
Você não pode postar respostas
Você não pode anexar arquivos
Você não pode editar suas mensagens

Código vB está Ligado
Smiles estão Ligado
Código [IMG] está Ligado
Código HTML está Desligado
Ir para...


Horários baseados na GMT -3. Agora são 1:26.