ФЕДЕРАЛЬНОЕ АГЕНСТВО ПО ОБРАЗОВАНИЮ ГОСУДАРСТВЕННОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ "УЛЬЯНОВСКИЙ ГОСУДАРСТВЕННЫЙ УНИВРСИТЕТ" Кафедра "Информационные системы и технологии" Лабораторная работа №5 Обработка одномерных массивов Выполнил студент гр.ИСТбд-11 Халилов Динар Проверил преподаватель Докторова Е.А. Ульяновск 2013 Задание: Из исходного массива символов, заполненного случайным образом символами с кодами в диапазоне от 21 до 254, выделить в отдельные массивы символы цифр и знаков препинания. Провести сортировку полученных массивов. Для контроля результата сделать распечатку массивов, в том числе исходного. Вариант №13 В программе я использовал 3 сортировки: - Метод прямого включения - Метод вставки - Метод пузырька Код программы: #include <stdio.h> #include <stdlib.h> #include <locale.h> #include <time.h> #include <conio.h> #define N 20 #define M 30 void Randomize() { srand(time(0)); } int Random(int range) { return (rand() % range); } void Title() { printf("Laboratornaya rabota #5 variant #2. KHALILOV D.D ISTbd-11 \n"); printf("Zapolnenie 2-x odnomernux massivov bukvami latinskogo alfavita \n"); printf("v sluchainom poradke. \n"); printf("Zapolnit 3'i massiva simvolami iz pervux dvux.\n\n"); } void New_Item(int *p, int n, int range1, int range2) { p[n] = Random(range2 - range1) + range1; } void Filling (int *p, int n, int range1, int range2) { int i; p[0]=Random (range2 - range1) + range1; for (i=1;i<n; i++) New_Item(p, i, range1, range2); } void Print(int *p, int n) { int i; for (i=0; i<n; i++) printf("%2c",p[i]); puts(""); } int Min(int *c, int n, int *index) { int i, min; min = c[0]; (*index) = 0; for (i=1; i<n; i++) if (c[i]<min) { min = c[i]; (*index) = i; } return min; } void Exchange (int *c, int n, int k) { int tmp; tmp = c[n]; c[n] = c[k]; c[k] = tmp; } void SearchSort (int *c, int n) { int i, min, indexMin; int *p; for (i=0; i<n-1; i++) {p = (c+i); min = Min(p, n-i, &indexMin); Exchange (p, 0, indexMin); } } int * Copy (int *c, int n) { int *m, i; m = (int*)malloc(sizeof(int)*n); for ( i = 0; i<n; i++ ) m[i] = c[i]; return m; } void IncludeSort(int *c, int n) { int i, j, x; int *p; p = (c - 1); for (i=1; i<n; i++) { if (p[i-1]>p[i]) { x=p[i]; j=i-1; while ((j>0) && (p[j] > x)) { p[j+1] = p[j]; j--; } p[j+1]= x; } } } void BubbleSort(int *c,int n) { int i, j; for(i = 0; i <= n - 2; i++) for(j = n-1; j >=i+1; j--) if (c[j] < c[j - 1]) Exchange(c, j, j - 1); } int main() { int p[N]; int k[M]; int *p1, *p2, *p3; int *k1, *k2, *k3; int i, j, x,range; Title(); Randomize(); printf("Zapolnenie massiva #1\n"); Filling(p,N,65,90); printf("Zapolnenie massiva #2\n"); Filling(k,M,65,90); printf("Raspechatka massiva #1\n"); Print (p,N); printf("Raspechatka massiva #2\n"); Print (k,M); printf("Sozdanie dublicata #1-go massiva\n"); p1 = Copy(p,N); printf("Sozdanie dublicata #2-go massiva\n"); k1 = Copy(k,M); printf("Sortirovka metodom pryamogo poiska pervogo massiva\n"); SearchSort(p1,N); printf("Raspechatka pervogo massiva, otsortirovannogo metodom pryamogo poiska\n"); Print(p1,N); printf("\n"); printf("Sortirovka metodom pryamogo poiska vtorogo massiva\n"); SearchSort(k1,M); printf("Raspechatka vtorogo massiva, otsortirovannogo metodom pryamogo poiska\n"); Print(k1,M); printf("Sozdanie dublicata #1-go massiva\n"); p2 = Copy(p,N); printf("Sozdanie dublicata #2-go massiva\n"); k2 = Copy(k,M); printf("Sortirovka metodom pryamogo vkluchenia pervogo massiva\n"); IncludeSort(p2,N); printf("Raspechatka pervogo massiva, otsortirovannogo metodom pryamogo vkluchenia\n"); Print(p2,N); printf("\n"); printf("Sortirovka metodom pryamogo vkluchenia vtorogo massiva\n"); IncludeSort(k2,M); printf("Raspechatka vtorogo massiva, otsortirovannogo metodom pryamogo vkluchenia\n"); Print(k2,M); printf("Sozdanie dublicata #1-go massiva\n"); p3 = Copy(p,N); printf("Sozdanie dublicata #2-go massiva\n"); k3 = Copy(k,M); printf("Sortirovka puzerkovum metodom pervogo massiva\n"); BubbleSort(p3,N); printf("Raspechatka pervogo massiva, otsortirovannogo puzerkovum metodom\n"); Print(p3,N); printf("\n"); printf("Sortirovka metodom pryamogo vkluchenia vtorogo massiva\n"); BubbleSort(k3,M); printf("Raspechatka vtorogo massiva, otsortirovannogo puzerkovum metodom\n"); Print(k3,M); getch(); } Вывод программы: Использованная литература: МЕТОДИЧЕСКИЕ УКАЗАНИЯ, ЗАДАНИЯ И ПРИМЕРЫ ВЫПОЛНЕНИЯ ЛАБОРАТОРНЫХ РАБОТ № 1 - 8 ДЛЯ СТУДЕНТОВ НАПРАВЛЕНИЯ 23040062 "Информационные системы и технологии"
1/--страниц