Курсовая. КУРСОВАЯ. Изучение предметной области 2 1 Понятие и структура алгоритмов 2
Скачать 5.45 Mb.
|
СодержаниеВведение 1 Глава 1. Изучение предметной области 2 1.1 Понятие и структура алгоритмов 2 1.2 Понятие и виды блок-схем 6 Глава 2. Практическая часть 9 2.1 Составление блок-схемы и программы обработки одномерного массива 9 Словесное описание алгоритма: 9 Описание и схема пользовательского интерфейса: 11 2.2 Составление блок-схемы и программы обработки матрицы. 16 Заключение 25 Список использованной литературы 26 ВведениеЯзык программирования СИ - это универсальный язык с богатым набором операторов и компактным способом записи выражений. Язык C обеспечивает разнообразие типов данных. Базовыми типами являются целые, вещественные числа и символы (литеры). Язык разрешает модификацию базовых типов данных, а также создание пользовательских типов. В языке используются стандартные типы данных int, char, float, double; применяются массивы, структуры (записи), файлы; имеется возможность конструирования очередей, списков. Цель. Закрепить навыки разработки и программирования на языке Си алгоритмов обработки сложных структур данных: одномерных массивов и матриц. Приобрести навыки программирования с переменными типами указателя. Задачи: подробное описание решения алгоритма в форме словесного описания; составление блок-схемы алгоритма; написание кода программы, на языке Си. Глава 1. Изучение предметной области1.1 Понятие и структура алгоритмовАлгоритм - набор инструкций, описывающих порядок действий исполнителя для достижения результата решения задач за конечное число действий. Существует 3 вида алгоритмов: линейный разветвляющийся -циклический Структура данных - программная единица, позволяющая хранить, обрабатывать множество однотипных логически связанных данных в вычислительной технике. Структурированные ( интегрированные, композитные, сложные) - такие структуры данных, составными частями которых есть другие структуры данных По изменчивости структуры данных бывают: статические, полустатические и динамические. Изменчивость, то есть изменение числа элементов или связей между элементами структуры. Статические - к этой группе относят массивы, множества, записи, таблицы Полустатические - это стеки, очереди, деки, дерева Динамические - линейные и разветвленные связные списки, графы, дерева. Массив представляет собой матрицу из нескольких переменных одного и того же типа. Можно говорить о массивах целых чисел, массивов символов и.т.д. Мы можем даже определить массив, элементы которого - массивы (массив массивов), определяя, таким образом, многомерные массивы. Любой массив в программе должен быть описан: после имени массива добавляют квадратные скобки [], внутри которых обычно стоит число, показывающее количество элементов массива. Например, запись int x[10]; определяет x как массив из 10 целых чисел. В случае многомерных массивов показывают столько пар скобок, какова размерность массива, а число внутри скобок показывает размер массива по данному измерению. Например, описание двумерного массива выглядит так: int a[2][5]. Такое описание можно трактовать как матрицу из 2 строк и 5 столбцов. Для обрщения к некоторому элементу массива указывают его имя и индекс, заключенный в квадратные скобки (для многомерного массива - несколько индексов , заключенные в отдельные квадратные скобки): a[1][3], x[i] a[0][k+2]. Индексы массива в Си всегда начинаются с 0, а не с 1, т.е. описание int x[5]; порождает элементы x[0], x[1], x[2], x[3], x[4], x[5]. В общем случае объявление массива имеет следующий синтаксис: тип_данных имя_переменной[<количество_элементов>] = <список, элементов, массива> int arr[100]; int a[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; char ch[] = {'R','u','b','y','D','e','v','.','r','u'}; Динамическим называется массив, размер которого может меняться во время исполнения программы. Гетерогенным называется массив, в разные элементы которого могут быть непосредственно записаны значения, относящиеся к различным типам данных. Указатель - это переменная, значением которой является адрес некоторого объекта (обычно другой переменной) в памяти компьютера. Подобно тому, как переменная типа char имеет в качестве значения символ, а переменная типа int - целочисленное значение, переменная типа указателя имеет в качестве значения адрес ячейки оперативной памяти. Допустимые значения для переменной-указателя - множество адресов оперативной памяти компьютера. Указатель является одной из наиболее важных концепций языка C. · указатели являются средством, при помощи которого функции могут изменять значения передаваемых в нее аргументов; · при помощи указателей выполняется динамическое распределение памяти; · указатели позволяют повысить эффективность программирования; · указатели обеспечивают поддержку динамических структур данных (двоичные деревья, связные списки). Так как указатель может ссылаться на переменные разных типов, с указателем в языке Си связывается тип того объекта, на который он ссылается. Для описания указателей используется операция косвенной адресации *. Общая форма объявления указателя: тип *имя; Например: int *p1; char *ch2; float *fl1; Понятие указателя тесно связано с понятием адреса объекта. В C есть специальная операция, позволяющая получить адрес любой переменной: &p - получение адреса, где p - идентификатор переменной. Результатом операции является адрес переменной p. Над указателями определено 5 основных операций: определение адреса указателя: &p, где p - указатель (&p - адрес ячейки, в которой находится указатель). присваивание. Указателю можно присвоить адрес переменной p=&q, где p - указатель, q - идентификатор переменной. определение значения, на которое ссылается указатель: *p (операция косвенной адресации). увеличение (уменьшение) указателя. Увеличение выполняется как с помощью операции сложения (+), так и с помощью операции инкремента (++). уменьшение - с помощью операции вычитания (-) либо декремента (--). Например, пусть p1 - указатель, тогда р1++ перемещает указатель на: a) 1 байт, если *p1 имеет тип char; b) 4 байта, если *p1 имеет тип int (в 32 разрядной операционной системе) или 2 байта (в 16 разрядной операционной системе); c) 4 байта, если *p1 имеет тип float. . Разность двух указателей. Пусть р1 и р2 - указатели одного и того же типа. Можно определить разность р1 и р2, чтобы найти, на каком расстоянии друг от друга находятся элементы массива. 1.2 Понятие и виды блок-схемБлок-схема - распространенный тип схем (графических моделей), описывающих алгоритмы или процессы, в которых отдельные шаги изображаются в виде блоков различной формы, соединенных между собой линиями, указывающими направление последовательности.
Таблица 1. Виды Блок-схем Глава 2. Практическая часть2.1 Составление блок-схемы и программы обработки одномерного массиваСоставить блок схему и программу обработки одномерного массива. Элементы массива заполнить, используя функцию генератора случайных чисел. Программу написать двумя способами: осуществляя доступ к элементам массива с помощью индексов; осуществляя доступ к элементам массива с помощью указателей. Словесное описание алгоритма:1. Начало алгоритма. 2. Задать размерность массива, то есть константе N присвоить заданное значение. Заполнить массив A[N] случайными числами. 4. Вывести элементы массива A[N]. 5. Обнулить переменные S и r. 6. Организовать цикл с заданными параметрами от i=1; N; 1. Внутри цикла: Проверить: если а[i]%2=0, то суммируем нечётные элементы массива, т.е. S=S+а[i], и число нечётных элементов увеличить на 1, т.е. r=r+1, иначе перейти к следующему шагу цикла. . Находим целую часть среднего арифметического значения нечётных элементов массива A[N], т.е. k: k=abs(S/r). . Организовать цикл с заданными параметрами от i=1; k; 1. Внутри цикла: a. Запомнить последний элемент f=a[N-1].. Организовать цикл с заданными параметрами от j=N; 1; -1. Внутри цикла: последующему элементу присвоить предыдущий, т.е. a[j]=a[j-1]. c. По окончании цикла по j первому элементу присвоить значение последнего, т.е. a[1]=a[N-1] и перейти к следующему циклу по i. . Вывести элементы массива a[i]. . Конец алгоритма. Рис.1. Блок-схема обработки одномерного массива Описание и схема пользовательского интерфейса:При запуске данной программы должно появиться главное меню программы. Она будет состоять из названия данной работы. Ras4etno-grafi4eska9 rabota #2 zadanie A Далее необходимо ввести размерность массива, после ввода данных должен выходиться сгенерированный массив, и должны выходить элементы массива уже с циклическим сдвигом и должно выходит предложение о завершении программы или предложение вычислить заново. Razmernost' massiva A[N]N= massiv elementov massiva a[n] na k poziciy celaya chast srednego arifmeti4eskogo ne4etnyh 4isel' zanovo? (esli da t=1,esli net t=0) В случае выбора значение 1, программа должна продолжать работу и переходить к пункту 2. Если вы выбираете значение 0, программа завершит работу и перейдёт к пункту 4. В случае завершения работы, программа выведет посередине наименование студента, выполнившего данную работу, и его группы. Чуть ниже, с правой стороны, программа выведет наименование преподавателя проверившего работу. **************************************** ==Vipolnil Nechayev Nikita Igorevi4== =======Student gryppi BIS-12-2======= **************************************** *************************************** ==Proveril k.t.n. docent== ==_______________Ni A.G.== ==""__""____________201_3== *************************************** На следующей строчке будет надпись: Dl9 zaverweni9 nagmite klaviwu
Программное описание алгоритма с индексами: #include #include #include #include #include {k,N,S,r,i,t,f,j;a[N];b;("\t\t Ras4etno-grafi4eska9 rabota #2 zadanie A");("\t\t ===========================================");("Razmernost' massiva A[N]");:printf("\n Vvedite N\nN=");("%d",&N);=0;=0;(i=0;i {[i]=rand()%10-5; }("\n Sgenerirovanniy massiv\n");(i=0;i {=a[i]%2;(b!=0) {=r+1;=S+a[i]; } }=abs(S/r);(i=0;i { f=a[N-1]; for(j=N-1;j>0;j--) a[j]=a[j-1]; a[0]=f; } printf("\n \n sdvig elementov massiva a[n] na %d poziciy \n",k);(i=0;i printf("%4d",a[i]);("\n k-celaya chast srednego arifmeti4eskogo ne4etnyh 4isel");("\n Vichislit' zanovo?\n (esli da t=1,esli net t=0)\nt="); scanf ("%d",&t); if (t>0) {printf("");goto m1;} if (t<1)("\t\t ===========================================");(" ****************************************");(" ==Vipolnil Nechayev Nikita Igorevi4=="); puts(" =======Student gryppi BIS-12-2======="); puts(" ****************************************"); puts(" ***************************************"); puts(" ==Proveril k.t.n. docent=="); puts(" ==_______________Ni A.G.=="); puts(" ==""__""____________2013==");(" ***************************************"); printf(" Dl9 zaverweni9 nagmite klaviwu } С указателями: #include #include #include #include #include {k,N,S,r,i,t,f,j,*pa,*pb,*p;a[N];b;("\t\t Ras4etno-grafi4eska9 rabota #2 zadanie A");("\t\t ===========================================");("Razmernost' massiva A[N]");:printf("\n Vvedite N\nN=");("%d",&N);=0;=0;=&a[0];(i=0;i { *pa=rand()%10-5; }=&a[0];("\n Sgenerirovanniy massiv\n");(i=0;i {=*pa%2; ++pa;(b!=0) {=r+1;=S+*pa; } }=abs(S/r);(i=0;i { pb=&a[9]; p=&a[0]; f=*pb; for(j=0;j *pb=*(--pb); *p=f; p=&a[0]; pb=&a[9]; } printf("\n \n sdvig elementov massiva a[n] na %d poziciy \n",k);(i=0;i pb=&a[0];("%4d",*pb++);("\n k-celaya chast srednego arifmeti4eskogo ne4etnyh 4isel");("\n Vichislit' zanovo?\n (esli da t=1,esli net t=0)\nt="); scanf ("%d",&t); if (t>0) {printf("");goto m1;} if (t<1)("\t\t ===========================================");(" ****************************************");(" ==Vipolnil Nechayev Nikita Igorevi4=="); puts(" =======Student gryppi BIS-12-2======="); puts(" ****************************************"); puts(" ***************************************"); puts(" ==Proveril k.t.n. docent=="); puts(" ==_______________Ni A.G.=="); puts(" ==""__""____________2013==");(" ***************************************"); printf(" Dl9 zaverweni9 nagmite klaviwu return 0; Рис. 2. Результат выполнения программы. 2.2 Составление блок-схемы и программы обработки матрицы.Элементы матрицы необходимо заполнить, используя функцию генератора случайных чисел. Программу нужно написать двумя способами: осуществляя доступ к элементам массива с помощью индексов; осуществляя доступ к элементам массива с помощью указателей. Дана целочисленная квадратная матрица. Определить: Сумму элементов в тех строках, которые не содержат отрицательных элементов. Минимум среди сумм элементов диагоналей, параллельных главной диагонали матрицы. Словесное описание алгоритма: 1. Начало алгоритма. 2. Задать размерность матрицы. 3. Заполнить массив a[n][m] случайными числами. 4. Вывести элементы массива a[n][m]. 5. Организовать цикл с заданными параметрами от i=1; m; 1. Внутри цикла по i: 5.1. Обнулить сумму sum=0. 5.2. Организовать цикл с заданными параметрами от j=1; n; 1. Внутри цикла по j: 5.2.1. Проверить: если a[i][j]>=0, то суммировать элементы строки, иначе перейти к следующему шагу цикла. 5.3. По окончании цикла проверить: если j=n, то вывести сумму элементов в тех строках, которые не содержат отрицательных элементов. 5.4. Перейти к следующему шагу цикла по i. 6. Минимум сумм диагоналей находим: min=a[0][n-1]. 7. Организовать цикл с заданными параметрами от i=1; m; 1. Внутри цикла по i: 7.1. Сумма элементов диагоналей, параллельных главной диагонали матрицы с левой стороны равно сумме элементов диагоналей, параллельных главной диагонали матрицы с правой стороны и равно 0, т.е. t1=t2=0. 7.2. Организовать цикл с заданными параметрами от j=0; n; 1. Внутри цикла по j: 7.2.1. Суммировать элементы диагоналей, параллельных главной диагонали матрицы с левой стороны. 7.2.2. Суммировать элементы диагоналей, параллельных главной диагонали матрицы с правой стороны. 7.3. По окончании цикла по j проверить: если t1 7.3.1. Перейти к следующему шагу цикла по i. 8. Вывести минимум среди сумм элементов диагоналей, параллельных главной диагонали матрицы. 9. Конец алгоритма. Рис.3. Блок-схема обработки одномерного массива Описание и схема пользовательского интерфейса: 1. При запуске данной программы появится главное меню программы. Она будут состоять из названия данной работы. Ras4etno-grafi4eska9 rabota #2 zadanie B 2. Далее будет выходить сгенерированная матрица, выходят суммы элементов разных строк матрицы, которые не содержат отрицательных элементов, будет выходить минимум среди сумм элементов диагоналей, параллельных главной диагонали матрицы, и будет выходить предложение о завершении программы или предложение вычислить заново. Sgenerirovanna9 matrica Rezul'tat pervoy 4asti zadani9elementov stroki Rezul'tat vtoroy 4asti zadani9Summ Vichislit' zanovo? (esli da t=1,esli net t=0) 3. В случае выбора значение 1, программа продолжит работу и перейдёт к пункту 2. Если вы выберете значение 0, программа завершит работу и перейдёт к пункту 4. 4. В случае завершения работы, программа выведет с левой стороны наименование группы и студента, выполнившего данную работу. С правой стороны программа выведет наименование преподавателя, проверившего работу. ======================================== **************************************** ==Vipolnil Nechayev Nikita Igorevi4== =======Student gryppi BIS-12-2======= **************************************** *************************************** ==Proveril k.t.n. docent== ==_______________Ni A.G.== ==""__""____________2013== *************************************** 5. На следующей строчке будет надпись Dl9 zaverweni9 nagmite klaviwu
Программное описание алгоритма с индексами: #include #include #include #include #include #define m 8 #define n 8main() {i,j,t1,t2,sum,min,t;a[m][n];("\t\t Ras4etno-grafi4eska9 rabota #2 zadanie B");("\t\t ===========================================");:for(i=0; i {(j=0; j }("\n \t\t\t Rezul'tat pervoy 4asti zadani9");("\n\n");(i=0; i {=0;(j=0; j {(a[i][j]>=0)+=a[i][j];; }(j==n)("Summa elementov stroki #%d=%d\n",i+1,sum); }("\n \t\t\t Rezul'tat vtoroy 4asti zadani9");=a[0][n-1];(i=1; i {=t2=0;(j=0; j {+=a[i+j][j];+=a[j][i+j]; }(t1 min=t1;(t2 min=t2; }("\n Minimum Summ= %d",min);("\n Vichislit' zanovo?\n (esli da t=1,esli net t=0)\nt="); scanf ("%d",&t); if (t>0) {printf("");goto m1;} if (t<1)("\t\t ===========================================");(" ****************************************");(" ==Vipolnil Nechayev Nikita Igorevi4=="); puts(" =======Student gryppi BIS-12-2======="); puts(" ****************************************"); puts(" ***************************************"); puts(" ==Proveril k.t.n. docent=="); puts(" ==_______________Ni A.G.=="); puts(" ==""__""____________2013==");(" ***************************************"); printf(" Dl9 zaverweni9 nagmite klaviwu } С указателями: #include #include #include #include #include #define m 8 #define n 8main() {i,j,t1,t2,sum,min,t;a[m][n];*mat;("\t\t Ras4etno-grafi4eska9 rabota #2 zadanie B");("\t\t ===========================================");=&a[0][0];:for(i=0; i { *mat=rand()%10-1;++; }=n*m;("\n Sgenerirovanna9 matrica\n");(i=0; i {(j=0; j {("%4d",*mat);++; }("\n"); }("\n \t\t\t Rezul'tat pervoy 4asti zadani9");("\n\n");=&a[0][0];(i=0; i {=0;(j=0; j {(*mat>=0)+=*mat;; }(j==n)("Summa elementov stroki #%d=%d\n",i+1,sum); }("\n \t\t\t Rezul'tat vtoroy 4asti zadani9");=a[0][n-1];(i=1; i {=t2=0;(j=0; j {+=*(mat+i*m+j);+=*(mat+j*m+i); }(t1 min=t1;(t2 min=t2; }("\n Minimum Summ= %d",min);("\n Vichislit' zanovo?\n (esli da t=1,esli net t=0)\nt="); scanf ("%d",&t); if (t>0) {printf("");goto m1;} if (t<1)("\t\t ===========================================");(" ****************************************");(" ==Vipolnil Nechayev Nikita Igorevi4=="); puts(" =======Student gryppi BIS-12-2======="); puts(" ****************************************"); puts(" ***************************************"); puts(" ==Proveril k.t.n. docent=="); puts(" ==_______________Ni A.G.=="); puts(" ==""__""____________2013==");(" ***************************************"); printf(" Dl9 zaverweni9 nagmite klaviwu return 0; } Рис. 4 Результат выполнения программы Заключениемассив матрица алгоритм индекс В данной курсовой работе были закреплены навыки разработки и программирования на языке Си алгоритмов обработки сложных структур данных: одномерных массивов и матриц, представлены примеры алгоритмов обработки сложных структур данных на языке Си (одномерные и двумерные массивы). В ходе работы были выполнены следующие задачи: подробное описание решения алгаритма в форме словесного описания; составление блок-схемы алгоритма; написание кода программы, на языке Си. Также были представлены блок-схемы, словесное и графическое описание. Как мы видим, для языка Си характерны лаконичность, стандартный набор конструкций управления потоком выполнения и обширный набор операций. Это и делает его столь востребованным языком в наши дни. Список использованной литературыКуликов, А. И. Алгоритмические основы современной компьютерной графики : учебное пособие для СПО / А. И. Куликов, Т. Э. Овчинникова. — Саратов : Профобразование, 2021. — 230 c. — ISBN 978-5-4488-0989-7. — Текст : электронный // Электронный ресурс цифровой образовательной среды СПО PROFобразование : [сайт]. — URL: https://profspo.ru/books/102182 Зыков, С. В. Введение в теорию программирования. Объектно-ориентированный подход : учебное пособие для СПО / С. В. Зыков. — Саратов : Профобразование, 2021. — 187 c. — ISBN 978-5-4488-0995-8. — Текст : электронный // Электронный ресурс цифровой образовательной среды СПО PROFобразование : [сайт]. — URL: https://profspo.ru/books/102188 Молдованова, О. В. Информационные системы и базы данных : учебное пособие для СПО / О. В. Молдованова. — Саратов : Профобразование, 2021. — 177 c. — ISBN 978-5-4488-1177-7. — Текст : электронный // Электронный ресурс цифровой образовательной среды СПО PROFобразование : [сайт]. — URL: https://profspo.ru/books/106617 Моренкова, О. И. Программирование на языке С/С++ : практикум для СПО / О. И. Моренкова, Т. И. Парначева. — Саратов : Профобразование, 2021. — 102 c. — ISBN 978-5-4488-1192-0. — Текст : электронный // Электронный ресурс цифровой образовательной среды СПО PROFобразование : [сайт]. — URL: https://profspo.ru/books/106631 Непейвода, Н. Н. Стили и методы программирования : учебное пособие для СПО / Н. Н. Непейвода. — Саратов : Профобразование, 2021. — 295 c. — ISBN 978-5-4488-1011-4. — Текст : электронный // Электронный ресурс цифровой образовательной среды СПО PROFобразование : [сайт]. — URL: https://profspo.ru/books/102204 Кудрявцева, Л. Г. Информационные технологии : практикум / Л. Г. Кудрявцева, Р. В. Самолетов. — Саратов : Вузовское образование, 2020. — 80 c. — ISBN 978-5-4487-0729-2. — Текст : электронный // Электронный ресурс цифровой образовательной среды СПО PROFобразование : [сайт]. — URL: https://profspo.ru/books/97631 Стасышин, В. М. Разработка информационных систем и баз данных : учебное пособие для СПО / В. М. Стасышин. — Саратов : Профобразование, 2020. — 100 c. — ISBN 978-5-4488-0527-1. — Текст : электронный // Электронный ресурс цифровой образовательной среды СПО PROFобразование : [сайт]. — URL: https://profspo.ru/books/87389 Абрамов, Г. В. Проектирование и разработка информационных систем : учебное пособие для СПО / Г. В. Абрамов, И. Е. Медведкова, Л. А. Коробова. — Саратов : Профобразование, 2020. — 169 c. — ISBN 978-5-4488-0730-5. — Текст : электронный // Электронный ресурс цифровой образовательной среды СПО PROFобразование : [сайт]. — URL: https://profspo.ru/books/88888 |