Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: kuhi en 10 Abril 2017, 15:21 pm



Título: Ayuda ejercicio C
Publicado por: kuhi en 10 Abril 2017, 15:21 pm
Hola! Llevo casi 2 meses esperando ayuda de mi profesor y la verdad ya he tirado la toalla, me responde a las 2 semanas y encima me devuelve el ejercicio "corregido" lo pruebo y tiene el mismo error que el original, ahora sigo esperando y sin respuesta.
Os dejo el código, con su explicación.
Código:
/* Crear un programa llamado vendedores que cree un array de 18 X 10 indicando
que poseemos una empresa de 18 vendedores cada uno de los cuales vende 10
productos.
El array almacena los ingresos obtenidos por cada vendedor en cada producto, de
modo que un menú permite almacenar los ingresos, revisar el total de cada
vendedor y obtener los ingresos totales */

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

int vendedores[18][10], producto;
void almacenar_ingresos();
void revisar_total();
void total_total();
int menu();
int nvendedor, nproducto, ventas;
int suma, resp, i, j;
char oacute = 162, euro = 8364, eacute = 130;


void main()
{
resp=menu();
while(resp!=4)
{
switch(resp)
{
case 1:
almacenar_ingresos();
break;
case 2:
revisar_total();
break;
case 3:
total_total();
break;
}
resp=menu();
}
}

int menu()
{
printf("Seleccione una opci%cn:\n\n",oacute);
printf("[1] Almacenar ingresos de cada vendedor.\n");
printf("[2] Revisar el total de cada vendedor.\n");
printf("[3] Obtener los ingresos totales.\n");
printf("[4] Salir.\n\n");
scanf("%i",&resp);
}

void almacenar_ingresos()
{
system("cls");
printf("Ha seleccionado: almacenar ingresos de cada vendedor.\n\n");

printf("Introduzca numero de vendedor: \n");
scanf("%i",&nvendedor);
printf("Introduzca numero de producto: \n");
scanf("%i",&nproducto);
printf("Cantidad vendida: \n");
scanf("%i",&ventas);

vendedores[nvendedor][nproducto]=ventas;

printf("Se han actualizado los valores con %sxito.\n\n",eacute);
}

void revisar_total()
{
system("cls");
printf("Ha seleccionado: revisar el total de cada vendedor.\n\n");

printf("Introduzca el numero de vendedor: \n");
scanf("%i",&nvendedor);
suma=0;

for(i=0;i<10;i++)
{
suma = suma+vendedores[nvendedor][i];
}

printf("El total del vendedor %i es: %i%s",nvendedor,suma,euro);
}

void total_total()
{
system("cls");
printf("Ha seleccionado: obtener los ingresos totales.\n\n");
suma=0;

for(i=0;i<nvendedor;i++)
{
for(j=0;j<nproducto;j++)
{
suma = suma + vendedores[i][j];
}
}

printf("La cantidad total es de: %i%s",suma,euro);
}


Título: Re: Ayuda ejercicio C
Publicado por: MAFUS en 10 Abril 2017, 19:33 pm
Te enumero los errores.

1. En la línea
Código:
char oacute = 162, euro = 8364, eacute = 130;
euro no debería tener ese valor. Un char tiene como máximo el valor 255, y si tu máquina lo trata como signed solo puede llegar hasta 127.

2. En la línea
Código:
void main
main, en C, debe ser siempre entero. void es pre-ansi o para C++.

3. La función menu() debe devolver el entero resp, sin embargo no regresa nada.

4. En la función revisar_total() y total_total() donde dicen
Código:
printf("El total del vendedor %i es: %i%s",nvendedor,suma,euro);
y
Código:
printf("La cantidad total es de: %i%s",suma,euro);
tienes el argumento %s para mostrar un carácter pero éste debería ser %c.

5. En la función total_total() tienes
Código:
 for(i=0;i<nvendedor;i++)
 {
  for(j=0;j<nproducto;j++)
  {
el límite superior no deben ser las variables nvendedor y nproducto ya que sirven para guardar posiciones a modificar en el array por las demás funciones, no para marcar el número máximo de elementos en el array. Debería ser 18 y 10 respectivamente.

Ahora, haciendo juicio crítico: tu profesor no mira mucho por sus alumnos, pero por otra parte son errores sencillos de descubrir. No deberías esperar "dos meses" en que tu profesor te devuelva un ejercicio corregido. Más con ese tiempo ya deberías tener la suficiente experiencia para depurar un programa tan sencillo.


Título: Re: Ayuda ejercicio C
Publicado por: kuhi en 12 Abril 2017, 15:17 pm
Muchas gracias por tu respuesta. Si la verdad el profesor no está por nosotros y el material que tenemos está muy mal redactado, códigos con errores, explicaciones ilegibles, etc... pero bueno no vengo a criticar a nadie, en ese caso necesitaría 1 foro para mi solo.

Sigo teniendo el mismo error.
Este es el código actualizado:

Código:
/* Crear un programa llamado vendedores que cree un array de 18 X 10 indicando
que poseemos una empresa de 18 vendedores cada uno de los cuales vende 10
productos.
El array almacena los ingresos obtenidos por cada vendedor en cada producto, de
modo que un menú permite almacenar los ingresos, revisar el total de cada
vendedor y obtener los ingresos totales */

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

int vendedores[18][10], producto;
void almacenar_ingresos();
void revisar_total();
void total_total();
int menu();
int nvendedor, nproducto, ventas;
int suma, resp, i, j;
char oacute = 162, eacute = 130;


int main()
{
menu();
while(resp!=4)
{
switch(resp)
{
case 1:
almacenar_ingresos();
break;
case 2:
revisar_total();
break;
case 3:
total_total();
break;
}
menu();
}
}

int menu()
{
printf("Seleccione una opci%cn:\n\n",oacute);
printf("[1] Almacenar ingresos de cada vendedor.\n");
printf("[2] Revisar el total de cada vendedor.\n");
printf("[3] Obtener los ingresos totales.\n");
printf("[4] Salir.\n\n");
scanf("%i",&resp);
return resp;
}

void almacenar_ingresos()
{
system("cls");
printf("Ha seleccionado: almacenar ingresos de cada vendedor.\n\n");

printf("Introduzca numero de vendedor: \n");
scanf("%i",&nvendedor);
printf("Introduzca numero de producto: \n");
scanf("%i",&nproducto);
printf("Cantidad vendida: \n");
scanf("%i",&ventas);

vendedores[nvendedor][nproducto]=ventas;

printf("Se han actualizado los valores con %sxito.\n\n",eacute);
}

void revisar_total()
{
system("cls");
printf("Ha seleccionado: revisar el total de cada vendedor.\n\n");

printf("Introduzca el numero de vendedor: \n");
scanf("%i",&nvendedor);
suma=0;

for(i=0;i<10;i++)
{
suma = suma+vendedores[nvendedor][i];
}

printf("El total del vendedor %i es: %i euros.",nvendedor,suma);
}

void total_total()
{
system("cls");
printf("Ha seleccionado: obtener los ingresos totales.\n\n");
suma=0;

for(i=0;i<18;i++)
{
for(j=0;j<10;j++)
{
suma = suma + vendedores[i][j];
}
}

printf("La cantidad total es de: %i euros.",suma);
}



Título: Re: Ayuda ejercicio C
Publicado por: MAFUS en 12 Abril 2017, 18:01 pm
El otro problema que podrías tener es el uso del include conio.h. Muy pocos compiladores lo soportan, además no usas ninguna función de esta librería.


Título: Re: Ayuda ejercicio C
Publicado por: kuhi en 13 Abril 2017, 10:11 am
tampoco, lo he probado y es lo mismo.
edito:

me han pasado el ejercicio corregido y después de comparar los códigos 4 veces, mi código es idéntico al corregido, exceptuando que yo quité el conio haciendo caso a vuestros comentarios, y el euro porque supera el 255 del char. Lo cual no afecta.

Que puede estar pasando? No es la primera vez que me pasa que comparo dos códigos completamente idénticos y uno funciona y el otro no.

Este es el mio:
Código:
/* Crear un programa llamado vendedores que cree un array de 18 X 10 indicando
que poseemos una empresa de 18 vendedores cada uno de los cuales vende 10
productos.
El array almacena los ingresos obtenidos por cada vendedor en cada producto, de
modo que un menú permite almacenar los ingresos, revisar el total de cada
vendedor y obtener los ingresos totales */

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

int vendedores[18][10], producto;
void almacenar_ingresos();
void revisar_total();
void total_total();
int menu();
int nvendedor, nproducto, ventas;
int suma, resp, i, j;
char oacute = 162, eacute = 130;


void main()
{
resp=menu();
while(resp!=4)
{
switch(resp)
{
case 1:
almacenar_ingresos();
break;
case 2:
revisar_total();
break;
case 3:
total_total();
break;
}
resp=menu();
}
}

int menu()
{
printf("Seleccione una opci%cn:\n\n",oacute);
printf("[1] Almacenar ingresos de cada vendedor.\n");
printf("[2] Revisar el total de cada vendedor.\n");
printf("[3] Obtener los ingresos totales.\n");
printf("[4] Salir.\n\n");
scanf("%i",&resp);
return resp;
}

void almacenar_ingresos()
{
system("cls");
printf("Ha seleccionado: almacenar ingresos de cada vendedor.\n\n");

printf("Introduzca numero de vendedor: \n");
scanf("%i",&nvendedor);
printf("Introduzca numero de producto: \n");
scanf("%i",&nproducto);
printf("Cantidad vendida: \n");
scanf("%i",&ventas);

vendedores[nvendedor][nproducto]=ventas;

printf("Se han actualizado los valores con %sxito.\n\n",eacute);
}

void revisar_total()
{
system("cls");
printf("Ha seleccionado: revisar el total de cada vendedor.\n\n");

printf("Introduzca el numero de vendedor: \n");
scanf("%i",&nvendedor);
suma=0;

for(i=0;i<10;i++)
{
suma = suma+vendedores[nvendedor][i];
}

printf("El total del vendedor %i es: %i euros.",nvendedor,suma);
}

void total_total()
{
system("cls");
printf("Ha seleccionado: obtener los ingresos totales.\n\n");
suma=0;

for(i=0;i<18;i++)
{
for(j=0;j<10;j++)
{
suma = suma + vendedores[i][j];
}
}

printf("La cantidad total es de: %i euros.",suma);
}

Y este es el corregido:
Código:
/* Crear un programa llamado vendedores que cree un array de 18 X 10 indicando
que poseemos una empresa de 18 vendedores cada uno de los cuales vende 10
productos.
El array almacena los ingresos obtenidos por cada vendedor en cada producto, de
modo que un menú permite almacenar los ingresos, revisar el total de cada
vendedor y obtener los ingresos totales */
 
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
 
int vendedores[18][10], producto;
void almacenar_ingresos();
void revisar_total();
void total_total();
int menu();
int nvendedor, nproducto, ventas;
int suma, resp, i, j;
char oacute = 162, euro = 8364, eacute = 130;
 
 
void main()
{
 resp=menu();
 while(resp!=4)
 {
  switch(resp)
  {
   case 1:
    almacenar_ingresos();
    break;
   case 2:
    revisar_total();
    break;
   case 3:
    total_total();
    break;
  }
  resp=menu();
 }
}
 
int menu()
{
 printf("Seleccione una opci%cn:\n\n",oacute);
 printf("[1] Almacenar ingresos de cada vendedor.\n");
 printf("[2] Revisar el total de cada vendedor.\n");
 printf("[3] Obtener los ingresos totales.\n");
 printf("[4] Salir.\n\n");
 scanf("%i",&resp);
 return resp;
}
 
void almacenar_ingresos()
{
 system("cls");
 printf("Ha seleccionado: almacenar ingresos de cada vendedor.\n\n");
 
 printf("Introduzca numero de vendedor: \n");
 scanf("%i",&nvendedor);
 printf("Introduzca numero de producto: \n");
 scanf("%i",&nproducto);
 printf("Cantidad vendida: \n");
 scanf("%i",&ventas);
 
 vendedores[nvendedor][nproducto] = ventas;
 
 printf("Se han actualizado los valores con %cxito.\n\n",eacute);
}
 
void revisar_total()

 system("cls");
 printf("Ha seleccionado: revisar el total de cada vendedor.\n\n");
 
 printf("Introduzca el numero de vendedor: \n");
 scanf("%i",&nvendedor);
 suma=0;
 
 for(i=0;i<10;i++)
 {
  suma = suma+vendedores[nvendedor][i];
 }
 
 printf("El total del vendedor %i es: %i%c",nvendedor,suma,euro);
}
 
void total_total()
{
 system("cls");
 printf("Ha seleccionado: obtener los ingresos totales.\n\n");
 suma=0;
 
 for(i=0;i<18;i++)
 {
  for(j=0;j<10;j++)
  {
   suma = suma + vendedores[i][j];
  }
 }
 
 printf("La cantidad total es de: %i%c",suma,euro);
}


Título: Re: Ayuda ejercicio C
Publicado por: MAFUS en 13 Abril 2017, 17:31 pm
Copia los errores y warnings que te da el compilador.


Título: Re: Ayuda ejercicio C
Publicado por: kuhi en 14 Abril 2017, 21:54 pm
Hola, ya está solucionado, el error está en que seguía teniendo %s en las tildes en vez de %c.
Muchas gracias por vuestra ayuda de verdad! <3