Условный оператор if

Задания раздела 5.3.1
5.5. Напишите собственную версию программы преобразования числовой оценки в символ с использованием оператора if else.
5.6. Перепишите программу оценки так, чтобы использовать условный оператор вместо оператора if else.
5.7. Исправьте ошибки в каждом из следующих фрагментов кода:
(a) if (ival!=ival2)
ival1=ival2
else ival1=ival2=0;
(b) if (ival<minval)
minval=ival;
occurs=1;
(c) if (int ival=getvalue())
cout << "ival= " << ival << endl;
if (ival) cout << "ival=0\n";
(d) if (ival=0) ival=getvalue();
5.8. Что такое "потерянный оператор else"? Как в языке C++ определяется принадлежность ветви else?

5.3.1


Программа, разбирающаяся в этом разделе, такая:
#include <iostream>
#include <vector>
int main()
{
std::vector<std::string> scores={"F", "D", "C", "B", "A", "A++"};
std::string lettergrade;
int grade=0;
std::cout << "Enter your grade:"<<std::endl;
std::cin >> grade;
if (grade<60) lettergrade=scores[0];
else {
lettergrade=scores[(grade-50)/10];
if (grade!=100) if (grade%10>7) lettergrade+='+';
else if (grade%10<3) lettergrade+='-';
}
std::cout << lettergrade;
return(0);
}

5.5. Напишите собственную версию программы преобразования числовой оценки в символ с использованием оператора if else.

Программа называется "назад в прошлое".
#include <iostream>
#include <vector>
int main()
{
std::vector<std::string> scores={"F", "D", "C", "B", "A", "A++"};
std::string lettergrade;
int grade=0;
std::cout << "Enter your grade:"<<std::endl;
std::cin >> grade;
if (grade<60) lettergrade=scores[0];
else
if (grade<70) lettergrade=scores[1];
else
if (grade<80) lettergrade=scores[2];
else
if (grade<90) lettergrade=scores[3];
else
if (grade<100) lettergrade=scores[4];
else
if (grade==100) lettergrade=scores[5];
std::cout << lettergrade;
return(0);
}

5.6. Перепишите программу оценки так, чтобы использовать условный оператор вместо оператора if else.
Взял программу из статьи и переписал. Результатом недоволен, но программа работает. Как выйти из условия не используя в последнем условии оператор я еще не знаю, можно ли использовать фигурные скобки в условном операторе тоже не в курсе. На оба вопроса ответ скорее всего - нет. Неудобно.

#include <iostream>
#include <vector>
int main()
{
std::vector<std::string> scores={"F", "D", "C", "B", "A", "A++"};
std::string lettergrade;
int grade=0;
std::cout << "Enter your grade:"<<std::endl;
std::cin >> grade;
(grade<60) ? lettergrade=scores[0] : lettergrade=scores[(grade-50)/10];
(grade>60 && grade!=100 && grade%10>7) ? lettergrade+='+' :
(grade!=100 && grade%10<3) ? lettergrade+='-' :
lettergrade+=' ';
std::cout << lettergrade;
return(0);
}

5.7. Исправьте ошибки в каждом из следующих фрагментов кода:
(a) if (ival!=ival2)
ival1=ival2
else ival1=ival2=0;

if (ival!=ival2)
ival1=ival2; // точка с запятой
else ival1=ival2=0;

(b) if (ival<minval)
minval=ival; 
occurs=1;

if (ival<minval)  {
minval=ival;
occurs=1;
}

(c) if (int ival=getvalue())
cout << "ival= " << ival << endl;
if (ival) cout << "ival=0\n";

if (int ival=getvalue()) {
std::cout << "ival= " << ival << std::endl;
} else
if (!ival) std::cout << "ival=0\n";

(d) if (ival=0) ival=getvalue();

if (int ival=0) ; else ival=getvalue();

5.8. Что такое "потерянный оператор else"? Как в языке C++ определяется принадлежность ветви else?

Потерянный оператор else возникает тогда, когда возникает вопрос: как установить, какому  оператору if принадлежит данный оператор else.
Решается в C++ так: оператор else принадлежит ближайшему расположенному выше оператору if без else.

Добавить комментарий