Loading...
n4wn4w avatar n4wn4w 4 Точки

Моля за обяснение на решението на [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;
}

http://pastebin.com/DRiPT8uq

Тагове:
0
Programming Basics
crazy7 avatar crazy7 177 Точки

Нормално да не работи защото при теб за да се изпълния този иф - if (ch >= 'a' && ch <= 'z'), първия трябва да е грешен да не е изпълнено условиет. А при авторското решение първо трябва първия да е верен след това и втория да е верен - if (ch >= 'a' && ch <= 'z').

 

За да не го правиш с вложени може да стани така:

if ((ch >= 'a' && ch <= 'z') && (ch != ' ' || ch != '\t' || ch != '\r' || ch != '\n'))

и съответно

if ((ch >= '0' && ch <= '9') && (ch != ' ' || ch != '\t' || ch != '\r' || ch != '\n'))

Но според мен е по-добре с вложените защото, най-малкото ако са повече иф-ве трябва на всичките да добавиш условието!

 

1
14/03/2015 13:59:09
Filkolev avatar Filkolev 4482 Точки

&& (ch != ' ' || ch != '\t' || ch != '\r' || ch != '\n')) е излишно когато се проверява за буква или цифра.

В ASCII буквите и цифрите са с последователни позиции, което значи, че ако даден символ отговаря на условието ch >= 'a' && ch <= 'z' той няма как да е нещо различно от малка буква; аналогично с цифрите.

1
crazy7 avatar crazy7 177 Точки

Да прав си, не гледах смисала на решението а структурата и показах просто как може да избегне вложения 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: Сега видях че би трябвало да са с "И" а не с "ИЛИ", за да работи правилно

2
14/03/2015 14:57:54
Filkolev avatar Filkolev 4482 Точки

^ Това като че ли е най-чистият вариант.

0
Filkolev avatar Filkolev 4482 Точки

Просто промени първия if: 

if (ch == ' ' || ch == '\t' || ch == '\r' || ch == '\n')

Така в началото хващаш всички whitespaces, след което може спокойно да проверяваш за букви, цифри и други символи.

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