Debe estar conectado para participar
Buscar en los foros:


 






Uso de Comodín:
*    coincide cualquier número de caracteres
%    coincide exactamente un caracter

Ayuda con programa en C

No hay Etiquetas
Entrada
Extreme Level

carlitox091

entradas: 1263

16:44 21/08/2008

1

Hola chicos soy novato en el tema de programacion en c y necesito de su ayuda , solo estoy aprendiendo el problema es el siguiente: el profesor me dijo que haga un programa el cual ingrese 30 productos de supermercado con stock, nombre y precio (el ingreso se debe hacer cada vez que ejecuto el programa o sea sin base de datos ) , luego elija una determinada cantidad y los ordene por nombre precio y stock (una pavada para uds seguramente). En el programa solo puedo usar las librerias mas conocidas (lease conio, stdio, math, string, dos) y solo lo puedo hacer con lo basico y con cadena de caracteres, funciones, vectores y estructuras de datos . Tambien debe tener una salida a pantalla con toda la info de stock precio y nombre en una lista de los productos elegidos .

Aca les dejo lo que pude hacer del programa y espero que me ayuden tirando algunas ideas y corrgiendo los errores que probablemente tenga el programa

Código:
#include<stdio.h>
#include<conio.h>
#include<dos.h>
#include<string.h>

struct datos
{ char producto[20];
int stock;
float precio;
};

struct datos base (void);
void ordenar (struct datos ord[30]);

void main (void)
{
struct datos productos[30];
productos[30]=base();
ordenar(productos);

}

struct datos base (void)
{
int cont;
struct datos base[30];
for(cont=0;cont<=29;cont++)
{printf("\n ingrese el nombre del producto&quotwink;
gets(base[cont].producto);
printf("\n ingrese unidad de stock&quotwink;
scanf("%d",&base[cont].stock);
printf("\n ingrese precio del producto&quotwink;
scanf("%f",&base[cont].precio);
}
printf("\n producto %c ..... stock %d ..... precio %d ", base[cont].producto, base[cont].stock, base[cont].precio);
return base[30];
}

void ordenar (struct datos ord[30])
{int cont,cont2,conf,aux;
char aux2[10];
printf("\n como desea ordenar presione 1 para ordenar por stock y 2 para ordenar por nombre&quotwink;
scanf("%d",&conf);
if(conf==1)
{
for(cont=0; cont<=28; cont++)
{ for(cont2=cont+1;cont2<=29;cont2++)
{aux=ord [cont2].stock;
ord[cont].stock=ord[cont2].stock;
ord[cont2].stock=aux;
}}}
if(conf==2)
{
aux= strcmp(ord[cont].producto,ord[cont2].producto);
if(aux>0)
{aux2=ord[cont].producto;
ord[cont].producto=ord[cont2].producto;
ord[cont2].producto=aux2;}
}

     }

Un saludo y gracias de antemano

Powered by:
Intel Core 2 Duo E4400 @ 2.80GHZ / Gigabyte P35-DS3L / WD 250GB 16MB Buffer / 2X1GB SuperTalent 667 CL5 @ 700 4 4 4 12 / VTB 8024 FULL + VTB COL-60-B Dual Rail 600w / XFX 8800GS Alpha Dog Edition

Extreme Level

The Big Praf

entradas: 2873

17:53 21/08/2008

2

tengo poco conocimiento con C, pero si con C++ y pascal. Mañana te doy una mano, si puedo.

Pero te hago una pregunta, viendolo asi nomas:
1-ese codigo, compila?
2-Funciona?
3-Que hace?
4-Que te falta hacer?
5-Donde tenes dudas?

Saludos

Lycosa user

ASUS 1000HE – ATOM N280 – 2GB RAM – 10" – 9.5hs bateria

Extreme Level

carlitox091

entradas: 1263

19:56 21/08/2008

3
Cita Iniciado por The Big Praf
Ver Mensaje
tengo poco conocimiento con C, pero si con C++ y pascal. Mañana te doy una mano, si puedo.

Pero te hago una pregunta, viendolo asi nomas:
1-ese codigo, compila?
2-Funciona?
3-Que hace?
4-Que te falta hacer?
5-Donde tenes dudas?

Saludos

{aux2=ord[cont].producto;
ord[cont].producto=ord[cont2].producto;
ord[cont2].producto=aux2;}

En esas 3 lineas me tira 3 errores : Lvalue Required , el mismo para las 3 y no se como solucionarlo

saludos y gracias

Powered by:
Intel Core 2 Duo E4400 @ 2.80GHZ / Gigabyte P35-DS3L / WD 250GB 16MB Buffer / 2X1GB SuperTalent 667 CL5 @ 700 4 4 4 12 / VTB 8024 FULL + VTB COL-60-B Dual Rail 600w / XFX 8800GS Alpha Dog Edition

Extreme Level

NoName

entradas: 2655

21:47 21/08/2008

4

Usa strcpy para hacer la asignación.

En vez de esto:

cadena="valor";

esto:

strcpy(cadena, "valor&quotwink;

Es muy probable que venga de ahi el error.

Linux Registered User #312139 – http://counter.li.org/
Extreme Level

The Big Praf

entradas: 2873

22:32 21/08/2008

5

Por un lado veo que la variable aux2 esta definida como una cadena de caracteres de longitud 10, mientras que producto es de longitud 20.

Por otro lado, la siguiente funcion

if(conf==1)
{
for(cont=0; cont<=28; cont++)
{ for(cont2=cont+1;cont2<=29;cont2++)
{aux=ord [cont2].stock;
ord[cont].stock=ord[cont2].stock;
ord[cont2].stock=aux;
}}}

NO veo que ordene de menor a mayor o viceversa, sino que solo intercambia los valores.
Creo que tendrías que modificarla asi:

if(conf==1)
{
for(cont=0; cont<=28; cont++)
{
for(cont2=cont+1;cont2<=29;cont2++)
{
if(ord[cont].stock<ord[cont2].stock)
{
aux=ord [cont2].stock;
ord[cont].stock=ord[cont2].stock;
ord[cont2].stock=aux;
}
}
}
}

En la parte que mencionas, no se porque te tira error, pero en cuanto al codigo… tendrias que hacer lo mismo que en el punto anterior. O mejor aún, unir todo en un solo codigo asi:

void ordenar (struct datos ord[30])
{int cont,cont2,conf,aux;
char aux2[20];
printf("\n como desea ordenar presione 1 para ordenar por stock y 2 para ordenar por nombre&quotwink;
scanf("%d",&conf);

for(cont=0; cont<=28; cont++)
{
for(cont2=cont+1;cont2<=29;cont2++)
{
if(conf==1)
{
if(ord[cont].stock<ord[cont2].stock)
{
aux=ord [cont2].stock;
ord[cont].stock=ord[cont2].stock;
ord[cont2].stock=aux;
}
}
if(conf==2)
{
aux= strcmp(ord[cont].producto,ord[cont2].producto);
if(aux>0)
{
strcpy(aux2, ord[cont].producto);
strcpy(ord[cont].producto, ord[cont2].producto);
strcpy(ord[cont2].producto, aux2);
}
}
}
}

Probalo y avisame

Saludos

Lycosa user

ASUS 1000HE – ATOM N280 – 2GB RAM – 10" – 9.5hs bateria

Midle End Level

Rostyx

entradas: 446

22:36 21/08/2008

6
Cita Iniciado por carlitox091
Ver Mensaje
luego elija una determinada cantidad y los ordene por nombre precio y stock (una pavada para uds seguramente). En el programa solo puedo usar las librerias mas conocidas (lease conio, stdio, math, string, dos) y solo lo puedo hacer con lo basico y con cadena de caracteres, funciones, vectores y estructuras de datos . Tambien debe tener una salida a pantalla con toda la info de stock precio y nombre en una lista de los productos elegidos .

Hola! Como estas?
Si queres te doy una mano para hacer esas dos cosas (ordenar y listar). El codigo es bastante sencillo.
Ahora, no me pidas que te pase el codigo en C ya que tendria que ponerme a estudiar C de nuevo!
Cualquier cosa mandame un MP o agregame al MSN

Saludos! y Suerte!

Midle End Level

f_ciacio

entradas: 450

23:16 21/08/2008

7

Lo del Lvalue required, me suena mucho a Borland :P ajaja… yo uso el mismo… proba poniendo parentesis onda:
((ord[cont]).stock)
muchas veces me paso que el borland asigno mal las prioridades por falta de parentesis…

En cuanto a esta función… sigue estando mal con la correccion

if(conf==1)
{
for(cont=0; cont<=28; cont++)
{
for(cont2=cont+1;cont2<=29;cont2++)
{
if(ord[cont].stock<ord[cont2].stock)
{
aux=ord [cont2].stock;
ord[cont].stock=ord[cont2].stock;
ord[cont2].stock=aux;

tiene que ser

aux=ord[cont].stock;
ord[cont].stock=ord[cont2].stock;
ord[cont2].stock=aux;

No segui el codigo entero, asi q no se si realmente hace lo que tiene que hacer, pero si no, el unico cambio que estaba haciendo era poner en Cont el de Cont2 y el aux no estaba siendo utilizado

[SIGPIC][/SIGPIC]
"Per Natura non da, Salamanca non presta"

Extreme Level

carlitox091

entradas: 1263

03:32 22/08/2008

8

Hola , pude solucionar lo otro con eso que me dieron , gracias . Pero tengo otro problema : Cuando defino la funcion , no se como hacer para devolver un vector o sea vieron el return para devolver uina variable, bueno , necesito eso pero para un vector. La parte seria esta :

struct datos base (void)
{
int cont;
struct datos base[30];
for(cont=0;cont<=29;cont++)
{printf("\n ingrese el nombre del producto&quotwink;
gets(base[cont].producto);
printf("\n ingrese unidad de stock&quotwink;
scanf("%d",&base[cont].stock);
printf("\n ingrese precio del producto&quotwink;
scanf("%f",&base[cont].precio);
}
printf("\n producto %c ….. stock %d ….. precio %d ", base[cont].producto, base[cont].stock, base[cont].precio);
return base[30];
}

Un saludo espero me expliquen que hacer

Powered by:
Intel Core 2 Duo E4400 @ 2.80GHZ / Gigabyte P35-DS3L / WD 250GB 16MB Buffer / 2X1GB SuperTalent 667 CL5 @ 700 4 4 4 12 / VTB 8024 FULL + VTB COL-60-B Dual Rail 600w / XFX 8800GS Alpha Dog Edition

Midle End Level

f_ciacio

entradas: 450

09:43 22/08/2008

9

Mirá devolver un array(vector) de la única forma que es posible es a través de la dirección de memoria… cuando tenés que trabajar con vectores lo mejor es hacerlo a través de un puntero (también conocido como apuntador), de forma que desde la función misma trabajas con el vector y no tenés que devolver nada, pero en caso de querer devolverlo el encabezado sería

int *funcion(parametros) (el asterisco es lo importante)

lo que significa que lo que vas a retornar es la dirección de memoria. Tenes que estar atento cuando utilices ese valor de poner

vector= funcion(parametros)

sin ningún agregado en ninguno de los dos costados, ni corchetes ni nada, asi el compilador lo que hace es la asignación de la nueva dirección de memoria.

[SIGPIC][/SIGPIC]
"Per Natura non da, Salamanca non presta"

Extreme Level

carlitox091

entradas: 1263

20:53 22/08/2008

10

Gracias che me sacaron todas las dudas !! ahora a segur con el programa
saludos !!

Powered by:
Intel Core 2 Duo E4400 @ 2.80GHZ / Gigabyte P35-DS3L / WD 250GB 16MB Buffer / 2X1GB SuperTalent 667 CL5 @ 700 4 4 4 12 / VTB 8024 FULL + VTB COL-60-B Dual Rail 600w / XFX 8800GS Alpha Dog Edition