Софтуерно Инженерство
Loading...
+ Нов въпрос
MVassileva avatar MVassileva 2 Точки

PB C#: While-Loop Excercise - 06. Cake

Здравейте,

На този код ми дава 92/100 точки без да показва къде е грешката:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _16.Cake
{
    class Program
    {
        static void Main(string[] args)
        {
            int pcsWidth = int.Parse(Console.ReadLine());
            int pcsLenght = int.Parse(Console.ReadLine());

            int pcsCakeTotal = pcsWidth * pcsLenght;

            int pcsTaken = 0;
            int pcsTakenTotal = 0;
            string command = string.Empty;

            while (pcsTakenTotal < pcsCakeTotal)
            {
                command = Console.ReadLine().ToLower();
                if (command != "stop")
                {
                    pcsTaken = int.Parse(command);
                    pcsTakenTotal += pcsTaken;
                    if (pcsTakenTotal >= pcsCakeTotal)
                    {
                        Console.WriteLine($"No more cake left! You need {pcsTakenTotal - pcsCakeTotal} pieces more.");
                        break;
                    }
                }
                else if (command == "stop")
                {
                    Console.WriteLine($"{pcsCakeTotal - pcsTakenTotal} pieces are left.");
                    break;
                }
            }
        }
    }
}

Някой може ли да ми помогне да открия къде греша? Много благодаря!

Тагове:
1
Programming Basics with C#
MVassileva avatar MVassileva 2 Точки

Много благодаря!

Не мога обаче да си обясня защо разместването променя резултата, при положение че проверките са верни....

0
kr056 avatar kr056 38 Точки

Не са нъплно верни проверките,при 25 парчета торта и вземеш 25,pcsTakenTotal ще ти е равен на pcsCakeTotal при което ще получиш изход "No more cake left!You need 0 pieces more!" което няма да е вярно.

Трябва да оправиш if (pcsTakenTotal >= pcsCakeTotal) на if (pcsTakenTotal > pcsCakeTotal),но тогава условието на while няма да се изпълнява повече и програмата ще приключи без да изпише нищо.

Затова трябва да промениш while на  while (pcsTakenTotal <= pcsCakeTotal).

Така написан кода условието на while и if-а се застъпват и става леко объркващо.

 Ето едно по-чисто решение без вложени проверки.

https://pastebin.com/BL3FhcCT

1
MVassileva avatar MVassileva 2 Точки

Благодаря!

0