• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Jedi Gu@rdi@n

[Ajuda] Programa em C

6 mensagens neste tópico

Boas amigos.

Estou a aprender a programar em C no ISEP e tenho um trabalho para ir entregando dividido em varias partes. Neste momento vou na 3ª parte em que tenho k refazer o programa usando funcoes.

Aqui ficam as 3 partes em que consistiu o trabalho até agora:

Parte 1

"Algoritmia e Programação – ECIM e EIM -Dep. Física – ECIM e EIM -Dep. Física

2008/09

TRABALHO PRÁTICO

Enunciado

Em canicultura é considerada uma raça pequena a que apresenta um peso até 10Kg, uma raça média se o peso for

superior a 10 mas não superior a 25Kg e grande se exceder 25Kg e não ultrapassar 45Kg. Acima deste último

valor é uma raça gigante.

Supõe-se que um animal de raça pequena come aproximadamente 100g de ração por dia, um de raça média 300g,

um de raça grande 400g, e um de raça gigante 500g. Estes valores devem ser ajustados (por adição) em 0,2% do

peso do animal.

Regras:

O trabalho é individual.

O trabalho é obrigatório e deve ser realizado fora das aulas.

A entrega deverá ser via moodle

até à data indicada.

O trabalho encontra-se dividido em várias partes. Será dado conhecimento de cada parte oportunamente.

A apresentação do trabalho será feita após a entrega da última parte.

Parte I Data limite entrega: 24/10, 20h00

Elabore um algoritmo que:

a) Dado o peso de um animal adulto e a quantidade diária de ração, indique se essa quantidade é a adequada

para um animal com esse peso.

;) Indique qual a quantidade adequada para esse animal, bem como o erro.

Apresente o algoritmo sob a forma de pseudo-código e fluxograma.

Instituto Superior de Engenharia do Porto "

Parte 2

"Parte II Data limite entrega: 14/11, 18h00 Data limite entrega: 14/11, 18h00

Escreva uma nova versão do algoritmo:

Dando a possibilidade de o utilizador introduzir a informação anterior para vários cães. A leitura termina quando

o utilizador introduzir um valor não superior a zero para o primeiro dado introduzido (por exemplo o peso).

Converta para a linguagem C. Indique 2 dos conjuntos de valores com que testou o programa. "

Parte 3

"Parte III Data limite entrega: 28/11, 18h00 Data limite entrega: 28/11, 18h00

Escreva uma nova versão do algoritmo:

a) Crie sub rotinas para ler cada peso e cada quantidade introduzidos pelo utilizador.

;) Desenvolva sub rotinas (uma para o peso e outra para a quantidade) para validar cada um dos valores

introduzidos pelo utilizador até que o utilizador introduza um valor válido. As sub rotinas pedidas deverão

ser chamadas pelas sub rotinas desenvolvidas em a).

c) Passe o processamento pedido na parte I para um sub rotina. No entanto, as saídas deverão continuar a ser

feitas no algoritmo principal.

Converta para a linguagem C. Indique 2 dos conjuntos de valores com que testou o programa.

Deverão ser apresentados o algoritmo, o programa em C e os dados de teste."

Ate à 2ª parte correu tudo bem, agora na 3ª parte em que tenho k usar funcoes esta a dar-me um erro ao correr o programa. Diz que a variavel 'peso' nao foi inicializada, mas eu tenho-a definida.

Vejam aqui o codigo que usei na 2ª parte:

#include <stdio.h>

void main()
{
float peso,racao,qtracao,racao_correcta, dif_racoes;

//Atribuição de ração segundo o peso do animal


printf("Digite o peso: ");
scanf("%f", &peso);
while (peso > 0)
{
	printf("Digite a quantidade de racao: ");
	scanf("%f", &racao);

	if (peso <= 10)
	{
		qtracao = 100;
	}
	else if (peso >10 && peso <=25)
	{
		qtracao = 300;
	}
	else if (peso >25 && peso <=45)
	{
		qtracao = 400;
	}
	else if (peso >45)
	{
		qtracao = 500;
	}

//Cálculo da ração correcta adicionando a ração 0,2% do peso do animal

racao_correcta = (qtracao + (0.002*peso*1000));
printf("A racao correcta e: %f gramas \n", racao_correcta);


//Verificação da ração e diferença de quantidades


	if (racao > racao_correcta)
	{
	 dif_racoes = (racao - racao_correcta);
	 printf ("Racao dada excede em %f gramas \n", dif_racoes);
	}
	else if (racao < racao_correcta)
	{
	  dif_racoes = (racao_correcta - racao);
	  printf ("Racao insuficiente em %f gramas \n", dif_racoes);
	}
	else
	  printf("Racao dada correctamente! \n");
printf("Digite o peso: ");
scanf("%f", &peso);

}
}




Agora as modificaçoes que efectuei de modo a usar funcoes:

#include <stdio.h>




float funcao_peso_racao(float peso,float racao,float qtracao)
{
printf("Digite o peso: ");
scanf("%f", &peso);
printf("Digite a quantidade de racao: ");
	scanf("%f", &racao);

	if (peso <= 10)
	{
		qtracao = 100;
	}
	else if (peso >10 && peso <=25)
	{
		qtracao = 300;
	}
	else if (peso >25 && peso <=45)
	{
		qtracao = 400;
	}
	else if (peso >45)
	{
		qtracao = 500;
	}

}

float funcao_process(float peso,float racao,float qtracao,float racao_correcta,float dif_racoes)
{
racao_correcta = (qtracao + (0.002*peso*1000));
printf("A racao correcta e: %f gramas \n", racao_correcta);

	if (racao > racao_correcta)
	{
	 dif_racoes = (racao - racao_correcta);
	 printf ("Racao dada excede em %f gramas \n", dif_racoes);
	}
	else if (racao < racao_correcta)
	{
	  dif_racoes = (racao_correcta - racao);
	  printf ("Racao insuficiente em %f gramas \n", dif_racoes);
	}
	else
	  printf("Racao dada correctamente! \n");
printf("Digite o peso: ");
scanf("%f", &peso);
}


void main()
{
float peso,racao,qtracao,racao_correcta, dif_racoes;
float funcao_peso_racao(float peso,float racao);
float funcao_process(float peso,float racao,float qtracao,float racao_correcta,float dif_racoes);


funcao_peso_racao;
while (peso > 0)
{
	funcao_process;
}
}




Desculpem o testamento, mas agradecia msm se me podessem ajudar. Tenho que entregar isto ate 6ª.

Agradeço desde já a vossa colaboração.

Abraço :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

funcao_peso_racao;
while (peso > 0){
     funcao_process;
}

Neste ciclo, estás a chamar a função sem argumentos, quando já tinhas parâmetros definidos

float funcao_process(float peso,float racao,float qtracao,float racao_correcta,float dif_racoes)

Tens que meter os argumentos ao chama-la.

A função chamada antes do ciclo igualmente.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Dsc la a minha ignorancia, n sei se e isto k falta,mas se é, nao ta a funcionar.

funcao_peso_racao(float peso,float racao);
while (peso > 0)
{
	funcao_process(float peso,float racao,float qtracao,float racao_correcta,float dif_racoes);
}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não aprendeste a trabalhar com funções e a passar argumentos?

E acho que devias repensar os parâmetros. Estás a pedir coisa que não precisas de pedir. ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

anolsi nao te importas de dizer quais sao os argumentos p a funcao_peso_racao (p relembrar), pensei k fosse o peso e a racao.

Dps ja faço p o resto.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Jedi, estás a confundir declaração, definição e uso de funções.

Declaração: para já não te preocupes com isto (a declaração é, por exemplo, o que está dentro do <stdio.h>)

Definição: na definição duma função defines o que essa função faz. Por exemplo, a tua função funcao_peso_racao() faz:

a) escreve "digite o peso" e vai buscar um valor "ao teclado"

;) o mesmo para a racao

c) compara o peso (obtido "do teclado") com determinados valores e assigna uma constante à variável qtracao.

d) (*) ver em baixo

Uso: para chamares uma função e ela efectivamente executar o código inerente, escreves o nome da função seguido dos parametros entre parentesis, tal e qual como fazes para a função scanf()

scanf("%f", &peso);

É claro que os parametros da função têm que bater certo com o que está na definição dela!

Vou-te dar um exemplo dum programa simples com uma função simples (para não fazer o teu TPC).

#include <stdio.h> /* declaração de funções da biblioteca de C */

/* definição da função */
/* esta função soma 1 ao parametro e devolve esse resultado */
int soma1(int valor_de_input)
{
    int valor_de_retorno;
    valor_de_retorno = valor_de_input + 1;
    return valor_de_retorno;
}
/* se eu fosse declarar esta função
* (mas não preciso, porque uma definição é também uma declaração)
* seria assim
*      int soma1(int valor_de_input);
* Repara no ";" existente na declaração e nos "{" "}" existentes na definição */

int main(void)
{ /* mais uma definição de outra função! */
    int x, y;          /* declarei duas variáveis, que ainda não estão inicializadas (não têm valor) */
    x = 42;            /* inicializei a variável x */
    y = soma1(x);      /* inicializei a variável y com o resultado da função soma1() */
    printf("%d\n", y); /* imprimir */
    return 0;
}

(*) e a tua função não devolve nenhum valor à parte do programa que chamou essa função.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora