Forum Pplware

Versão Completa: Linguagem C - Dicas e ajuda para iniciantes
Está de momento a ver uma versão reduzida do nosso conteúdo. Ver versão completa com o formato adequado.
Páginas: 1 2 3 4 5 6
boas,
Não tenho aqui nenhum compilador para testar o teu codigo, mas parece-me que o teste de condições deve ser feito numa função criada fora do main, pois qualquer valor que seja diferente de "a" e "c", respectivamente vai dar esse printf "inseriu um numero inteiro menor".
A intenção é mesmo essa ou é verificar os valores introduzidos pelo user? Se a intenção é informar q introduziu um valor Maior ou Menor, então retiro o que disse... Smile
Senão, tem mesmo de ser criada uma função para verificar os valores introduzidos.
De resto, o código está muito bem feito e devidamente comentado.
Parabéns, temos programador Wink
(08-09-2010 11:54)crazyman Escreveu: [ -> ]boas,
Não tenho aqui nenhum compilador para testar o teu codigo, mas parece-me que o teste de condições deve ser feito numa função criada fora do main, pois qualquer valor que seja diferente de "a" e "c", respectivamente vai dar esse printf "inseriu um numero inteiro menor".
A intenção é mesmo essa ou é verificar os valores introduzidos pelo user? Se a intenção é informar q introduziu um valor Maior ou Menor, então retiro o que disse... Smile
Senão, tem mesmo de ser criada uma função para verificar os valores introduzidos.
De resto, o código está muito bem feito e devidamente comentado.
Parabéns, temos programador Wink

A tua dúvida reside aqui:

Citar:// Teste de condições
if(MAX(a,b)!=a)
{
puts("Inseriu um numero inteiro menor");
}
else
{
puts("Inseriu um numero inteiro maior");
}

if(MAX(c,d)!=c)
{
puts("Inseriu um numero decimal menor");
}
else
{
puts("Inseriu um numero decimal maior");
}

Certo?
Eu compilei o código como podes ver na imagem (não iria publicar aqui um programa que não desse para compilar nem nada do género, foi testado). Neste troço do programa apenas estou a verificar se o que a macro MAX devolve é o valor inserido pelo utilizador ou o que atribuí em "b" ou "d".

Eu com este código pretendo apenas mostrar diferentes possibilidades ao utilizador. Por exemplo a macro MAX como podes ver no código foi definida da seguinte maneira:

Citar:#define MAX(X,Y) (((X)<(Y)) ? (Y) : (X))

e ela substitui uma possível função do género (atenção, ao contrário de uma macro é preciso indicar se estamos a usar inteiros nos argumentos de entrada e saída, neste caso vou optar por inteiros; no caso de querer experimentar com decimais basta substituir todos os "int" desta função por "float"):

Citar:int max_int(int x, int y)
{
if(x<y)
return y;

return x;
}


ou ainda

Citar:int max_int(int x, int y)
{
if(x<y)
{
return y;
}
else
{
return x;
}
}


No entanto este programa possui um erro, não na programação, mas nos conteúdos, já alguém descobriu?

EDIT:
Esqueci-me dos ; no fim de cada instrução nestes exemplos, já está corrigido Wink
Na função main tens um return a não retornar nada. Como não é uma função VOID deveria retornar algo não? não é que afecte na compilação mas...
(08-09-2010 14:55)kilho Escreveu: [ -> ]Na função main tens um return a não retornar nada. Como não é uma função VOID deveria retornar algo não? não é que afecte na compilação mas...

Não há problema aí, o retorno vai ser o retorno padrão, que poderás testar noutro programa, e como o objectivo não é usar o retorno deste programa para verificar erros ou algo do género...

O erro de que falei, é que não existe um teste para quando o "a" e o "b" ou o "c" e o "d" são iguais entre si. Que irá resultar numa saída como menor em vez de igual. Isso é fácil de contornar. Se alguém estiver interessado em aprender diga e colocarei aqui o passo seguinte para dotar o programa corrigido com essa característica.

Espero estar dentro do assunto deste tópico Big Grin
Só uma coisa que me lembrei sobre isto que disseste:
Citar:Na função main tens um return a não retornar nada.

És informático ou electrotécnico? É que em electrónica o nada não existe, há sempre alguma coisa no retorno, pode não ser aquilo que queremos, mas há retorno.
Calma! Estou só na brincadeira, mas houve um colega que ficou a arder por ter dito que quando se ligava uma memória o conteúdo desta seria nada ou vazio. Quando disse vazio, o professor ficou roxo. Mandou ao aluno em questão fazer um tpc especial: apresentar uma dissertação sobre o "nada" e o "vazio" em electrónica...
Bom o mais certo é que ele mudou de Eng. Electrotécnica para Eng. Informática Unsure não sei se foi por isso!
#include <stdio.h>
main()
{
/*1. Faça um programa em C que contenha um subprograma. É necessário que seu programa como um todo efetue o cálculo do valor de
uma prestação em atraso, utilizando a formula: PRESTAÇÃO = VALOR + (VALOR * (TAXA / 100) * TEMPO). */

float Valor_Atual(float Valor1, float Tempo1)
{
float P_Atraso;
P_Atraso = (Valor1 + (Valor1 * (Tempo1/100)* Tempo1));
return (P_Atraso);
}
int Valor,Tempo, Prestacao;

printf ("Informe o valor da conta em atraso: ");
scanf ("%f", &Valor);
printf ("Informe o tempo de atraso(dias): ");
scanf ("%f", &Tempo);


Prestacao = Valor_Atual(Valor,Tempo);

printf ("O valor atual da sua conta e' : R$%.2f \n", Prestacao );

system ("pause");


}

bom eu estou aprendendo linguagem c, entao utilizando função eu fiz esse programa, porem eu faço a entrada de conta em atraso = 100
a entrada de dias em atraso = 1
e ele deveria me retornar o valor = 101
porem tudo ki eu digite ele me volta o valor = 0 alguém poderia me ajudar é urgente serio mesmo preciso aprender direito pq vou fazer uma prova que tem funçoes e matrizes e fora os outros comandandos de C. vlw pela atencao ^^
pow ja achei o meu erro

#include <stdio.h>
main()
{
/*1. Faça um programa em C que contenha um subprograma. É necessário que seu programa como um todo efetue o cálculo do valor de
uma prestação em atraso, utilizando a formula: PRESTAÇÃO = VALOR + (VALOR * (TAXA / 100) * TEMPO). */

float Valor_Atual(float Valor1, float Tempo1)
{
float P_Atraso;
P_Atraso = (Valor1 + (Valor1 * (Tempo1/100)* Tempo1));
return (P_Atraso);
}
int /*em vez de int era para eu ter colocado float tb kkkkkk não sei pq eu coloquei int */ Valor,Tempo, Prestacao;

printf ("Informe o valor da conta em atraso: ");
scanf ("%f", &Valor);
printf ("Informe o tempo de atraso(dias): ");
scanf ("%f", &Tempo);


Prestacao = Valor_Atual(Valor,Tempo);

printf ("O valor atual da sua conta e' : R$%.2f \n", Prestacao );

system ("pause");


}
boas pessoal precisava aquui de uma ajuda a contruir um programa em c,eu ainda sou iniciante no assunto,era o seguinte queria que o programa fizesse aparecer na tela 80% 90% 100% 110% e 125% para escolhermos uma dessas 5 ipoteses,depois au escolher a ipotese por exemplo 110% davame resultado diferente de 100%,

110%
duplo flex=2;
duplo digital=5;
triplo digital=8;

se escolhesse 100%
duplo flex=1;
duplo digital=3;
trplo digital=5;

e finalmente fazer a soma (opçao 110%)
exemplo: eu tinha 4-duplo flex 2-duplo digital 2-triplo digital
soma
o que iria dar o resultado de 34 pontos...

espero que alguem me possa dar uma ajuda,precisava fazer um software assim porque eu sou vendedor
Acho que o teu problema é receber o valor do utilizador e depois avaliar as coisas certo? Bem podes receber os valores pelo user usando:
Código:
scanf("%d",&nome_da_var);
Depois para tratar os dados:
Código:
switch(nome_da_var){
    case 100 : /* o resto do codigo para quando for 100%
    case 110 : /* resto do codigo para quando for 110%
    default : printf("O valor introduzido um valor incorrecto.As opçoes sao 100,110....")
}

Claro que inves de um switch podes tambem usar uns if.

Bom Trabalho Smile
sim é isso,eu estava a uzar o if,
tipo metia se for 80%
se for 90%
se for 100%
se for 110%
se for 125%
até aqui tudo bem nao dá erro,mas em cada uma das opçoes dos (80%,90% etc..)(ou no caso de uzar switch em cada caseSmile queria para cada um deles declarar umas variaveis com o mesmo nome para todos os casos mas com valores diferentes em cada caso,espero que me fasso entenderConfused
(24-08-2010 21:57)Rui C. Escreveu: [ -> ]Obrigado Wink


o programa que eu queria fazer era + ou - isto,mas eatá a dár erro


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

int main(int argc, char *argv[])
{
int duplo_light_flex,duplo_digital,triplo_10m,triplo_10m_digital;
int a,b,c,d,e;
a=80;
b=90;
c=100;
d=110;
e=125;
printf("80%%,90%%,100%%,110%%,125%% digita a tua percentagem%d\n");
scanf("%d",&a,&b,&c,&d,&e);


if (a)
duplo_light_flex=2;
duplo_digital=5;
triplo_10m=7
triplo_10m_digital=9;

printf(" digite quantos duplo_light_flex%d\n");
scanf("%d",&duplo_light_flex);
printf("digite quantos duplo_digital%d\n");
scanf("%d",&duplo_digital);
printf("digite quantos triplo_10m%d\n");
scanf("%d",&triplo_10m);
printf("digite quantos triplo_10M_digital%d\n");
scanf("%d",triplo_10m_gigital);
soma=duplo_light_flex+duplo_digital+triplo_10m+triplo_10m_gigital;
printf("resultado%d" ,soma);


if (b)
duplo_light_flex=4;
duplo_digital=7;
triplo_10m=9;
triplo_10m_digital=11;

printf(" digite quantos duplo_light_flex%d\n");
scanf("%d",&duplo_light_flex);
printf("digite quantos duplo_digital%d\n");
scanf("%d",&duplo_digital);
printf("digite quantos triplo_10m%d\n");
scanf("%d",&triplo_10m);
printf("digite quantos triplo_10M_digital%d\n");
scanf("%d",triplo_10m_gigital);
soma=duplo_light_flex+duplo_digital+triplo_10m+triplo_10m_gigital;
printf("resultado%d" ,soma);



if ©
duplo_light_flex=8;
duplo_digital=12;
triplo_10m=15;
triplo_10m_digital=18;


printf(" digite quantos duplo_light_flex%d\n");
scanf("%d",&duplo_light_flex);
printf("digite quantos duplo_digital%d\n");
scanf("%d",&duplo_digital);
printf("digite quantos triplo_10m%d\n");
scanf("%d",&triplo_10m);
printf("digite quantos triplo_10M_digital%d\n");
scanf("%d",triplo_10m_gigital);
soma=duplo_light_flex+duplo_digital+triplo_10m+triplo_10m_gigital;
printf("resultado%d" ,soma);


if (d)
duplo_light_flex=10;
duplo_digital=14;
triplo_10m=18;
triplo_10m_digital=22;


printf(" digite quantos duplo_light_flex%d\n");
scanf("%d",&duplo_light_flex);
printf("digite quantos duplo_digital%d\n");
scanf("%d",&duplo_digital);
printf("digite quantos triplo_10m%d\n");
scanf("%d",&triplo_10m);
printf("digite quantos triplo_10M_digital%d\n");
scanf("%d",triplo_10m_gigital);
soma=duplo_light_flex+duplo_digital+triplo_10m+triplo_10m_gigital;
printf("resultado%d" ,soma);



if (e)
duplo_light_flex=12;
duplo_digital=16;
triplo_10m=20;
triplo_10m_digital=26;


printf(" digite quantos duplo_light_flex%d\n");
scanf("%d",&duplo_light_flex);
printf("digite quantos duplo_digital%d\n");
scanf("%d",&duplo_digital);
printf("digite quantos triplo_10m%d\n");
scanf("%d",&triplo_10m);
printf("digite quantos triplo_10M_digital%d\n");
scanf("%d",triplo_10m_gigital);
soma=duplo_light_flex+duplo_digital+triplo_10m+triplo_10m_gigital;
printf("resultado%d" ,soma);





system("PAUSE");
return 0;
}
Páginas: 1 2 3 4 5 6
URL's de Referência