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

  • Например

  • Программирование на языке СИ. контр на СИ. Лабораторная работа по дисциплине Программирование на языке си Выполнил специальность 230105 Содержание. Введение Постановка задач


    Скачать 243.86 Kb.
    НазваниеЛабораторная работа по дисциплине Программирование на языке си Выполнил специальность 230105 Содержание. Введение Постановка задач
    АнкорПрограммирование на языке СИ
    Дата11.03.2022
    Размер243.86 Kb.
    Формат файлаdocx
    Имя файлаконтр на СИ.docx
    ТипЛабораторная работа
    #392473

    институт гуманитарных

    и инженерных технологий»

    Кафедра «Программное обеспечение и защита информации»

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

    по дисциплине:

    «Программирование на языке СИ»
    Выполнил

    специальность 230105

    Содержание.
    Введение

    1. Постановка задач

    2. Результат программы до работы

    3. Результат программы после работы

    Заключение

    Литература

    Введение
    С++ - язык общего назначения и задуман для того, чтобы настоящие программисты получили удовольствие от самого процесса программирования. За исключением второстепенных деталей он содержит язык С как подмножество. Язык С расширяется введением гибких и эффективных средств, предназначенных для построения новых типов. Программист структурирует свою задачу, определив новые типы, которые точно соответствуют понятиям предметной области задачи. Такой метод построения программы обычно называют абстракцией данных. Информация о типах содержится в некоторых объектах типов, определенных пользователем. С такими объектами можно работать надежно и просто даже в тех случаях, когда их тип нельзя установить на стадии трансляции. Программирование с использованием таких объектов обычно называют объектно-ориентированным. Если этот метод применяется правильно, то программы становятся короче и понятнее, а сопровождение их упрощается.

    Массивы в программах C++ могут быть не только линейными. Довольно частым является использование двух - (и более) -мерных структур. К примеру, прямоугольная матрица – типичная структура, представимая с помощью двумерного массива; а 3D-тензор может быть записан как соответствующий трехмерный массив. Многомерный массив в C++ организован по принципу «массива массивов». Общий формат его объявления тип имя[N1][N2]…[NM];



    Здесь M – число индексов (или размерность) массива. Индексы изменяются в пределах от 0 до N1 – 1, от 0 до N2 – 1, от 0 до N3 – 1, ..., от 0 до NM – 1, соответственно. К примеру, запись int G[5][4]; означает объявление двумерного массива целых чисел с именем G и размерами 54. На рис. справа такой массив представлен в виде таблицы. Здесь первый индекс является номером строки, второй – номером столбца таблицы, с диапазонами изменения от 0 до 4, и от 0 до 3, соответственно. Доступ к элементам многомерного массива в программе производится так же, как и в одномерном случае, то есть путем указания имени массива и набора индексов в квадратных скобках. Например, операция присваивания значения 0 последнему элементу будет записана как G[4][3] = 0. При работе с многомерными массивами удобно использовать вложенные циклы for. С их помощью можно выполнить заданное действие с каждым из элементов массива путем перебора всех значений индексов. Приведенный ниже фрагмент программного кода выводит на экран все элементы массива G.

    for(int i=0; i<5; i++) // цикл по строкам i

    {

    for(int j=0; j<4; j++) // цикл по строкам j

    cout << G[i][j] << “\t”; // выводим G[i][j]

    cout << endl; // перевод на новую строку

    }




    Здесь внешний цикл по I последовательно пробегает все значения от 0 до 5. При каждом i запускается внутренний цикл по j от 0 до 4. В теле этого цикла на экран выводятся значение элемента G[i][j] и знак табуляции (горизонтальный отступ). Внутренний цикл продолжается до тех пор, пока не будут перебраны все значения j, то есть не будет выведена вся i-я строка. По завершении внутреннего цикла, экранный курсор перемещается на новую строку манипулятором endl, и далее внешний цикл продолжает свою работу, последовательно выводя на экран другие строки массива.

    Например: имеется вещественная квадратная матрица размером 44. Напишите программу, вычисляющую произведение элементов в каждой ее строке. Матрица вводится с клавиатуры.

    Решение. Условимся использовать для хранения матрицы массив float X[4][4]. Расчет произведения реализуем согласно следующему алгоритму. Введем вспомогательную переменную (к примеру, float P). Заметим, что в i-й строке расположены элементы X[i][j], где j меняется от 0 до 3, включительно. Организуем цикл по j, внутри которого будем домножать P на X[i][j]. Тогда на выходе из цикла P будет содержать искомое произведение. Выведем его на экран и продолжим расчеты для следующей строки. Для правильной работы алгоритма перед началом расчетов в каждой строке матрицы необходимо присвоить P значение 1.

    #pragma hdrstop

    #include

    #include

    #pragma argsused

    int main(int argc, char* argv[])

    {

    float X[4][4]; // объявляем массив 44

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

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

    {

    cout << "input X[" << i <<

    "," << j << "] = ";

    cin >> X[i][j]; // вводим элементы матрицы

    }
    cout << "\n Results:\n";

    for(int i=0; i<4; i++) // цикл по строкам

    {

    float P = 1.0; // вспомогательная переменная

    for(int j=0; j<4; j++) // цикл по элементам в строке

    P = P * X[i][j]; // домножаем P на X[i][j]

    cout << "\n proizvedenie " << i

    << "-i stroki = " << P; // выводим результат на экран

    }

    getch();

    return 0;

    }

    Научилась набирать и откомпилировть код этой программы в Turbo C++.
    Цель: Организовать обработку массивов с использованием функций, научиться передавать массивы как параметры функций.
    Задача: Используя функции, решить указанную задачу. Массив должен передаваться в функцию как параметр: Написать функцию для вычисления суммы элементов квадратной матрицы, которые расположены ниже главной диагонали. С ее помощью найти максимальное значение такой суммы в n матрицах.
    Текст программы:

    #include

    #include

    #include

    #include

    #define SIZE 5

    static int a[SIZE][SIZE];

    void CreateArray(int a[SIZE][SIZE]){

    int i,j;

    for(i=0;i
    for(j=0;j
    a[i][j]=rand()%100;}}}

    void PrintArray(int a[SIZE][SIZE]){

    int i,j;

    for(i=0;i
    for(j=0;j
    printf("%d ",a[i][j]);}

    printf("\n");}}

    int MatrixSum1(int m[SIZE][SIZE]){

    int i,j,s=0;

    for(i=1;i
    for(j=0;j
    s+=m[i][j];}}

    return s;}

    int main(int argc, char *argv[]){

    int s=0,i,t,N;

    N=atoi(argv[1]); //количество матриц N вводится в параметре командной строки

    srand(time(NULL));

    for(i=1;i<=N;i++){

    CreateArray(a);

    PrintArray(a);

    t=MatrixSum1(a);

    printf("\nSumm:%d\n ",t);

    if(t>s){s=t;}}

    printf("\nMaximum %d\n",s);

    system("PAUSE");

    return EXIT_SUCCESS;}
    Результат выполнения программы (N=3):
    0 72 91 65 7

    59 23 13 17 77

    55 16 74 40 85

    18 56 19 89 63

    20 87 49 89 35
    Summ:468

    30 92 77 90 68

    40 72 79 7 91

    16 46 34 78 0

    9 7 57 33 60

    5 31 2 71 84

    Summ:284
    47 22 56 36 57

    19 27 1 5 75

    25 67 52 35 73

    90 0 34 9 78

    99 27 48 33 59

    Summ:442

    Maximum 468

    Результат программы до работы



    Результат программы после работы



    Задача2: ввод символьных массивов. Ввести строку (массив), состоящую не более чем из 80 символов. Воспользоваться двумя способами ввода и вывода информации .


    #include
    #include
    #include
    // Ввод строки с клавиатуры
    main()
    {
    char str[80]; /* Место для строки */
    char str0[80];
    // Очистить экран
    textbackground(5);
    textcolor(15);
    clrscr();
    CharToOem("Введите строку длиной не более 80 символов \n", str0);
    printf(str0);
    gets(str); /* Читает строку с клавиатуры */
    CharToOem("Вы ввели строку: %s \n", str0);
    printf(str0, str);
    CharToOem("Введите еще одну строку длиной не более 80 символов \n", str0);
    printf(str0);
    scanf("%s", str); /* Читает строку с клавиатуры пока не встретится пробел */
    CharToOem("Вы ввели строку \n", str0);
    printf(str0);
    puts(str);
    getch();
    }


        Вы видите, что вначале оператором gets(str) введена строка: "Краснодар - город ярких цветов и красивых девушек" до нажатия клавиши Enter. Чуть ниже она выдана на экран оператором printf():
    CharToOem("Вы ввели строку: %s \n", str0);
    printf(str0, str);
        Далее программа ввела еще одну строку: "Краснодарский край". Для этого был использован оператор scanf():
    scanf("%s", str); /* Читает строку с клавиатуры пока не встретится пробел */
        Но в последнем случае строка ввелась до первого пробела, то есть слово "Краснодарский" благополучно вошло в комапьтер. Однако, выполнился ввод только одного слова, так как между словами был пробел.
    Дополнительно практиковалась и решала задачу с четными и нечетными числами

    # include /*библиотека ввода,вывода*/

    #include

    #include
    int s,i,m,buf,k,j; /*описание переменных*/

    const int n=5; /*объявление целочисленной константы с именем n и значением 5*/

    typedef int TArray[17];
    void outspisok (TArray x)

    {

    for (int i=1; i<17; i++)

    {

    printf("%d",x[i]); /*вывод данных-вызов функции*/ d –десятичное число

    }

    }
    void main()

    {

    randomize();

    clrscr();

    TArray S;

    TArray N;

    TArray M;
    for (i=1;i<=n;i++) // цикл по строкам i

    {

    M[i]=random(10);

    printf("%d\n",M[i]);

    }
    s=1;

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

    {

    N[i]=s;

    s=s*2;

    }
    for (j=1;j<=n;j++) // цикл по строкам j

    {

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

    {

    S[i]=M[j]%2;

    M[j]=M[j]/2;

    }

    outspisok (S);

    if (S[1]==1) printf(" nechetnoe");
    buf=S[1];

    S[1]=S[17];

    S[17]=buf;
    k=0;

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

    {

    k=k+S[i]*N[i];

    }
    // if (S[1]==0) printf("nechetnoe %d");

    //else printf("chetnoe %d");
    printf("\n");

    outspisok (S);

    if (S[1]==0) printf(" chetnoe");

    printf("\n");

    printf("%d\n",k);
    }

    getch();

    }


    Результат программы после работы


    Заключение

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

    Литература



    1. Шилдт, Герберт. Полный справочник по С, 4-е издание. : Пер. с англ. - М,: Издательский дом "Вильямс", 2002. - 704 с. : ил. - Парал.т ит. англ.

    2. Павловская Т.А. С/C++. Программирование на языке высокого уровня. / Т.А. Павловская. - СПб.: Питер, 2002. - 464 с.: ил.

    3. Культин Н.Б. C/C++ в задачах и примерах. - СПб.:БХВ-Петербург, 2001. - 288 с.: ил.

    4. Березин Б.И., Березин С.Б. Начальный курс С и С++. - М,: ДИАЛОГ_МИФИ, 1996. - 288 с.

    5. Дэвис Стефан Р. С++ для "чайников", 4-е издание.: Перев. с англ.: Уч. пос. - М.: Издательский дом "Вильямс", 2001. - 336 с.: ил.

    6. Джонс Р., Стюарт Я. Программируем на Си/Пер. с англ. и предисл. М.Л. Сальникова, Ю.В. Сальниковой. - М.: Компьютер, ЮНИТИ, 1994. - 236 с.: ил.


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