Cita de: K-YreX en 9 Mayo 2021, 14:30 PMTe adjunto lo que llevo porque me sigue saliendo error en la llamada y estoy atascado ahí.
En el algoritmo anterior he intercambiado el significado del 1 y el 0 pero puedes corregir eso sin mayor problema.
También deberás cambiar un poco el código para que busque todos los ingredientes por si alguno es desconocido.
Te dará error de compilación porque el prototipo de la función tiene que ser igual que la implementación y no lo habrás cambiado en ambas partes del código.
Si el problema no es ese, añade el prototipo de la función, la implementación y la llamada para ver cómo la utilizas.
De nuevo gracias por la ayuda.
Código (c) [Seleccionar]
#include <stdio.h>
#define TAMCAD 100 // Tamaño máximo de cadenas de caracteres
#define MAXING 20 // Nro máximo de ingredientes por receta
// Definición de estructuras del problema
struct propiedades{
float grasas; // gramos de grasa por cada 100gr
float hidratos; // gramos de hidratos de carbono por cada 100gr
float proteina; // gramos de proteina de carbono por cada 100gr
int Kcalorias; // KiloCalorías por 100gr
char tipo; // Tipo de alimento: 'V'=Vegetal, 'A'=Animal, 'M'=Mineral, 'L'=Lacteo o huevo
};
struct ingredientes{
int id; // Identificador del ingrediente
char nombre[TAMCAD]; // Nombre del ingrediente
struct propiedades nutrientes; // Propiedades del ingrediente
};
struct receta{
char nombre[TAMCAD]; // Nombre de la receta
int numIngredientes; // Nro de ingredientes de la receta
int id[MAXING]; // Identificador del ingrediente
int cantidad[MAXING]; // Gramos del ingrediente a utilizar
};
// PROTOTIPO: COMPLETAR
int procesarReceta(receta receta, ingredientes ingredientes[], int numIngredientes);
int main()
{
float res;
int numTiposIngredientes = 11; // Nro de tipos de ingrediente disponibles
// Tabla de ingrediente de ejemplo
struct ingredientes tiposIngredientes[]={
{2543,"Aceite de oliva",{99.9, 0, 0, 887,'V'}},
{2361,"Ajo",{0.23,24.3,4,117,'V'}},
{2660,"Arroz",{0.9,86,7,387,'V'}},
{2134,"Atun",{3.3,0,22,119,'A'}},
{2127,"Huevo",{11.1,0,12.5,150,'L'}},
{2403,"Patata",{0.2,15.2,2.2,73,'V'}},
{2419,"Setas",{0.3,4,1.8,26,'V'}},
{2677,"Harina de trigo",{0,71.5,10,333,'V'}},
{866, "Sal",{0,0,0,0,'M'}},
{2493,"Leche de vaca",{3.8,4.7,3,65,'L'}},
{2285,"Pavo",{8.5,0,21,158,'A'}}
};
// Algunas recetas de prueba
struct receta r[3]={
{"Tortilla",4,{2543,2403,866,2127},{60,300,3,100}},
{"Arroz con setas",5,{2543,2361,2660,2419,866},{40,15,250,125,5}},
{"Pizza",6,{2543,2677,2134,2127,866,0},{20,150,100,80,4,0}} // Esta receta tiene un ingrediente 0 que no existe
};
// LLamada a función procesaReceta. Pruebe diferentes recetas anteriores: r[0], r[1] o r[2]
res = procesarReceta(receta receta, ingredientes ingredientes[], int numIngredientes);
// Resultado
printf("El valor resultado es %f\n",res);
}
// ======= COPIE EN DOCTUS A PARTIR DE ESTA lÍNEA ===========================
// Aquí prototipo de posbles funciones auxiliares que emplee
// Definición de su función solución
int procesarReceta(receta receta, ingredientes ingredientes[], int numIngredientes)
int i:= 0; // Indica el indice del ingrediente actual de la receta
int resultado := 0; // Indica: 0 (no animal) | 1 (animal) | -1 (desconocido)
while(i < receta.numIngredientes && resultado !=-1) {
j := 0;
while(j < numIngredientes && ingredientes[j].id != receta.ingredientes[i]) {
j := j +1;// Indica el indice del ingrediente actual entre todos los ingredientes
}
// Aqui llegamos si hemos encontrado el ingrediente correspondiente segun el id o si no existe
if (j < numIngredientes){
// lo hemos encontrado en la posicion j
if (resultado := (ingredientes[j].tipo == 'A')){
resultado:=0;
}
}// Esto sera 0 si la comparacion es true o 1 si es false
else{// no lo hemos encontrado
resultado := -1}
i := i + 1;
}
return resultado;
}
MOD: El código debe estar entre etiquetas de Código GeSHi