Ir ao conteúdo

Onde está o erro?


Gui_tec

Posts recomendados

Postado

Ae pessoal estou estudando linguagem c por conta própria, mas tem hora que num dá pra saber nem onde tá o erro! A lógica parece certinha, mas eu não sei porque não faz a soma dos custos... olha esse trecho:


/*Coleta de informações sobre todos os ítens de custo,
tais como nome do item de custo e valor do mesmo*/

i=0;
do{
ctrl = '\0';
printf("\nDigite o nome de um ítem de custo: ");
scanf("%s%*c",&nome_custo[i]);

printf("Digite o valor deste ítem de custo: R$");
scanf("%f%*c",&valor_custo[i]);

printf("Você deseja acrescentar novo ítem de custo?(s ou n) \n");
scanf("%c%*c",&ctrl);

indice_custo_prod[i] = valor_custo[i] / valor_encomenda;

i++;

cont = i;

}while(ctrl != 'n');


/*Impressão da tabela na tela*/

printf("\n\n\tLista de Itens de Custo e seus respectivos valores\n");
printf("\t-------------------------------------------------------\n");

a=0;
do{
printf("\t%s: R$%5.2f\n",nome_custo[a],valor_custo[a]);
a++;
}
while(a<=(cont-1));

/*Soma dos valores dos itens de custo*/

d=0;
e=1;
soma_custos = valor_custo[d] + valor_custo[e];
if(cont>2){
f=2;
do{
soma_custos += valor_custo[f];
f++;
}while(f==cont);
}

if(cont==1){
printf("Total: %5.2f",valor_custo[0]);
}
else{
printf("Total: %5.2f",soma_custos);
}

...pois é, a soma dos valores dos itens de custo não passa de três nem a pau! Eu quero dizer que se eu colocar mais de três itens de custo a soma do total não continua...

Eu já fiz o teste de mesa e parece que tá tudo certo, mas eu tô tão sem noção de onde pode estar o erro que eu me sinto literalmente paralisado, sem conseguir mover um dedo pra fazer essa soma funcionar!

Então galera, pode ser o q?

Abração ae pra todos!

Postado

Posta o código todo, assim ta meio difícil de entender. E justamente pro codigo ficar legivel para outras pessoas, evite usar variaveis a,b,c,d,e... use sempre numeros, se for contadores: contUm contDois, se for variaveis auxiliares: auxUm auxDois

E me parece também que voce ta usando muita variavel para fazer a mesma coisa, tente reaproveita-las melhor, sem deixar o código confuso, mas poupando memória.

Postado

Ae Shankar, valeu de novo hein cara! :)

Taí o código, já com as modificações sugeridas. Mas com relação à variáveis auxiliares, quando se trata de substituição de números, como nesse caso, eu acho que fica mais legível uma única letra, não? Na verdade eu quero aprender da maneira mais profissional possível, se eu estiver errado... sou todo ouvidos...

Ah! Eu não tinha pensado em reaproveitar as variáveis com medo de dar algum erro depois, mas você tem razão, poupar memória é fundamental.

Bom, ele tá funcionando, sabe, mas essa soma aí eu num sei como resolver não. :wacko:

Abraço!


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

int main()
{
float valor_encomenda;
float valor_custo[51];
float valor_prod[1500];
float indice_custo_prod[51];
float custo_final_prod;
float soma_indices;
float soma_custos;
char nome_custo[51][25];
char nome_prod[1500][25];
char ctrl,ctrlDois,resp;
int contUm,contDois,a,b,c,i;

printf("\nDigite o valor total da encomenda: R$");
scanf("%f",&valor_encomenda);

/*Coleta de informações sobre todos os ítens de custo,
tais como nome do item de custo e valor do mesmo*/

i=0;
do{
ctrl = '\0';
printf("\nDigite o nome de um ítem de custo: ");
scanf("%s%*c",&nome_custo[i]);

printf("Digite o valor deste ítem de custo: R$");
scanf("%f%*c",&valor_custo[i]);

printf("Você deseja acrescentar novo ítem de custo?(s ou n) \n");
scanf("%c%*c",&ctrl);

indice_custo_prod[i] = valor_custo[i] / valor_encomenda;

i++;

contUm = i;

}while(ctrl != 'n');


/*Impressão da tabela na tela*/

printf("\n\n\tLista de Itens de Custo e seus respectivos valores\n");
printf("\t-------------------------------------------------------\n");

a=0;
do{
printf("\t%s: R$%5.2f\n",nome_custo[a],valor_custo[a]);
a++;
}while(a <= (contUm-1));

/*Soma dos valores dos itens de custo*/

a=0;
b=1;
soma_custos = valor_custo[a] + valor_custo[b];
if(contUm > 2){
c=2;
do{
soma_custos += valor_custo[c];
c++;
}while(c==contUm);
}

if(contUm==1){
printf("Total: %5.2f",valor_custo[0]);
}
else{
printf("Total: %5.2f",soma_custos);
}

/*Cálculo da soma dos índices de custo do produto
Variável essa que entrará posteriormente nos cálculos*/

for(a=0,b=1,c=2;(b<=contUm);a++,b++){

soma_indices = indice_custo_prod[a] + indice_custo_prod[b];

while(contUm>2 && indice_custo_prod[c]!=0){

soma_indices = soma_indices + indice_custo_prod[c];
c++;
}
}

/*Coleta de informações sobre o produto
Tais como nomedo produto e valor do mesmo*/

a=0;
do{
ctrlDois = '\0';

printf("\n\nDigite o nome do Produto: ");
scanf("%s%*c",&nome_prod[a]);

printf("Digite o valor de custo deste Produto: R$");
scanf("%f%*c",&valor_prod[a]);

printf("Você deseja registrar novo produto (s ou n)?");
scanf("%c%*c",&ctrlDois);

a++;

contDois = a;

}while(ctrlDois != 'n');


/*Cálculo do Custo e apresentação dos resultados*/


printf("\n\n\tLista de Custo ToTal dos Produtos\n");
printf("\t----------------------------------\n");

a=0;
do{
custo_final_prod = (valor_prod[a] * soma_indices) + valor_prod[a];

printf("\t%s: R$%5.2f\n",nome_prod[a],custo_final_prod);

a++;

}while(a <= (contDois-1));

printf("\n\nDeseja imprimir relatório?(s ou n)\n\n");
scanf("%c%*c",&resp);

/*Impressão de relatórios*/

if(resp=='s'){
FILE *fp;

if((fp=fopen("/home/guilherme/Área de Trabalho/Relatório.txt", "a+")) == NULL){
printf("\tO arquivo nao pode ser aberto.\n");
exit(1);
}

fprintf(fp,"\n\nDATA : %s HORA: %s\n",__DATE__,__TIME__);
fprintf(fp,"-----------------------------");

fprintf(fp,"\n\n\tValor total da encomenda: %5.2f",valor_encomenda);

/*Impressão da Tabela de Itens de Custo*/

fprintf(fp,"\n\n\tLista de Itens de Custo e seus respectivos valores\n");
fprintf(fp,"\t-------------------------------------------------------\n");

a=0;
do{
fprintf(fp,"\t%s: R$%5.2f\n",nome_custo[a],valor_custo[a]);
a++;
}while(a <= (contUm-1));

/*Impressão da Tabela de Custo Total dos Produtos*/

fprintf(fp,"\n\n\tLista de Custo ToTal dos Produtos\n");
fprintf(fp,"\t----------------------------------\n");

a=0;
do{
custo_final_prod = (valor_prod[a] * soma_indices) + valor_prod[a];

fprintf(fp,"\t%s: R$%5.2f\n",nome_prod[a],custo_final_prod);

a++;

}while(a <= (contDois-1));

}

return 0;
}

Ah! Detalhe: ACEITO TODA E QUALQUER SUGESTÃO ! ;)

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!