Добавил:
Берегите себя и своих близких. По всем вопросам - пишите в мой вк, помогу чем смогу. Всем УЗС привет! Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
0
Добавлен:
18.12.2024
Размер:
400.32 Кб
Скачать

Федеральное государственное бюджетное образовательное учреждение высшего образования Российской Федерации

«Московский государственный университет путей сообщения Императора Николая 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. 1

  2. 2

  3. 3

  4. 4

  5. 0

  6. 5

  7. 6

  8. 0

  9. 7

  10. 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

  1. 124

  2. 447

  3. 88

  4. 126

  5. 854

Все цифры в числе 124 разные

Все цифры в числе 126 разные

Все цифры в числе 854 разные