Файл: Техническое задание на программу Калькулятор.docx

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 26.10.2023

Просмотров: 211

Скачиваний: 15

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

Задача 1: [числа, операторы управления]. Разработать программу «Калькулятор» в соответствии со следующим техническим заданием.
Техническое задание на программу «Калькулятор».

Программа имитирует вычислительные действия простейшего арифметического калькулятора. 

На вход подается вначале одно действительное число, затем – знак арифметической операции («+», «», «*», «/») и второе действительное число. В зависимости от знака операции над числами выполняется соответствующее действие. Результат операции выводится на экран и накапливается от действия к действию до тех пор, пока вместо знака операции не будет введен символ «С», или символ «Q», или любой другой символ. 

При этом, если вводится символ «С», то результат обнуляется, но калькулятор «продолжает работать», т.е. – «запрашивает» первое число, знак и второе число. 

Если вводится любой другой символ, отличный от символов знаков операций, символа «С», или символа «Q» то программа «Калькулятор» «продолжает работать», но «просит повторить» ввод знака операции. 

Если вводится символ «Q», то работа программы заканчивается с выводом последнего накопленного результата. 

Программа использует управляющие конструкции:

  • Условного управления типа if…else для проверки условий корректного ввода и операции деления;

  • Оператор выбора типа switch()…case…default для выбора арифметического действия над числами в соответствие со знаком операции;

Любой из операторов цикла (do…while(), while() или for(..;..;..)) для проверки условий повтора или окончания работы программы.


Код C++:
#include

#include

using namespace std;
int main()

{

setlocale(0, "");

double a, b, d;

char c;

bool cl = false, qu = false, proverka;

while(!qu)

{

cl = false;

cout << "Введите первое число: " << endl;

cin >> a;

d = a;

while (!cl)

{

proverka = true;

cout << "Введите действие '+', '-', '*', '/', c (очистить), q (выход): " << endl;

cin >> c;

if (c == '/')

{

cout << "Введите второе число: " << endl;

cin >> b;

while (b == 0)

{

cout << "Ошибка! Деление на ноль!" << endl;

cout << "Введите второе число: " << endl;

cin >> b;

}

d /= b;

}

else

{

switch (c)

{

case '+':

cout << "Введите второе число: " << endl;

cin >> b;

d += b;

break;

case '-':

cout << "Введите второе число: " << endl;

cin >> b;

d -= b;

break;

case '*':

cout << "Введите второе число: " << endl;

cin >> b;

d *= b;

break;

case 'c':

system("CLS");

cl = true;

break;

case 'q':

cl = true;

qu = true;

break;

default:

cout << "Ошибка! Введите число:" << endl;

proverka = false;

}

}

if (proverka && !cl)

cout << "Ответ:" << d << endl;

}

}

return 0;

}


Результат выполнения:


Задача 2: [массивы, операторы управления]. Написать программу, которая проверяет, является ли заданный явно массив размерности 9×9 – матрицей для квадрата Судоку.


Пример явно заданной матрицы А:

int A[9][9]=

{{1,2,3,4,5,6,7,8,9},

{4,5,6,7,8,9,1,2,3},

{7,8,9,1,2,3,4,5,6},

{2,3,4,5,6,7,8,9,1},

{6,7,8,9,1,2,3,4,5},

{8,9,1,2,3,4,5,6,7},

{3,4,5,6,7,8,9,1,2},

{6,7,8,9,1,2,3,4,5},

{9,1,2,3,4,5,6,7,8}}

* Квадратом Судоку называется большой квадрат, размерности 9×9, состоящий из 9 малых квадратов, размерности 3×3, такой, что в каждой строке и в каждом столбце большого квадрата и в каждом малом квадрате размещены все 9 чисел и при этом нет повторяющихся (см. пример на рисунке)








Код С++:
#include

using namespace std;
int main()

{

setlocale(0, "");

int stroka[9][9], stolbec[9][9];

bool fail[3];

for (int i=0;i<9;i++)

{

for (int j=0;j<9;j++)

{

stroka[i][j] = 0;

stolbec[i][j] = 0;

fail[i/3] = true;

}

}
int A[9][9]= //судоку

{{1,2,3,4,5,6,7,8,9},

{4,5,6,7,8,9,1,2,3},

{7,8,9,1,2,3,4,5,6},

{2,3,4,5,6,7,8,9,1},

{5,6,7,8,9,1,2,3,4},

{8,9,1,2,3,4,5,6,7},

{3,4,5,6,7,8,9,1,2},

{6,7,8,9,1,2,3,4,5},

{9,1,2,3,4,5,6,7,8}};
/* int A[9][9]= //не судоку

{{1,2,3,4,5,6,7,8,9},

{4,5,6,7,8,9,1,2,3},

{7,8,9,1,2,3,4,5,6},

{2,3,4,5,6,7,8,9,1},

{5,7,7,8,9,1,2,3,4},

{8,9,1,2,3,4,5,6,7},

{3,4,5,6,7,8,9,1,2},

{6,7,8,9,1,2,3,4,5},

{9,1,2,3,4,5,6,7,8}};

*/

for (int i=0;i<9;i++)

{

if (i == 3 || i == 6)

cout << "------|-------|------" << endl;

for (int j=0;j<9;j++)

{

if (j == 3 || j == 6)

cout << "| ";

cout << A[i][j] << " ";

}

cout << endl;

}

for (int i=0;i<9;i++)

{

for (int j=0;j<9;j++)

{

if (stroka[i][A[i][j]-1] == 0)

stroka[i][A[i][j]-1] = 1;

if (stolbec[j][A[i][j]-1] == 0)

stolbec[j][A[i][j]-1] = 1;

}

}

for (int i=0;i<9;i++)

{

for(int j=0;j<9;j++)

{

if (stroka[i][j] != 1)

fail[0] = false;

if (stolbec[i][j] != 1)

fail[1] = false;

fail[2] = fail[0] && fail[1];

}

}

if (!fail[2])

{

cout << endl << "Не Судоку" << endl;

if (!fail[0])

{

cout << "строка ";

for (int i=0;i<9;i++)

for (int j=0;j<9;j++)

if (stroka[i][j] != 1)

cout << i+1 << " ";

}

if (!fail[1])

{

cout << "и столбец ";

for (int i=0;i<9;i++)

for (int j=0;j<9;j++)

if (stolbec[i][j] != 1)

cout << i+1;

cout << endl;

}

}

else

cout << "Эта матрица - квадрат Судоку" << endl;

system("pause");

return 0;

}

Результат выполнения 1:


Результат выполнения 2:


Задача 3: [массивы, операторы управления]. Написать программу, которая проверяет, является ли введённая с клавиатуры (или заданная явно) квадратная матрица "магическим" квадратом. "Магическим" квадратом называется матрица, у которой сумма чисел в каждом горизонтальном ряду, в каждом вертикальном и по каждой из диагоналей одна и та же.


Код С++:
#include

using namespace std;
int main()

{

setlocale(0, "");
const int razmer = 3;

int stroka[razmer], stolbec[razmer], check1, check2;

int A[razmer][razmer]=

{{2,9,4},

{7,5,3},

{6,1,8}};

/*

const int razmer = 4;

int stroka[razmer], stolbec[razmer], check1, check2;

int A[razmer][razmer]=

{{13,8,12,1},

{2,11,7,14},

{3,10,6,15},

{16,5,9,4}};

*/

for (int i=0;i
{

for (int j=0;j
cout << A[i][j] << " ";

cout << endl;

}

for (int i=0;i
{

stroka[i] = 0;

stolbec[i] = 0;

check1 = 0;

check2 = 0;

}
for (int i=0;i
{

for (int j=0;j
{

stroka[i] += A[i][j];

stolbec[j] += A[i][j];

if (i == j)

check1 += A[i][j];

if (i == razmer-1-j)

check2 += A[i][j];

}

}

int et = stroka[0];

for (int i=0;i
if (stroka[i] != et || stolbec[i] != et || check1 != et || check2 != et)

{

cout << "Матрица не является магическим квадратом" << endl;

break;

}

else

{

cout << "Матрица является магическим квадратом" << endl;

break;

}

system("pause");

return 0;

}
Результат выполнения 1 (3х3):

Результат выполнения 2 (3х3):


Результат выполнения 3 (4х4):

Результат выполнения 4 (4х4):



Задача 4: [символьные массивы, строки].

Дан текстовый файл stroka_3.txt с произвольным количеством строк, состоящих из произвольного количества слов. Каждая строка начинается в файле с новой строки. Между словами есть не менее одного пробела (см. содержимое файла).

Считать построчно данные текстового файла в массив символьных строк.

Определить и вывести на экран количество строк в файле, а для каждой строки - общее количество символов и количество слов в ней.

Содержание файла:



Код С++:
#include

#include

#include

using namespace std;
int main()

{

unsigned int strok = 0, slov = 0, simvolov = 0;

string input;

bool f = false;

setlocale(0, "");

ifstream text("stroka_3.txt");

cout << "Построчный вывод из файла:" << endl;

while (getline(text, input))

{

for(int i=0;i
{

if (input[i] != ' ')

simvolov ++;

if (input[i] == ' ' && f == false)

f = true;

if (input[i] != ' ' && f == true)

{

f = false;

slov ++;

}

}

cout << "Строка " << strok << " -> " << input << endl;

cout << "\t \t \t \t Количество символов = " << simvolov << endl;

cout << "\t \t \t \t Количество слов = " << slov + 1 << endl;

strok ++;

simvolov = 0;

slov = 0;

f = false;

}

cout << "Всего строк -> " <
system("pause");

return 0;

}


Результат выполнения: