elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.


 


Tema destacado: Introducción a  Git (Primera Parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP) (Moderador: kub0x)
| | | |-+  ¿Por favor alguien puede ayudarme con este ejercicio en C#?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: ¿Por favor alguien puede ayudarme con este ejercicio en C#?  (Leído 1,500 veces)
palentino12

Desconectado Desconectado

Mensajes: 6


Ver Perfil
¿Por favor alguien puede ayudarme con este ejercicio en C#?
« en: 14 Octubre 2015, 18:07 »

El ejercicio es el siguiente

Crea un programa que lleve el stock de bolígrafos y lapices de una papelería y que por tanto haga los siguientes pasos:

- El programa pedirá inicialmente cuantos bolígrafos y cuantos lapices hay en stock. Éste paso sólo se realizará una vez.

- Entonces el programa debe pedir al usuario una letra mientras exista stock de bolígrafos o lapices.

- Después de pedir la letra, si está es B o L, el programa pedirá al usuario que introduzca una cantidad,

- Se deberá restar la cantidad introducida del stock total de bolígrafos o lapices dependiendo de la letra introducida.

- El programa volverá a pedir la letra y stock hasta que se termine el stock de algunos de los productos. Entonces debe finalizar el programa mostrando la cantidad de bolígrafos y lapices que quedan en la tienda.


Osea cuando le de a ejecutar el programa, me tendría que salir por ejemplo esto.

Stock de bolígrafos?
30

Stock de lapices?
20

Introduce producto?
B

Introduce Cantidad?
15

Introduce producto?
L

Introduce Cantidad?
5

Introduce producto?
B

Introduce Cantidad?
15

Fin del programa
Quedan 0 boligrafos y 15 lapices.

Este es el código que hice, pero no es que me de error, es que simplemente no me da el resultado esperado, osea no me repite el proceso hasta que la que condición se cumpla.

Código
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5.  
  6. namespace stocks__boligrafos_lapices
  7. {
  8.    class Program
  9.    {
  10.        static void Main(string[] args)
  11.        {
  12.            int boligrafos, lapices, cantidad1, cantidad2, resultado1 = 0, resultado2 = 0;
  13.  
  14.            char respuesta;
  15.  
  16.  
  17.            Console.WriteLine("Stock de bolígrafos?");
  18.            Console.WriteLine("");
  19.  
  20.            boligrafos = Int16.Parse(Console.ReadLine());
  21.            Console.WriteLine("");
  22.  
  23.            Console.WriteLine("Stock de lapices?");
  24.            Console.WriteLine("");
  25.  
  26.            lapices = Int16.Parse(Console.ReadLine());
  27.            Console.WriteLine("");
  28.  
  29.  
  30.  
  31.            do
  32.            {
  33.                Console.WriteLine("Introduce producto");
  34.                Console.WriteLine("");
  35.  
  36.                respuesta = char.Parse(Console.ReadLine());
  37.                Console.WriteLine("");
  38.  
  39.                if ((respuesta == 'B') || (respuesta == 'L'))
  40.                {
  41.                    Console.WriteLine("Introduce cantidad");
  42.                    Console.WriteLine("");
  43.                    cantidad1 = Int16.Parse(Console.ReadLine());
  44.                    resultado1 = boligrafos - cantidad1;
  45.                    Console.WriteLine("");
  46.                    Console.WriteLine("Introduce producto");
  47.                    Console.WriteLine("");
  48.                    respuesta = char.Parse(Console.ReadLine());
  49.                    Console.WriteLine("");
  50.                    Console.WriteLine("Introduce cantidad");
  51.                    Console.WriteLine("");
  52.                    cantidad2 = Int16.Parse(Console.ReadLine());
  53.                    resultado2 = lapices - cantidad2;
  54.                    Console.WriteLine("");
  55.                }
  56.                else
  57.                {
  58.                    Console.WriteLine("Error");
  59.                }
  60.  
  61.  
  62.  
  63.            }
  64.            while ((resultado1 <= 0) || (resultado2 <= 0));
  65.  
  66.            Console.WriteLine("");
  67.            Console.WriteLine("Fin del programa");
  68.            Console.WriteLine("Quedan " + resultado1 + " boligrafos" + " y " + resultado2 + " lapices.");
  69.  
  70.            Console.ReadKey();
  71.  
  72.  
  73.  
  74.        }
  75.    }
  76. }
  77.  
  78.  

Alguien puede ayudarme?

Gracias y un saludo.

Mod: Tema movido


« Última modificación: 14 Octubre 2015, 23:06 por Eleкtro » En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.709



Ver Perfil
Re: ¿Por favor alguien puede ayudarme con este ejercicio en C#?
« Respuesta #1 en: 15 Octubre 2015, 01:10 »

  • 1. La condición del loop es incorrecta:
    while ((resultado1 <= 0) || (resultado2 <= 0));

    Se puede traducir cómo "Mientras que resultado1 sea igual o menor que 0, o resultado2 sea igual o menos que 0.". Nótese el "Mientras que". Necesitas hacer lo opuesto, "Hasta que".
     
  • 2. La lógica del búcle es incorrecta, indiferentemente de si la cantidad del stock se agota, tú seguirás preguntando y descontando.

Así lo puedes corregir:
Código
  1. static void Main(string[] args) {
  2.  
  3.    int penStock = 0;
  4.    int pencilStock = 0;
  5.    int penCount = 0;
  6.    int pencilCount = 0;
  7.    char userValue = '\0';
  8.  
  9.    Console.Write("¿Stock de bolígrafos: ");
  10.    penStock = int.Parse(Console.ReadLine());
  11.  
  12.    Console.Write("¿Stock de lápìces: ");
  13.    pencilStock = int.Parse(Console.ReadLine());
  14.  
  15.    while (!((penStock <= 0) || (pencilStock <= 0))) {
  16.  
  17.        Console.WriteLine();
  18.        Console.Write("Introduce el producto a elegir (B o L): ");
  19.        userValue = char.ToUpper(Console.ReadKey().KeyChar);
  20.  
  21.        if (new char[]{'B', 'L'}.Contains(userValue)) {
  22.  
  23.        Console.WriteLine();
  24.  
  25.        switch (userValue) {
  26.  
  27.        case 'B':
  28.        Console.Write("Introduce cantidad a descontar de bolígrafos: ");
  29.        penCount = int.Parse(Console.ReadLine());
  30.        penStock = (penStock - penCount);
  31.        break;
  32.  
  33.        case 'L':
  34.        Console.Write("Introduce cantidad a descontar de lápìces: ");
  35.        pencilCount = int.Parse(Console.ReadLine());
  36.        pencilStock = (pencilStock - pencilCount);
  37.        break;
  38.  
  39.                default:
  40.                    // Do nothing...
  41.                    break;
  42.  
  43.        }
  44.  
  45.        } else {
  46.        Console.WriteLine("Error");
  47.  
  48.        }
  49.  
  50.    }
  51.  
  52.    Console.WriteLine();
  53.    Console.WriteLine("Fin del programa");
  54.    Console.WriteLine(string.Format("Quedan {0} bolígrafos y {1} lápices.", penStock, pencilStock));
  55.  
  56.    Console.ReadKey();
  57.    Environment.Exit(0);
  58.  
  59. }

Sin embargo, yo lo haría más o menos así, de una manera simplificada y rehutilizable:

Código
  1. using System;
  2. using System.Linq;
  3. using System.Text;
  4. using System.Collections.Generic;
+
Código
  1. public sealed class StockItem
  2. {
  3.  
  4. public char Letter {
  5. get { return this.letterB; }
  6. }
  7. private char letterB;
  8.  
  9. public string Description {
  10. get { return this.descriptionB; }
  11. }
  12. private string descriptionB;
  13.  
  14. public int Amount { get; set; }
  15.  
  16. public StockItem(char letter, string description, ref int amount) {
  17. this.letterB = letter;
  18. this.descriptionB = description;
  19. this.Amount = amount;
  20. }
  21.  
  22. }
+
Código
  1. static void Main(string[] args) {
  2.  
  3.    int penCount = 0;
  4.    int pencilCount = 0;
  5.  
  6.    List<StockItem> items = new List<StockItem> {
  7.        new StockItem('B', "bolígrafos", ref penCount),
  8.        new StockItem('L', "lápices", ref pencilCount)
  9.    };
  10.    StockItem selectedItem = default(StockItem);
  11.  
  12.    foreach (StockItem item in items) {
  13.        Console.Write(string.Format("¿Stock de {0}: ", item.Description));
  14.        item.Amount = int.Parse(Console.ReadLine());
  15.    }
  16.  
  17.    while ((from item in items select item.Amount).Min() > 0)  {
  18.  
  19.        Console.WriteLine();
  20.        Console.Write("Introduce el producto a elegir: ");
  21.        char userInput = char.ToUpper(Console.ReadKey().KeyChar);
  22.  
  23.        selectedItem = items.FirstOrDefault(item => char.ToUpper(item.Letter).Equals(userInput));
  24.  
  25.        if ((selectedItem != null)) {
  26.        Console.WriteLine();
  27.        Console.Write(string.Format("Introduce cantidad a descontar de {0}: ", selectedItem.Description));
  28.        selectedItem.Amount = (selectedItem.Amount - int.Parse(Console.ReadLine()));
  29.  
  30.        } else {
  31.        Console.WriteLine("Error");
  32.  
  33.        }
  34.  
  35.    }
  36.  
  37.    Console.WriteLine();
  38.    Console.WriteLine("Fin del programa.");
  39.  
  40.    StringBuilder sb = new StringBuilder();
  41.    foreach (StockItem item in items) {
  42.        sb.AppendLine(string.Format("Quedan {0} {1}.", item.Amount, item.Description));
  43.    }
  44.    Console.WriteLine(sb.ToString());
  45.  
  46.    Console.ReadKey();
  47.    Environment.Exit(0);
  48.  
  49. }

Saludos


« Última modificación: 15 Octubre 2015, 01:37 por Eleкtro » En línea


palentino12

Desconectado Desconectado

Mensajes: 6


Ver Perfil
Re: ¿Por favor alguien puede ayudarme con este ejercicio en C#?
« Respuesta #2 en: 16 Octubre 2015, 12:58 »

Muchas gracias por tu ayuda. Lo del segundo código que has puesto la verdad es que todavía no he llegado a ver lo del foreach, private, from, select, amount, description, format, Min .....................................

Si lo del do while era hasta que, osea se repetira hasta que resultado1 fuera igual o menos que 0 o resultado2 sea igual o menos que 0.


Un Saludo y gracias por tu ayuda.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines