
C++ программы НОВИКОВ / Отчет
.docxФедеральное государственное бюджетное образовательное учреждение высшего образования Российской Федерации
«Московский государственный университет путей сообщения Императора Николая II (МГУПС (МИИТ)»
ДОМАШНЕЕ ЗАДАНИЕ
По дисциплине «Информатика»
Вариант №7
Выполнил:
Студент группы УЗС-111
Крюков Никита Сергеевич
Преподаватель:
Новиков Александр Иванович
Москва - 2016
Задание №1
Заданы три корня кубического уравнения a, b, c. Найти коэффициенты этого уравнения.
Код:
#include "stdafx.h"
#include <iostream>
#include <math.h>
#include <stdio.h>
using namespace std;
int main()
{
int x1, x2, x3;
scanf_s("%d %d %d", &x1, &x2, &x3);
double a = -(x1 + x2 + x3);
double b = x1*x2 + x2*x3 + x3*x1;
double c = -(x1*x2*x3);
printf("a=%2.2lf, b=%2.2lf, c=%2.2lf.", a, b, c);
system("pause");
return 0;
}
Блок-схема:
Консоль:
Проверка:
1, 2, 3
a=-6.00, b=11.00, c=-6.00
-1, -2, -2
a=5.00, b=8.00, c=4.00
Задание №2
Как известно, число делится на 3 тогда и только тогда, когда сумма его цифр делится на 3. Проверить этот признак на примере вводимого трехзначного числа.
Код:
#include "stdafx.h"
#include <stdio.h>
using namespace std;
int main()
{
setlocale(LC_ALL, "Russian");
int x;
bool kek2;
printf("Enter x= ");
scanf_s("%d", &x);
x = x / 100 + x / 10 % 10 + x % 10;
kek2 = (x % 3 == 0);
if (kek2) printf("Верно");
else printf("Не верно");
system("pause");
return 0;
}
Блок-схема:
Консоль:
Проверка:
x = 333
“Верно”
x = 124
“Не верно”
Задание №3
Вычислить и вывести на экран в виде таблицы значения функции F на интервале от Xнач до Xкон с шагом dX, функция определяется следующим образом:
где a, b, c – действительные числа. Значения a, b, c, Xнач, Xкон, dX вводятся с клавиатуры.
Код:
#include "stdafx.h"
#include "stdafx.h"
#include <iostream>
using namespace std;
void func(float a, float b, float c)
{
float x1, x2, dx, F;
int k;
cout << "Введите начало отрезка: ";
cin >> x1;
cout << "Введите конец отрезка: ";
cin >> x2;
cout << "Введите шаг: ";
cin >> dx;
for (int x = x1; x<x2; x += dx)
{
k = 0;
if (c != 0 && x < 5)
{
F = -a*(x*x) - b;
}
else
{
if (c == 0 && x > 5)
{
F = (x - a) / x;
}
else
if (c != 0)
{
F = -x / c;
}
else
k++;
}
if (k == 0)
cout << "При значении [" << x << "] функция F = " << F << endl << endl;
else
cout << "При значении [" << x << "] функция F не может быть вычислена так как присутствует деление на нуль." << endl << endl;
}
}
int main()
{
setlocale(0, "");
float a, b, c;
cout << "Введите a: ";
cin >> a;
cout << "Введите b: ";
cin >> b;
cout << "Введите c: ";
cin >> c;
func(a, b, c);
system("pause");
return 0;
}
Блок-схема:
Консоль:
Проверка:
A: 2
B: 3
C: 4
Начало отрезка: 1
Конец отрезка: 9
Шаг: 2
При значении [1] функция F = -5
При значении [3] функция F = -21
При значении [5] функция F = -1.25
При значении [7] функция F = -1.75
Задание №4
Известно время начала и окончания (например с 06:00 до 24:00) работы некоторого пригородного автобусного маршрута с одним автобусом на линии, а также протяженность маршрута в минутах (в один конец) и время отдыха на конечных остановках. Составить суточное расписание этого маршрута (моменты отправления с конечных пунктов) без учета времени на обед и пересменку.
Код:
#include "stdafx.h"
#include <iostream>
using namespace std;
int main() {
setlocale(0, "");
int sh, sm;
int fh, fm;
cout << "Все переменные вводить в минутах" << endl;
cout << "Начало работы и конец в формате 00:00" << endl;
cout << "" << endl;
cout << "Начало работы автобуса: ";
scanf_s("%d:%d", &sh, &sm);
cout << "Конец работы автобуса: ";
scanf_s("%d:%d", &fh, &fm);
cout << "Протяженность маршрута и время отдыха" << endl;
int start = sh * 60 + sm;
int finish = fh * 60 + fm;
int way, rest;
scanf_s("%d %d", &(way), &(rest));
int x = way + rest;
cout << "" << endl;
cout << "Расписание автобуса" << endl;
for (int t = start, i = 0; t<finish; t += x, i++)
{
printf("%02d:%02d %s", t / 60, t % 60, i % 2 == 0 ? "\t" : "\n");
}
system("pause");
return 0;
}
Блок-схема:
Консоль:
Проверка:
Начало работы автобуса: 06:00
Конец работы автобуса: 24:00
Протяженность маршрута и время отдыха
120
15
Расписание автобуса
06:00 08:15
10:30 12:45
15:00 17:15
19:30 21:45
Задание №5
В одномерном массиве, состоящем из N вещественных элементов, вычислить: номер максимального элемента массива; произведение элементов массива, расположенных между первым и вторым нулевыми элементами.
Преобразовать массив таким образом, чтобы в первой его половине располагались элементы, стоявшие в нечетных позициях, а во второй половине – элементы, стоявшие в четных позициях.
Код:
#include "stdafx.h"
#include <cstdio>
#include <sstream>
#include <iostream>
using namespace std;
int a[100];
int n = 0, i = 0, imax = 0, izero = 0, t = 0, j = 0;
int p = 0;
void main()
{
setlocale(LC_ALL, "Russian");
cout << ("Введите кол-во элементов массива: ");
cin >> (n);
izero = 0;
for (int stop = n, i = 1; i <= stop; i++)
{
cout << ("Введите A("); cout << (i); cout << ("): ");
cin >> (a[i - 1]);
if ((i == 1) || (a[i - 1] > a[imax - 1]))
imax = i;
if ((izero == 0) && (a[i - 1] == 0))
izero = i;
}
cout << ("Максимальный элемент "); cout << (a[imax - 1]); cout << (" с номером "); cout << (imax) << endl;
p = 0;
if (izero > 0)
{
i = izero + 1;
while ((i <= n) && (a[i - 1] != 0))
{
if (i < n)
p = (p + int(p == 0)) * a[i - 1];
else
p = 0;
i++;
}
}
if (p == 0)
cout << ("В массиве нет или только один нулевой элемент. Либо присутствует умножение на 0 ") << endl;
else
{
cout << ("Произведение элементов между 1-м и 2-м нулевыми элементами = "); cout << (p) << endl;
}
for (int stop = n / 2 + 1, i = 2; i <= stop; i++)
{
t = a[i - 1];
for (int stop = n - 1, j = i; j <= stop; j++)
a[j - 1] = a[j + 1 - 1];
a[n - 1] = t;
}
cout << ("Преобразованный массив: ") << endl;
for (int stop = n, i = 1; i <= stop; i++)
cout << (a[i - 1]) << endl;
system("pause");
}
Блок-схема:
Консоль:
Проверка:
Количество элементов массива: 10
1
2
3
4
0
5
6
0
7
8
Максимальный элемент 8 с номером 10
Произведение элементов между 1м и 2м нулевыми элементами = 30
Преобразованный массив:
1
3
0
6
7
4
2
5
0
8
Задание №6
Для заданной матрицы размером 8 на 8 найти такие k, что k-я строка матрицы совпадает с k-м столбцом.
Найти сумму элементов в тех строках, которые содержат хотя бы один отрицательный элемент.
Код:
#include <stdafx.h>
#include <iostream>
#include <windows.h>
using namespace std;
int main()
{
setlocale(LC_ALL, "Russian");
int iSumm, i, j;
bool bFlag;
int Matrix[8][8] = {
{ 2, 7, 2, 7, 1, -4, 0, 3 },
{ 1, 0, 7, 6, 0, 8, 3, 5 },
{ 2, 7, 1, 8, 1, 4, 9, 3 },
{ 9, 2, 8, 5, 2, 0, 0, 6 },
{ 7, 1, 1, 3, 9, -3, 9, 1 },
{ 8, 2, 4, 9, 1, 6, 4, 9 },
{ 0, 3, 9, 0, 9, 4, 8, 8 },
{ 1, 8, 3, 2, 8, 2, 8, 0 }
};
cout << "Матрица A=" << endl;
for (i = 0; i < 8; i++) {
cout << "{";
for (j = 0; j < 8; j++) {
if (j<7) {
cout << Matrix[i][j] << ", ";
}
else {
cout << Matrix[i][j] << "}" << endl;
}
}
}
cout << "k = ";
for (i = 0; i < 8; i++) {
bFlag = true;
for (j = 0; j < 8; j++) {
if (Matrix[i][j] != Matrix[j][i]) {
bFlag = false;
break;
}
}
if (bFlag) cout << " " << i + 1;
}
cout << endl;
for (i = 0; i < 8; i++)
{
bFlag = false; iSumm = 0;
for (j = 0; j < 8; j++)
{
if (Matrix[i][j] < 0) bFlag = true;
iSumm += Matrix[i][j];
}
if (bFlag) cout << "Сумма элементов строки #" << i << " = " << iSumm << endl;
}
system("PAUSE");
return 0;
}
Блок-схема:
Консоль:
Проверка:
{ 2, 7, 2, 7, 1, -4, 0, 3 },
{ 1, 0, 7, 6, 0, 8, 3, 5 },
{ 2, 7, 1, 8, 1, 4, 9, 3 },
{ 9, 2, 8, 5, 2, 0, 0, 6 },
{ 7, 1, 1, 3, 9, -3, 9, 1 },
{ 8, 2, 4, 9, 1, 6, 4, 9 },
{ 0, 3, 9, 0, 9, 4, 8, 8 },
{ 1, 8, 3, 2, 8, 2, 8, 0 }
K= 3 7
Сумма элементов строки 0 = 18
Сумма элементов строки 4 = 28
Задание №7
Среди заданных натуральных чисел найти такие, десятичная запись которых не содержит одинаковых цифр.
Код:
#include "stdafx.h"
#include <iostream>
using namespace std;
int main()
{
setlocale(LC_ALL, "Russian");
int m;
cout << "Введите количество чисел: ";
cin >> m;
int*arr;
arr = new int[10];
for (int i = 0; i < m; i++) {
cout << "Значение " << i << " элемента: ";
cin >> arr[i];
}
for (int i = 0; i<m; i++)
{
int d[10];
for (int j = 0; j<10; j++) d[j] = 0;
int n = arr[i];
while (n)
{
int k = n % 10;
if (d[k] != 0) break;
d[k]++;
n /= 10;
}
if (n)
{
continue;
}
cout << "Все цифры в числе " << arr[i] << " разные" << "\n";
}
system("pause");
return 1;
}
Блок-схема:
Консоль:
Проверка:
Количество чисел: 5
124
447
88
126
854
Все цифры в числе 124 разные
Все цифры в числе 126 разные
Все цифры в числе 854 разные