Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - Roga

#11
Ya logre lo de los nombres.
//Anunciado del ejercicio.
/*Una tienda de mascotas desea un programa para guardar los nombre en un vector, la cantidad en otro y el valor en otro, además que imprima la relación de los animales,
la cantidad total, el costo de todos los animales y su valor promedio, que animal es más costoso y cual es más barato.*/

//librerias a usar
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// Prototipo de la funcion
int funcion_nombres(char nombres[][20],char nombres_valido[][20],int contador);
//funcion main
int main(){
//Declaracion de variable
char nombres[100][20],nombres_valido[100][20],nombre_mas_caro[20],nombre_mas_barato[20],decision;
int cantidad_animal;
int valor_animal;
int total,costo_total,mas_caro=0,mas_barato=0,contador=0;
int verificar_nombres;
float promedio;
char resp;
int insecto=0,peces=0,anfibio=0,reptil=0,mamifero=0,ave=0;
do{
printf("\nIngrese el nombre del animal:");
scanf("%s",&nombres[contador]);
if(contador>0){
verificar_nombres=funcion_nombres(nombres,nombres_valido,contador);
while(verificar_nombres==0){
printf("\nLo siento animal ya registrado. Ingrese otro animal.\nIngrese el nombre del animal:");
scanf("%s",&nombres[contador]);
verificar_nombres=funcion_nombres(nombres,nombres_valido,contador);
}
}
strcpy(nombres_valido[contador],nombres[contador]);
printf("\nCuantos animales hay?:");
scanf("%d",&cantidad_animal);
while(cantidad_animal<=0){
printf("\nCantidad debe ser mayor a 0.\nCuantos animales hay?:");
scanf("%d",&cantidad_animal);
}
printf("\nPrecio del animal:");
scanf("%d",&valor_animal);
while(valor_animal<0){
printf("\nValor animal debe ser igual o mayor a 0.\nPrecio del animal:");
scanf("%d",&valor_animal);
}
do{
printf("\nTipo de animal:\n1.-Insecto\n2.-Pez\n3.-Anfibio\n4.-Reptil\n5.-Mamifero\n6.-Ave\nElige ahora:");
scanf("%d",&decision);
switch(decision){
case 1:insecto++;
break;
case 2:peces++;
break;
case 3:anfibio++;
break;
case 4:reptil++;
break;
case 5:mamifero++;
break;
case 6:ave++;
break;
default:printf("El valor no es correcto\n");
}
}while(decision>6);
total=+cantidad_animal;
costo_total=+valor_animal;
if(valor_animal>mas_caro){
mas_caro=valor_animal;
strcpy(nombre_mas_caro,nombres[contador]);
}
if(valor_animal<mas_barato){
mas_barato=valor_animal;
strcpy(nombre_mas_barato,nombres[contador]);
}
printf("\nDesea ingresar otro animal?(S/N):");
fflush(stdin);
scanf("%c",&resp);
contador++;
#ifdef WIN32
system("cls");
#endif
#ifdef LINUX
system("clear");
#endif
}while(resp!='n'&&resp!='N');
//procedimiento
promedio=costo_total/contador;
system("pause");
return 0;
}

int funcion_nombres(char nombres[][20],char nombres_valido[][20],int contador){
int resp,vector;
for(vector=0;vector<contador;vector++){
if (strcmp(nombres[contador],nombres_valido[vector])==0){
    resp=0;
    return resp;
  }
  else{
  resp=1;
}
}
return resp;

#12
Ya compile pero voy por pasos y no me funciona la funcion que compara los nombres.
#13
Buenas :D foro. estoy aprendiendo lenguaje c por mi cuenta y consegui una guia de ejercicios y me consegui este ejercicio.

Una tienda de mascotas desea un programa para guardar los nombre en un vector, la cantidad en otro y el valor en otro, además que imprima la relación de los animales,
la cantidad total, el costo de todos los animales y su valor promedio, que animal es más costoso y cual es más barato.

lo prosegui a hacer el codigo pero quiero que si se coloca un nombre que ya se introdujo entre en un while para que lo cambie, ademas que tengo que guardarlo por caracteristicas(anfibio,pez,etc).  Entonces tengo inconvenientes con el codigo de comparacion de nombres y no e pensado nada para lo de las caracteristicas.

Notese hasta hora se la biblioteca stdio.h y realloc y malloc de stdlib.h aqui el codigo:

/*Una tienda de mascotas desea un programa para guardar los nombre en un vector, la cantidad en otro y el valor en otro, además que imprima la relación de los animales,
la cantidad total, el costo de todos los animales y su valor promedio, que animal es más costoso y cual es más barato.*/
#include <stdio.h>
#include <stdlib.h>
char funcion_nombres(char nombres[],int contador);
int main(){
char nombres[100][20],*nombres_valido[100][30],*nombre_mas_caro[20],*nombre_mas_barato[20],decision;
int *cantidad_animal=malloc(sizeof(int)*100);
int *valor_animal=malloc(sizeof(int)*100);
int total,costo_total,mas_caro=0,mas_barato=0,contador=0;
char verificar_nombres;
float promedio;
char resp;
int insecto=0,peces=0,anfibio=0,reptil=0,mamifero=0,ave=0;
do{
printf("\nIngrese el nombre del animal:");
scanf("%s",&nombres[contador]);
verificar_nombres=funcion_nombres(*nombres,contador);
while(verificar_nombres=='i'){
printf("\nLo siento animal ya registrado. Ingrese otro animal.\nIngrese el nombre del animal:");
scanf("%s",&nombres[contador]);
printf("\n%s",nombres[contador]);
verificar_nombres=funcion_nombres(*nombres,contador);
}
*nombres_valido[contador]=nombres[contador];
printf("\nCuantos animales hay?:");
scanf("%d",&cantidad_animal[contador]);
while(cantidad_animal[contador]<=0){
printf("\nCantidad debe ser mayor a 0.\nCuantos animales hay?:");
scanf("%d",&cantidad_animal[contador]);
}
printf("\nPrecio del animal:");
scanf("%d",&valor_animal[contador]);
while(valor_animal[contador]<0){
printf("\nValor animal debe ser igual o mayor a 0.\nPrecio del animal:");
scanf("%d",&valor_animal[contador]);
}
do{
printf("\nTipo de animal:\n1.-Insecto\n2.-Pez\n3.-Anfibio\n4.-Reptil\n5.-Mamifero\n6.-Ave\nElige ahora:");
scanf("%d",&decision);
switch(decision){
case 1:insecto++;
break;
case 2:peces++;
break;
case 3:anfibio++;
break;
case 4:reptil++;
break;
case 5:mamifero++;
break;
case 6:ave++;
break;
default:printf("El valor no es correcto\n");
}
}while(decision>6);
total=+cantidad_animal[contador];
costo_total=+valor_animal[contador];
if(valor_animal[contador]>mas_caro){
mas_caro=valor_animal[contador];
*nombre_mas_caro=nombres[contador];
}
if(valor_animal[contador]<mas_barato){
mas_barato=valor_animal[contador];
*nombre_mas_barato=nombres[contador];
}
printf("\nDesea ingresar otro animal?(S/N):");
fflush(stdin);
scanf("%c",&resp);
printf("\n%s",*nombres_valido[contador]);
contador++;
#ifdef WIN32
system("cls");
#endif
#ifdef LINUX
system("clear");
#endif

}while(resp!='n'&&resp!='N');
//procedimiento
promedio=costo_total/contador;
//realloc cantidad_animal
cantidad_animal=(int *)realloc(cantidad_animal,total*sizeof(int));
//realloc *valor_animal
valor_animal=(int *)realloc(valor_animal,costo_total*sizeof(int));
system("pause");
return 0;
}

char funcion_nombres(char nombres[],int contador){
int vector;
char resp;
for(vector=0;vector<contador;vector++){
if(nombres[contador]==nombres[vector]){
resp='i';
}
else{
resp='d';
}
}
return(resp);
}


Me pueden decir donde hay errores de syntaxis y que biblioteca podria incluir. de antemano gracias
#14
Gracias! Asi quedo el codigo final.
/*Cargar un vector de "n" posiciones con numero enteros, a partir de este crear 2 vectores; uno con los números pares y el otro con los numero impares,
además decir cuál de los vectores es más grande y el promedio de los elementos en cada vector.*/
#include <stdio.h>
#include <stdlib.h>
void crear(int numerosa[],int n);
int main(){
int vector,n;
printf("Cargue 1 lista para crear 2 nuevas con los numeros pares e impares y decir cual vector es mas grande y el promedio de ambos.");
printf("\nIngrese el numero de valores que desee cargar:");
scanf("%d",&n);
int *numerosa=malloc(sizeof(int)*n);
while(n<=0){
printf("\nValor invalido. Ingrese de nuevo.\nIngrese el numero de valores que desee cargar:");
scanf("%d",&n);
int *numerosa=malloc(sizeof(int)*n);
}
printf("\nLista 1.\n\n");
for(vector=0;vector<n;vector++){
printf("Ingrese el valor %d:",vector+1);
scanf("%d",&numerosa[vector]);
}
crear(numerosa,n);
printf("\n\n");
system("pause");
return 0;
}
void crear(int numerosa[],int n){
int vector,pares,impares,aux,y;
float promedioa,promediob,promedioc,suma;
char *mayor;
promedioa=0;
promediob=0;
promedioc=0;
aux=0;
pares=0;
impares=0;
//contabilizar pares e impares
for(vector=0;vector<n;vector++){
y=numerosa[vector]%2;
if(y==0){
pares++;
}
else{
impares++;
}
}
int *numerosb=malloc(sizeof(int)*pares);
int *numerosc=malloc(sizeof(int)*impares);
//crear 2 y 3
pares=0;
impares=0;
for(vector=0;vector<n;vector++){
y=numerosa[vector]%2;
if(y==0){
numerosb[pares]=*(numerosa+vector);
pares++;
}
else{
numerosc[impares]=*(numerosa+vector);
impares++;
}
}
// mayor
if(pares>impares){
char p[]={'p','a','r'};
mayor=p;
}
if(pares<impares){
char i[]={'i','m','p','a','r'};
mayor=i;
}
if(pares==impares){
char ni[]={'n','i','n','g','u','n','a'};
mayor=ni;
}
//el promedio vector a
suma=0;
for(vector=0;vector<n;vector++){
suma+=numerosa[vector];
}
promedioa=(suma/n);
//el promedio vector b
if(pares>0){
suma=0;
for(vector=0;vector<pares;vector++){
suma+=numerosb[vector];
}
promediob=(suma/pares);
}
//el promedio vector c
if(impares>0){
suma=0;
for(vector=0;vector<impares;vector++){
suma+=numerosc[vector];
}
promedioc=(suma/impares);
}
//imprimir
if(n>0){
printf("\n\nLista 1\t\tLista 2\t\tLista 3");
for(vector=1;vector<=n;vector++){
if(vector<=pares&&vector<=impares){
printf("\n%d\t\t%d\t\t%d",numerosa[vector-1],numerosb[vector-1],numerosc[vector-1]);
}
if(vector>pares&&vector<=impares){
printf("\n%d\t\t\t\t%d",numerosa[vector-1],numerosc[vector-1]);
}
if(vector<=pares&&vector>impares){
printf("\n%d\t\t%d\t\t\t",numerosa[vector-1],numerosb[vector-1
]);
}
if(vector>pares&&vector>impares){
printf("\n%d\t\t\t\t\t\t",numerosa[vector-1]);
}
}
printf("\nPromedio.\n%.1f\t\t%.1f\t\t%.1f",promedioa,promediob,promedioc);
if(*mayor=='p'||*mayor=='i'){
printf("\n\nLa lista mas larga creada es la %s.",mayor);
}
else{
printf("\n\nLa lista mas larga creada es %s.",mayor);
}
}
free(numerosa);
free(numerosb);
free(numerosc);
}


aprendi con este ejercicio malloc y free. Y calcular promedio de ese modo. muchas gracias a todos.
#15
No entendi esta parte.
CitarMejor así:
Código
      if((numerosa[vector] & 1)==0){
                  ...

pero si acomode el error en el promedio. tambien libere la memoria de numeroa , numerob y numeroc, con

free(numerosa);
free(numerosb);
free(numerosc);
#16
Gracias. por lo que lei se puede programar basicamente sin malloc pero seria aconstumbrarse a programar mal XD. gracias por el tip tambien lei que por cada malloc hay que usar un free como seria eso?. Sigo teniendo el error de los promedios.
#17
eso lo hize porque si coloco que pares e impares me inicialize en -1 para que cuando entre en el if empieze en 0, me da error.
#18
despues de tanto averiguar sigo sin entender :(. alguna guia que me recomiendes? o el codigo de forma correcta a ver si lo agarro de ejemplo.
#19
ty. Ya investigo sobre el tema y contesto si me resulto. Y sobre el error de los promedios?.
#20
Buenas tengo un error en mi codigo si coloco que n(valores) es igual 1 el promediob = a basura. ademas que los promedios no me dan.
al depurar me da que la suma incrementa el numero en 2 cuando no es asi. aqui el codigo
/*Cargar un vector de "n" posiciones con numero enteros, a partir de este crear 2 vectores; uno con los números pares y el otro con los numero impares,
además decir cuál de los vectores es más grande y el promedio de los elementos en cada vector.*/
#include <stdio.h>
void crear(int numerosa[],int n);
int main(){
int vector,n;
printf("Cargue 1 lista para crear 2 nuevas con los numeros pares e impares y decir cual vector es mas grande y el promedio de ambos.");
printf("\nIngrese el numero de valores que desee cargar:");
scanf("%d",&n);
int numerosa[n];
while(n<=0){
printf("\nValor invalido. Ingrese de nuevo.\nIngrese el numero de valores que desee cargar:");
scanf("%d",&n);
int numerosa[n];
}
printf("\nLista 1.\n\n");
for(vector=1;vector<=n;vector++){
printf("Ingrese el valor %d:",vector);
scanf("%d",&numerosa[vector]);
}
crear(numerosa,n);
printf("\n\n");
system("pause");
return 0;
}
void crear(int numerosa[],int n){
int vector,numerosb[n],numerosc[n],pares,impares,aux,y;
float promedioa,promediob,promedioc,suma;
char *mayor;
promedioa=0;
promediob=0;
promedioc=0;
aux=0;
pares=0;
impares=0;
//crear 2 y 3
for(vector=1;vector<=n;vector++){
y=numerosa[vector]%2;
if(y==0){
pares++;
numerosb[pares]=numerosa[vector];
}
else{
impares++;
numerosc[impares]=numerosa[vector];
}
}
// mayor
if(pares>impares){
char p[]={'p','a','r'};
mayor=p;
}
if(pares<impares){
char i[]={'i','m','p','a','r'};
mayor=i;
}
if(pares==impares){
char ni[]={'n','i','n','g','u','n','a'};
mayor=ni;
}
//el promedio vector a
aux=0;
for(vector=1;vector<=n;vector++){
suma=numerosa[vector]+aux;
aux=numerosa[vector];
}
promedioa=suma/n;
//el promedio vector b
if(pares>0){
aux=0;
for(vector=1;vector<=pares;vector++){
suma=numerosb[vector]+aux;
aux=numerosb[vector];
}
promediob=suma/pares;
}
//el promedio vector c

if(impares>0){
aux=0;
for(vector=1;vector<=impares;vector++){
suma=numerosc[vector]+aux;
aux=numerosc[vector];
}
promedioc=suma/impares;
}
//imprimir
if(n>0){
printf("\n\nLista 1\t\tLista 2\t\tLista 3");
for(vector=1;vector<=n;vector++){
if(vector<=pares&&vector<=impares){
printf("\n%d\t\t%d\t\t%d",numerosa[vector],numerosb[vector],numerosc[vector]);
}
if(vector>pares&&vector<=impares){
printf("\n%d\t\t\t\t%d",numerosa[vector],numerosc[vector]);
}
if(vector<=pares&&vector>impares){
printf("\n%d\t\t%d\t\t\t",numerosa[vector],numerosb[vector]);
}
if(vector>pares&&vector>impares){
printf("\n%d\t\t\t\t\t\t",numerosa[vector]);
}
}
printf("\nPromedio.\n%.1f\t\t%.1f\t\t%.1f",promedioa,promediob,promedioc);
if(*mayor=='p'||*mayor=='i'){
printf("\n\nLa lista mas larga creada es la %s.",mayor);
}
else{
printf("\n\nLa lista mas larga creada es %s.",mayor);
}
}
}


De antemano muchas Gracias!. :D