Софтуерно Инженерство
Loading...
+ Нов въпрос
Iv_Konov avatar Iv_Konov 356 Точки
Best Answer

Здравей,

 

За съжаление и моята препоръка e да преработиш програмата - според мен, ще бъде в твой интерес...

 

Предлагам ти решение на C# с команди от PB курса:

https://pastebin.com/HzshBFBs

 

Бих ти обърнал внимание за следните "хитрини":

 

==============================================

            int examH = int.Parse(Console.ReadLine());
            int examMin = int.Parse(Console.ReadLine());
            int arrivalH = int.Parse(Console.ReadLine());
            int arrivalMin = int.Parse(Console.ReadLine());

            int examHtransf = examH * 60; // обърни часовете и минутите САМО в минути, спестява труд и код
            int examMinTransf = examHtransf + examMin;

            int arrivalHtransf = arrivalH * 60; // обърни часовете и минутите САМО в минути, спестява труд и код
            int arrivalMinTransf = arrivalHtransf + arrivalMin;

            int difference = Math.Abs(arrivalMinTransf - examMinTransf);
            int diffH = difference / 60;
            int diffMin = difference % 60;

===============================================

 

Този вариант за формат на минутите елиминира допълнително проверки като тези:

===========================

else if (minutesDifference < 10)

                    Console.WriteLine($"{hoursDifference - 1}:0{minutesDifference} hours after the start");

===========================

 

===========================

 else
                {
                    Console.WriteLine("Early");
                    Console.WriteLine($"{diffH}:{diffMin:00} hours before the start");
                }

============================

 

Поздрави,

Иван

0
Tspetrova avatar Tspetrova 119 Точки

Здравей, ще качиш ли и условието на задачата :-)

0
ptanchevaaa98 avatar ptanchevaaa98 2 Точки

Ето го условието :)


Студент трябва да отиде на изпит в определен час (например в 9:30 часа). Той идва в изпитната зала в даден
час на пристигане (например 9:40). Счита се, че студентът е дошъл навреме, ако е пристигнал в часа на
изпита или до половин час преди това. Ако е пристигнал по-рано повече от 30 минути, той е подранил. Ако е
дошъл след часа на изпита, той е закъснял. Напишете програма, която прочита време на изпит и време на
пристигане и отпечатва дали студентът е дошъл навреме, дали е подранил или е закъснял и с колко часа
или минути е подранил или закъснял.


Вход:
От конзолата се четат 4 цели числа (по едно на ред), въведени от потребителя:
 Първият ред съдържа час на изпита – цяло число от 0 до 23.
 Вторият ред съдържа минута на изпита – цяло число от 0 до 59.
 Третият ред съдържа час на пристигане – цяло число от 0 до 23.
 Четвъртият ред съдържа минута на пристигане – цяло число от 0 до 59.


Изход:
На първият ред отпечатайте:
 “Late”, ако студентът пристига по-късно от часа на изпита.
 “On time”, ако студентът пристига точно в часа на изпита или до 30 минути по-рано.
 “Early”, ако студентът пристига повече от 30 минути преди часа на изпита.
Ако студентът пристига с поне минута разлика от часа на изпита, отпечатайте на следващия ред:
 “mm minutes before the start” за идване по-рано с по-малко от час.
 “hh:mm hours before the start” за подраняване с 1 час или повече. Минутите винаги печатайте с 2
цифри, например “1:05”.
 “mm minutes after the start” за закъснение под час.
 “hh:mm hours after the start” за закъснение от 1 час или повече. Минутите винаги печатайте с 2
цифри, например “1:03”.

0
Tspetrova avatar Tspetrova 119 Точки

Според мен, малко си се объркала със сметките на часове -минути, най-добре е да ги изчислиш в началото и да работиш с цялото време, така ще е много по-малко код

Това е решение на Java, но ще успееш да се ориентираш :-)

https://pastebin.com/yWkrwtVF

0
VasilKotsev avatar VasilKotsev 798 Точки

Такива проблеми свързани с време/дати се решават със TimeSpan/DateTime според case-а. И рано или късно ще се сблъскате с тях. Понеже това е задача от бейсик(?) най-вероятно искат да упражните условните конструкции. Преди ги показваха тези типове данни за работа с времена/дати, но не пречи сама да се поразровиш как се ползват, защото никой реално няма да седне и да изпише толкова много проверки за основни операции с време. Другото, което мога да те посъветвам е да се опиташ да намалиш бройката на проверките до колкото е възможно (опитай се дали можеш да премахнеш ненужни такива).

Ето едно примерно решение как би трябвало да се реши задачата:

namespace SandBox
{
    using System;
    using System.Globalization;

    public class StartUp
    {
        public static void Main()
        {

            const string FORMAT = @"h\:mm";

            string examBeginningTimeAsString = $"{Console.ReadLine()}:{Console.ReadLine()}";
            string studentArrivalTimeAsString = $"{Console.ReadLine()}:{Console.ReadLine()}";

            TimeSpan examBeginningTime = TimeSpan.ParseExact(examBeginningTimeAsString, FORMAT, CultureInfo.InvariantCulture);
            TimeSpan studentArrivalTime = TimeSpan.ParseExact(studentArrivalTimeAsString, FORMAT, CultureInfo.InvariantCulture);

            if (studentArrivalTime > examBeginningTime)
            {
                Console.WriteLine("Late");
                var diff = studentArrivalTime - examBeginningTime;

                if (diff < TimeSpan.FromMinutes(60))
                    Console.WriteLine($"{diff.Minutes} minutes after the start");

                else
                    Console.WriteLine($"{diff.ToString(FORMAT)} hours after the start");
            }

            else
            {
                var diff = examBeginningTime - studentArrivalTime;

                string output = diff <= TimeSpan.FromMinutes(30)? "On time" : "Early";

                Console.WriteLine(output);

                if (diff < TimeSpan.FromMinutes(60))
                    Console.WriteLine($"{diff.Minutes} minutes before the start");

                else
                    Console.WriteLine($"{diff.ToString(FORMAT)} hours before the start");
            }
        }
    }
}

 

1
04/04/2019 10:56:04
ptanchevaaa98 avatar ptanchevaaa98 2 Точки

Благодаря на всички за бързите отговори, ще я преработя из основи. smiley

1