Главная страница
Навигация по странице:

  • 1. Цель работы

  • 3. Ход выполнения

  • бИСТ-223_Гладченко и Самойленко_Лр1. Отчет по лабораторной работе 1 по дисциплине Объектноориентированное программирование Тема Базовые конструкции языка С. Управляющие конструкции


    Скачать 371.23 Kb.
    НазваниеОтчет по лабораторной работе 1 по дисциплине Объектноориентированное программирование Тема Базовые конструкции языка С. Управляющие конструкции
    Дата20.04.2023
    Размер371.23 Kb.
    Формат файлаdocx
    Имя файлабИСТ-223_Гладченко и Самойленко_Лр1.docx
    ТипОтчет
    #1075644

    МИНИСТЕРСТВО НАУКИ И ВЫСШЕГО ОБРАЗОВАНИЯ

    РОССИЙСКОЙ ФЕДЕРАЦИИ
    ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ

    ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ

    «ВОРОНЕЖСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ»

    Факультет информационных технологий и компьютерной безопасности


    (факультет)

    Кафедра Систем автоматизированного проектирования и информационных систем



    ОТЧЕТ ПО ЛАБОРАТОРНОЙ РАБОТЕ № 1




    по дисциплине Объектно-ориентированное программирование



    Тема «Базовые конструкции языка С++. Управляющие конструкции»

    Выполнили студенты группы ИСТ-2023 Д.С. Самойленко

    Подпись, дата Инициалы, фамилия

    Е.С. Гладченко

    Подпись, дата Инициалы, фамилия

    Принял Б.Н. Тишуков


    Подпись, дата Инициалы, фамилия


    Защищена ___________________ Оценка_____________________________

    дата
    2023

    Лабораторная работа № 1

    «Базовые конструкции языка С++. Управляющие конструкции»

    1. Цель работы

    Изучение базовых конструкций языка С++ и управляющих конструкций и применение их на практике.

    2. Задание на лабораторную работу

    Вариант 1

    Задание 1

    Найти значение алгебраического выражения, соответствующего варианту

    задания. Вывести результаты на печать. Все результаты выводить в развернутом

    виде (например: «Сумма чисел А и B равна 3.7854»).

    Значения вводимых величин должны иметь не менее четырех значащих цифр

    и задаются студентом самостоятельно.


    Задание 2

    Составить программу вычисления функции F(x), разложенной в ряд,

    сходящийся в заданной области.

    Вычисления проводить до тех пор, пока модуль разности между

    последующим и предыдущим членами ряда не будет меньше или равен ε.

    Значение ε задается константой и для всех вариантов составляет 0,001.

    Решить задачу для различных значений х. При решении задач массивы не

    использовать. Специальные функции для возведения в степень не использовать.


    Задание 3

    В задании всего 2 варианта: вариант 1 выполняют те, у кого основной

    вариант нечетный, вариант 2 выполняют те, у кого основной вариант четный.

    Каждый вариант содержит 15 задач, содержащих те или иные ошибки

    (логические, ошибки синтаксиса и т.п.). Задача состоит в следующем: используя

    средства отладчика среды, обнаружить все ошибки и сделать программу

    работоспособной (т.е. выполняющей то, что от нее требуется).

    Для отчета по данному заданию необходимо:

    - показать работающие программы;

    - код программ должен быть структурированным;

    - к каждой программе необходимо составить список обнаруженных ошибок

    (согласно сообщениям отладчика), а также пояснения того, как вы исправляли эти ошибки.

    Задание 4


    3. Ход выполнения

    1. Задание 1

    Для выполнения этого задания создаем функцию task_1 в которой будут происходить вычисления. В функции main запрашиваем у пользователя переменные “a” и “b” типа float поскольку получаемый результат может быть нецелочисленный. После чего передаем эти две переменные в функцию task_1. Как было сказано ранее в функции производятся все вычисления разбитые на несколько действий, после чего возвращается общий результат вычислений. Далее, мы выводим этот результат в функции main.



    Рис.1 – Задание 1, часть кода в функции main



    Рис.2 – Задание 1, функция task_1
    2. Задание 2

    Для выполнения второго задания также создаем отдельную функцию task_2. В функции main запрашиваем “x”. В функции task_2 создаем переменную равную первому члену ряда и вторую переменную ряду. Вычисления происходят в цикле while с проверкой модуля разности между

    последующим и предыдущим членами ряда, который не должен быть больше либо равен константе ε. В теле цикла мы возносим переменную х в степень, а в переменную sum заносим сумму из членов ряда.



    Рис.3 – Задание 2, код в функции main



    Рис.4 – Задание 2, функция task_2

    3. Задание 3

    Задача 1

    Неисправный код

    Рабочий код

    Main ()

    { Int n, j;

    Cout>> ‘n’>>endl;

    Cin<
    While j
    { if (n/I = 0) and (n <> j)

    cout>>j>>endl; }

    #include

    #include

    using namespace std;
    int main()

    {

    int n, j = 1;

    cout « "n" « endl;

    cin » n;

    while (j < n) {

    if ((n % j == 0) && (n != j))

    cout « j « endl;

    ++j;

    }

    }

    Список исправленных ошибок:

    1. Int - надо писать с маленькой, присвоить j значение 1, чтобы найти все делители с 1;

    2. стрелки в “cout” в другую сторону, двойные кавычки и надо писать с маленькой буквы;

    3. стрелки в “cin” в другую сторону и надо писать с маленькой буквы;

    4. “while” надо писать с маленькой буквы и условие в скобках;

    5. добавить скобки для условия “if”, заменить: / на %, i на j , <> на !=, and на &&, = на ==;

    6. стрелки в “cout” в другую сторону;

    7. добавить “++j”, чтобы менялось значение нат. делителей, иначе цикл будет бесконечным;

    Задача 2

    Неисправный код

    Рабочий код

    Main ()

    {float a, min, max,res; i:int;

    cout<<‘n=, a1= ,a2= ’<
    cin>>n, a1, a2;

    if (a1>a2)

    (a1=max; a2=min };

    Else a2=max; a1=min; }

    i = 3;

    while i<100

    (cout<<‘a’, I, ‘= ’<>a;

    if (a
    if (a>max) max=a; i++;

    res =max-min;

    cout<

    #include

    #include

    using namespace std;
    int main()

    {

    float a, min, max, res, a1, a2;

    int i;

    cout « "a1 = ";

    cin » a1;

    cout « "a2 = ";

    cin » a2;

    if (a1 > a2) {

    max = a1;

    min = a2;

    }

    else {

    max = a2;

    min = a1;

    }

    i = 3;

    while (i <= 100) {

    cout « "a" « i « "= ";

    cin » a;

    if (a < min)min = a;

    if (a > max)max = a;

    i++;

    }

    res = max - min;

    cout « res « "\n";

    }



    Список исправленных ошибок:

    1. переменную “i” нужно объявить отдельно;

    2. выводить сообщения и считывать нужно отдельно;

    3. для цикла “if” добавить фигурную скобку, Else правильно писать с маленькой буквы else и также добавить фигурную скобку;

    4. условие в while в круглых скобках, а тело цикла в фигурных скобках, и добавить условие “=<”;

    5. оформить вывод “cout” по правилам c++;

    Задача 3

    Неисправный код

    Рабочий код

    if n%1 <> 0

    for (i=1; n; i++;)

    y*=y*I;

    else for (i=1; n; i +=2;) y:=y*I;

    cout<

    #include

    #include

    using namespace std;
    int main()

    {

    int n, y = 1;

    cout « "n = ";

    cin » n;

    if (n % 2 != 0) {

    for (int i = 1; i <= n; i += 2) {

    y *= i;

    }

    }

    else {

    for (int i = 2; i <= n; i += 2) {

    y *= i;

    }

    }

    cout « "Результат = " « y « "\n";

    }


    Список исправленных ошибок:

    1. добавить объявление переменных “n” и “y” равный 1;

    2. с помощью “cout” и “cin” запросить у пользователя переменную “n”;

    3. условие оператора “if” в круглых скобках, <> заменить на !=;

    4. в условии цикла “for” добавить обьявление переменной i, изменить на i <= n;

    5. во втором цикле “for” сделать такие же изменения и в теле цикла переменную “i” записать с маленькой буквы;


    Задача 4

    Неисправный код

    Рабочий код

    Main ()

    { int k, x, m, n;

    float s, rez=rezs=0;

    cout << (`n:, x:`); cin >> (n,x);

    for (k=1; n;) for (m=k; n;)

    { s:= (x+k) / m;

    rez+=s; } rezs:=rezs+rez;

    } cout << rezs:8:3<<\n; }

    #include

    using namespace std;
    int main()

    {

    int k, x, m, n;

    float s, rez = 0;

    float rezs = rez;
    cout << ("n:");

    cin >> n;
    cout << ("x:");

    cin >> x;
    for (k = 1; k <= n; k++ )

    {

    for (m = k; m <= n; m++)

    {

    s = (x + k) / m;

    rez += s;

    }

    rezs = rezs + rez;

    }
    cout << rezs << endl;

    }


    Список исправленных ошибок:

    1. объявить переменную “rezs” с новой строки;

    2. отдельно запросить переменные “n” и “x”;

    3. добавить условие “for”, иначе цикл будет бесконечным;

    4. также изменить условие второго оператора “for”, а в теле цикла заменить := на = ;

    5. изменить конечный вывод убрав :8:3;

    Задача 5

    Неисправный код

    Рабочий код

    Main()

    {

    int I, j, n, s=0;

    cin>>n;

    for (i=1; n)

    for (j=1; I)

    s:=1/(i+2*j);

    cout<

    #include

    using namespace std;
    int main()

    {

    float i, j, n, rez = 0, s = 0, rezs = rez;

    cout << "n: ";

    cin >> n;

    for (i = 1;i <= n; i++)

    {

    for (j = 1; j <= i; j++)

    {

    s = 1 / (i + 2 * j);

    rez += s;

    }

    rezs += rez;

    }

    cout << rezs;

    }

    Список исправленных ошибок:

    1. объявить переменные i, j, n ,s типа float, а не int поскольку результат может быть не целое число и добавить переменные “rez” и “rezs”

    2. добавить вывод запрашиваемой переменной с помощью cout << "n: ";

    3. в операторе for добавить условие i <= n и i++,иначе цикл будет не рабочим, также добавить условие и во втором операторе “for”: j <= i; j++;

    4. заменить s:=1/(i+2*j) на s = 1 / (i + 2 * j), потому что в си++ не существует “:=” ;

    5. добавить в тело цикла for суммирование результатов;

    6. поменять вывод переменной “s” на вывод результатов;

    Задача 6

    Неисправный код

    Рабочий код

    fac=1; s=0;

    for (k=1; 10)

    { s=0;

    for (n=1, k)

    s=s+sin(1+k);

    fac*=k;

    zn=s/fac;

    s=s+zn;}

    #include

    #include

    using namespace std;
    int main()

    {

    float fac = 1, s = 0, zn;

    int k, n;

    float rez = 0;
    for ( k = 1; k <= 10; k++)

    {

    s = 0;

    for (n = 1; n <= k; n++)

    {

    s += sin(k * n);

    }

    fac *= k;

    zn = s / fac;

    rez += zn;

    }


    cout << rez << endl;

    }


    Список исправленных ошибок:

    1. правильно объявить переменные “fac” и “s” добавив тип данных и объявить переменные “zn”, “rez = 0” типа float, переменные “k” и “n” типа int;

    2. для первого и второго цикла “for” добавить условие и шаг цикла;

    3. после второго цикла “for” заменить строку s=s+zn на rez += zn для корректного счета результата;

    4. в конце работы программы вывести переменную rez;

    Задача 7

    Неисправный код

    Рабочий код

    Main()

    { int n, I, k, l; S: float;

    Cuot<<‘Enter n’

    Cin>>n

    For (i=1, n)

    S=sqr(i)*i-3*i+sqr(n)+n

    { If s % 3 = 0

    K=s %3;

    If k % <>0 L=1+s; }

    cout<< ‘Result=’;

    coutl;}

    #include

    #include

    using namespace std;
    int main()

    {

    int n, i, k = 0, l;

    float s;

    cout << "Enter n: ";

    cin >> n;

    for (i = 1; i <= n; i++)

    {

    s = pow(i, 3) - 3 * i * pow(n, 2) + n;
    if ((int(s / 3) == (s / 3)) && (int(s / 3) % 2 == 0))

    {

    k += s;

    }
    }

    cout << "Result = ";

    cout << k;
    }

    Список исправленных ошибок:

    1. переменную I нужно обьявить с маленькой буквы, переменную s нужно объявить отдельно с типом float по правилам c++;

    2. Требуется правильно написать cout, также cin с маленькой буквы;

    3. Добавить условие и шаг табуляции для цикла for, заменить несуществующую функцию sqr на pow для возведения в степень, а так же сделать правильным сам пример;

    4. изменить условие для оператора if для проверки на утроенность и нечетность;

    5. в теле цикла заменить выражение K=s %3 на k += s для корректного счета результата:

    6. в конце программы вывести переменную k;


    4. Задание 4

    Для выполнения 4 задания нам понадобится лишь один условный оператор “if” с помощью которого мы будем проверять меньше ли число 0 (если да, умножаем на минус 1) или нет (не изменяем число).



    Рис.5 – Задание 4, часть кода в main



    Рис.6 – функция для нахождения модуля

    Так же было реализовано меню с помощью оператора switch (возможность выбора номера нужной задачи для ее проверки преподавателем).



    Рис. 7 – часть кода меню

    Вывод

    В ходе выполнения лабораторной работы номер 1 мы изучили базовые конструкции языка С++ и управляющие конструкции. Научились считать алгебраические выражения, находить и исправлять ошибки в коде, пользоваться циклами и т.д.

    Приложение А

    Листинг программного кода языка C++

    #include

    using namespace std;
    float task_1(float a, float b); // Объявление функции 1 задания (алгебраическое выражение)

    double task_2(double x); // Объявление функции 2 задания (вычисление функции)

    float task_4(float numb); // Объявление функции 4 задания (модуль числа)
    int main()

    {

    setlocale(LC_ALL, "RUS");

    int change = 0;
    cout << "Здравствуйте, эта программа выполнена студентами бИСТ-223 Самойленко Д. и Гладченко Е." << endl << "и является первой лабораторной работой по дисциплине ООП" << endl;
    while(change != 4)

    {

    cout << "\nПожалуйста, выберите пункт из списка: " << endl;

    cout << "1. Задание 1" << endl;

    cout << "2. Задание 2" << endl;

    cout << "3. Задание 4" << endl;

    cout << "4. Завершение работы программы" << endl;
    cin >> change;

    switch(change)

    {

    case 1:

    float a, b, result;
    cout << "\nВведите a: ";

    cin >> a;

    cout << "Введите b: ";

    cin >> b;
    result = task_1(a, b);
    cout << "\nВыражение sin(a + b^3) * корень(e^(a^2-9,4)/(a+b)^3 = " << result << endl;
    break;

    case 2:

    double x, sum;

    cout << "Введите значение х: ";

    cin >> x;
    sum = task_2(x);
    cout << "\nФункция F(x) = " << sum << endl;
    break;

    case 3:

    float numb;

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

    cin >> numb;
    cout << "\nМодуль введенего числа = " << task_4(numb) << endl;
    break;

    case 4:

    cout << "До свидания!" << endl;

    break;

    }

    }

    }
    float task_1(float a, float b)

    {

    float sinus_squared = pow(sin(a + pow(b, 3)), 2);

    float pod_kornem = exp(pow(a, 2) - 9.4) / pow((a + b), 3);

    float koren = sqrtf(pod_kornem);

    float resultat = sinus_squared * koren;
    return resultat;

    }
    double task_2(double x)

    {

    const double e = 0.001;

    double d = 1.00;

    double d_sled = -x;

    double sum = d;

    while (fabs(d_sled - d) >= e)

    {

    d *= -x;

    d_sled *= -x;

    sum += d;

    }

    return sum;

    }
    float task_4(float numb)

    {

    if(numb > 0)

    {

    numb = numb;

    }

    else

    {

    numb = (-1) * numb;

    }
    return numb;

    }


    написать администратору сайта