Моля за обяснение на решението на [Judge] C# Basics -2. Letters, Symbols, Numbers
https://judge.softuni.bg/Contests/17/CSharp-Basics-Exam-25-July-2014-Morning
Не мога да се сетя как да си направя if/else да не са вложени а да е само
if / else if това ми е кода които се сетих и не работи а отдолу е авторското решение
if (ch != ' ' || ch != '\t' || ch != '\r' || ch != '\n')
{
lettersSum += 0; SymbolsSum += 0; digitsSum += 0;
}
else if (ch >= 'a' && ch <= 'z')
{
int weight = (ch - 'a' + 1) * 10;
lettersSum += weight;
}
else if (ch >= '0' && ch <= '9')
{
int weight = (ch - '0') * 20;
digitsSum += weight;
}
else
{
SymbolsSum += 200;
}
&& (ch != ' ' || ch != '\t' || ch != '\r' || ch != '\n')) е излишно когато се проверява за буква или цифра.
В ASCII буквите и цифрите са с последователни позиции, което значи, че ако даден символ отговаря на условието ch >= 'a' && ch <= 'z' той няма как да е нещо различно от малка буква; аналогично с цифрите.
Да прав си, не гледах смисала на решението а структурата и показах просто как може да избегне вложения if.
(ch != ' ' || ch != '\t' || ch != '\r' || ch != '\n') може би трява да се използва само в последния else if където се добавя 200.
Или по точно:
if (ch >= 'a' && ch <= 'z') { ... }
else if (ch >= '0' && ch <= '9') { ... }
else if (ch != ' ' && ch != '\t' && ch != '\r' && ch != '\n')
{
SymbolsSum += 200;
}
EDIT: Сега видях че би трябвало да са с "И" а не с "ИЛИ", за да работи правилно
^ Това като че ли е най-чистият вариант.