Loading...

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

SimeonVasilevv avatar SimeonVasilevv 0 Точки

On time for exam 93/100 и незнам защо

Здравейте,

някъде в кода имам грешка, която не мога да открия.

Студент трябва да отиде на изпит в определен час (например в 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”.

Това е моето решение

using System;

namespace Exercise3_on_time
{
    class Program
    {
        static void Main(string[] args)
        {
            int hourExam = int.Parse(Console.ReadLine());
            int minExam = int.Parse(Console.ReadLine());
            int hourArrive = int.Parse(Console.ReadLine());
            int minArrive = int.Parse(Console.ReadLine());

            double timeExamMinutes = hourExam * 60 + minExam;
            double timeArriveMinutes = hourArrive * 60 + minArrive;
            double hours = 0;
            double minutes = 0;
            
            if (timeExamMinutes == timeArriveMinutes)
            {
                Console.WriteLine("On time");
            }
            else if (timeArriveMinutes <= timeExamMinutes && timeExamMinutes - timeArriveMinutes > 30)
            {
                Console.WriteLine("Early");
                hours = Math.Floor((timeExamMinutes - timeArriveMinutes) / 60);
                minutes = (timeExamMinutes - timeArriveMinutes) % 60;
                if (hours == 0 && minutes < 10)
                {
                    Console.WriteLine($"0{minutes} minutes before the start");
                }
                else if (hours == 0 && minutes >= 10)
                {
                    Console.WriteLine($"{minutes} minutes before the start");
                }
                else if (hours >= 1 && minutes < 10)
                {
                    Console.WriteLine($"{hours}:0{minutes} hours before the start");
                }
                else if (hours >= 1 && minutes >= 10)
                {
                    Console.WriteLine($"{hours}:{minutes} hours before the start");
                }
            }
            else if (timeArriveMinutes > timeExamMinutes)
            {
                Console.WriteLine("Late");
                hours = Math.Floor((timeArriveMinutes - timeExamMinutes) / 60);
                minutes = (timeArriveMinutes - timeExamMinutes) % 60;
                if (hours == 0 && minutes < 10)
                {
                    Console.WriteLine($"0{minutes} minutes after the start");
                }
                else if (hours == 0 && minutes >= 10)
                {
                    Console.WriteLine($"{minutes} minutes after the start");
                }
                else if (hours >= 1 && minutes < 10)
                {
                    Console.WriteLine($"{hours}:0{minutes} hours after the start");
                }
                else if (hours >= 1 && minutes >= 10)
                {
                    Console.WriteLine($"{hours}:{minutes} hours after the start");
                }
            }
            else if (timeExamMinutes - timeArriveMinutes <= 30)
            {
                Console.WriteLine("On time");
                hours = Math.Floor((timeExamMinutes - timeArriveMinutes) / 60);
                minutes = (timeExamMinutes - timeArriveMinutes) % 60;
                Console.WriteLine($"{minutes} minutes before the start");
            }
           


        }
    }
}

Моля за съвет :)

 

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

Здравей,

Аз не мога да ти отговоря :), но имам същия въпрос по същата задача и затова се присъединявам :) . Аз предполагам, че не покривам всички възможности и оттам ми идва грешката. Ще бъда благодарна, ак някой помогне и на мен :)

using System;

namespace _08.OnTimeForTheExam
{
    class Program
    {
        static void Main(string[] args)
        {
            int hourStartExam = int.Parse(Console.ReadLine());
            int minStartExam = int.Parse(Console.ReadLine());
            int hourArrive = int.Parse(Console.ReadLine());
            int minArrive = int.Parse(Console.ReadLine());

            

            int exam = hourStartExam * 60 + minStartExam; // Превръщам часовете и минутите в цяло число: 9:30 = 570
            int arrival = hourArrive * 60 + minArrive; // Превръщам часовете и минутите в цяло число: 9:00 = 540
            int difference = exam - arrival; // Разликата В МИНУТИ: 9:30 - 9:00 = 570 - 540 = 30 мин. Ако е отрицателно, то е закъснял

            if (difference == 0)
            {
                Console.WriteLine("On time");
            }
            else if (difference <= 30 && difference > 0)
            {
                Console.WriteLine("On time");
                Console.WriteLine($"{difference} minutes before the start");
            }
            else if (difference <= 59 && difference > 30)
            {
                Console.WriteLine("Early");
                Console.WriteLine($"{difference} minutes before the start");
            }
            else if (difference > 59)
            {
                Console.WriteLine("Early");
                if (difference % 60 < 10)
                {
                    Console.WriteLine($"{difference / 60}:0{difference % 60} hours before the start");
                }
                else if (difference % 60 >= 10 && difference % 60 < 60)
                {
                    Console.WriteLine($"{difference / 60}:{difference % 60} hours before the start");
                }
            }
            else if (difference < 0 && difference > -60)
            {
                Console.WriteLine("Late");
                Console.WriteLine($"{Math.Abs(difference)} minutes after the start");
            }
            else if (difference <= -60)
            {
                Console.WriteLine("Late");
                if (difference % 60 > -10 && difference % 60 < 0)
                {
                    Console.WriteLine($"{Math.Abs(difference / 60)}:0{Math.Abs(difference % 60)} hours after the start");
                }
                else if (difference % 60 <= -10)
                {
                    Console.WriteLine($"{Math.Abs(difference / 60)}:{Math.Abs(difference % 60)} hours after the start");
                }
            }

        }
    }
}
        

 

0
SimeonVasilevv avatar SimeonVasilevv 0 Точки

Мислех си дали не трябва да има и проверка за 00:00 часа... ще опитам по-късно да включа нещо такова...

По-рано опитах с 00:00 час за изпит и 23:59 час на пристигане и не го изкарва правилно, въпреки че е малко двусмислено.. или си закъснял с 23часа и 59 минути или си дошъл по-рано с 1 минута :D

0
IlonaCh avatar IlonaCh 1 Точки

Може ли грешката ти да е в първия "else if "- else if (timeArriveMinutes <= timeExamMinutes && timeExamMinutes - timeArriveMinutes > 30) ? Ако едните минути са равни на другите, то ти всъщност не препокриваш  ли  първия " if "?

            if (timeExamMinutes == timeArriveMinutes)
            {
                Console.WriteLine("On time");

И в такъв случай  програмата няма да знае кой резултат да изведе?

Не съм сигурна много :)

0
08/10/2020 13:07:57
takvor avatar takvor 45 Точки

Ето едно решение на С++, чиято логика може да е полезна:

#include <iostream>
#include <iomanip>
#include <string>
#include <cmath>

int main() {

    int startHour, startMin, arriveHour, arriveMin, startInMinutes, arriveInMinutes, difference;

    std::cin >> startHour >> startMin >> arriveHour >> arriveMin;

    startInMinutes = startHour*60 + startMin;
    arriveInMinutes = arriveHour*60 + arriveMin;

    difference = std::abs(startInMinutes-arriveInMinutes);

    std::string line1 = "";

    if (0 <= (startInMinutes - arriveInMinutes) && (startInMinutes - arriveInMinutes) <= 30) line1 = "On time";
    else if (startInMinutes < arriveInMinutes) line1 = "Late";
    else if (startInMinutes - arriveInMinutes > 30) line1 = "Early";

    std::cout << line1 << std::endl;

    if (difference >= 1)
        if (startInMinutes > arriveInMinutes)
            if (difference < 60)
                std::cout << difference << " minutes before the start" << std::endl;
            else
                std::cout << difference/60 << ":" << std::setw(2) << std::setfill('0') << difference % 60 << " hours before the start" << std::endl;
        if (startInMinutes < arriveInMinutes)
            if (difference < 60)
                std::cout << difference << " minutes after the start" << std::endl;
            else
                std::cout << difference/60 << ":" << std::setw(2) << std::setfill('0') << difference % 60 << " hours after the start" << std::endl;

    return 0;
}

0
IlonaCh avatar IlonaCh 1 Точки

Благодаря!

0
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.