• Предмет: Информатика
  • Автор: PoMOGATORVOTVETAX
  • Вопрос задан 1 год назад

СИ ШАРП!!!!!!!! Клиент купил N пирожков по цене k гривен. Сколько денег он заплатил? Ответ вывести с правильным окончание в слове «гривен», например: Клиент заплатил 21 гривну. Клиент заплатил 23 гривны. Клиент заплатил 27 гривен

Ответы

Ответ дал: vovapecherscky
3

using System;

using System.Collections.Generic;

using System.Collections.Specialized;

namespace ConsoleApp3

{

   class Program

   {

       static void Main(string[] args)

       {

           int count = Convert.ToInt32(Console.ReadLine());

           int price = Convert.ToInt32(Console.ReadLine());

           int sum = count * price;

           char lastNum = Convert.ToString(sum)[Convert.ToString(sum).Length - 1];

           Console.Write(sum+" ");

           if (lastNum == '1')

           {

               Console.Write("гривна");

           }

           else if(lastNum == '2' || lastNum == '3' || lastNum == '4')

           {

               Console.Write("гривны");

           }

           else

           {

               Console.Write("гривен");

           }

       }

   }

}


LRSM: В условии сказано: "Ответ вывести с правильным окончание в слове «гривен»". В вашем решении вы не учли числа с 11 по 14, при которых слово «гривен» склоняется иначе, не как при числах 1..4 или 21..24.
Также вы не учли тот факт, что цена обычно является вещественным числом.
LRSM: И ещё: в условии не сказано, что сначала вводится количество пирожков, а затем их цена. В условии вообще ничего про ввод не сказано. Поэтому, в вашем решении необходимо пояснить, что вводится сначала количество, а затем цена, тем более, что вы не используете те переменные, которые даны в условии.
vovapecherscky: Спасибо, что-то с утра невнимательный какой-то) Сейчас исправлю
Ответ дал: LRSM
5

Ответ:

  • Console.Write("N: ");
  • double N = double.Parse(Console.ReadLine());
  • Console.Write("k: ");
  • double k = double.Parse(Console.ReadLine());
  • string S = (N * k).ToString();
  • string grn = S[^1] == '1' ? "гривну" : (S[^1] > '1' && S[^1] < '5') ? "гривны" : "гривен";
  • if (S.Length > 1) if (S[^2] == '1') grn = "гривен";
  • Console.WriteLine($"Клиент заплатил {S} {grn}.");
  • Console.ReadLine();

Пример работы:

Приложения:

PoMOGATORVOTVETAX: А чем можно заменить этот знак- ^??Просто в консольном приложение(NET Framework) его отмечают как недопустимый
LRSM: Это нововведение C# 8 — индексация с конца. И да, в .NET Framework работать не будет. Можете заменить на "S.Lenght - " или переходите .NET Core :)
LRSM: Если слишком длинная или не понятная строчка получается — можете написать так:
string grn = "";
if (S[S.Length - 1] == '1') grn = "гривну";
else if (S[S.Length - 1] > '1' && S[S.Length - 1] < '5') grn = "гривны";
else grn = "гривен";
if (S.Length > 1) if (S[S.Length - 2] == '1') grn = "гривен";
LRSM: Тогда можно просто "string grn;" (без присваивания).
Вас заинтересует