Студопедия

КАТЕГОРИИ:

АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

Темы для предварительной проработки




  • Операторы цикла языка C.
  • Условный оператор языка C.
  • Массивы в языке C.
  • Сортировка массивов.

Задание

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

Пример программы

Здание.

Выполнить 4 метода сортировки массива: пузырьковая, выборочная, быстрая, методом Шелла. Сравнить результаты.

Текст программы.

#include <stdio.h>

#include <iostream.h>

#include <stdlib.h>

 

void Print_mas(int[], int);

void Puzir_sort(int[], int);

void Vibor_sort(int[], int);

void Quick_sort(int[], int, int);

void Shell_sort(int[], int);

 

 

void Print_mas(int array[], int length)

{

for (int i=0; i<=length-1; i++)

printf("%5i",array[i]);

printf("\n");

 

}

 

 

int main(void) {

int i; /* индекс в массиве */

const n=10;

int Ar[n]; /* массив, который обрабатывается */

int firs_value=-10;

int last_value=10*2;

 

 /* Заполнение элементов массива с помощью генератора случайных чисел*/

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

  Ar[i]=firs_value + rand() % last_value;

 

/* вывод начального массива */

printf("Nachalnij mas:\n");

Print_mas(Ar, n);

 

Puzir_sort(Ar, n);

 

/* вывод отсортированного массива */

printf("Puzir sorted mas:\n");

Print_mas(Ar, n);

 

Vibor_sort(Ar, n);

/* вывод отсортированного массива */

printf("Vibor sorted mas:\n");

Print_mas(Ar, n);

 

 

Quick_sort(Ar, 0, n-1);

/* вывод отсортированного массива */

printf("Vibor sorted mas:\n");

Print_mas(Ar, n);

 

Shell_sort(Ar, n);

/* вывод отсортированного массива */

printf("Vibor sorted mas:\n");

Print_mas(Ar, n);

 

return 0;

}

 

 

void Puzir_sort(int mas[], int size)

{ int i, j, temp;  

for (i=0; i<size; i++)

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

  if (mas[i]>mas[j])

    {temp=mas[i];

   mas[i]=mas[j];

              mas[j]=temp;}

}

 

 

void Vibor_sort(int m[], int len)

{ int i, temp, start, min, pos_min;

start=0;

while(start!=len-1)

{ min=m[start];

pos_min=start;

for (i=start; i<len; i++)

  if (m[i]<min)

    { min=m[i];

      pos_min=i;}

if (pos_min!=start)

     {temp=m[start];

   m[start]=m[pos_min];

              m[pos_min]=temp;}

     start++;}

}

 

 

void Quick_sort(int Mas[], int Low, int High )

{ int i,j,p,temp;

i=Low;

j=High;

p=Mas[(Low+High)/2];

do{

    while(Mas[i]<p) i++;

while(Mas[j]>p) j--;

    if(i<=j)

    { temp=Mas[i];

    Mas[i]=Mas[j];

               Mas[j]=temp;

    i++;

    j--;}

} while(i<=j);

if (j>Low) Quick_sort(Mas, Low, j);

if (i<High) Quick_sort(Mas, i, High);

}

 

 

void Shell_sort(int M[], int N)

{ int temp, middle, i, change;

middle=N/2;

do

{

    do

    { change=0;

   for (i=0; i<N-middle; i++)

      if (M[i]>M[i+middle])

              { temp=M[i];

         M[i]=M[i+middle];

              M[i+middle]=temp;

         change=1;}

}while (change);

middle=middle/2;

}while (middle!=1);

}

 

 

Варианты индивидуальных заданий

№ варианта Тип элементов массива Тип сортировки Способ инициализа-ции Задание
1 веществен-ные числа все в тексте программы Подсчитать количество перестановок для каждого типа сортировки
2 целые числа пузырьковая генератор случайных чисел Отсортировать элементы, расположенные между максимальным и минимальным по убыванию
3 символы быстрая с клавиатуры Отсортировать латинские буквы по алфавиту
4 целые числа метод Шелла генератор случайных чисел Отсортировать первую половину массива по возрастанию, а вторую-по убыванию
5 символы выборочная строковый литерал Найти 3 символа с наименьшими кодами
6 веществен-ные числа пузырьковая с клавиатуры Найти 4 наибольших числа
7 целые числа быстрая в тексте программы Отсортировать элементы, расположенные между позициями, заданными пользователем
8 символы выборочная с клавиатуры Отсортировать латинские буквы по алфавиту в обратном порядке
9 целые числа пузырьковая в тексте программы Преобразовать функцию, чтобы она сортировала в зависимости от 3-го параметра (0-по убыванию, 1-по возрастанию)
10 веществен-ные числа метод Шелла в тексте программы Отсортировать все положительные числа
11 символы быстрая строковый литерал Отсортировать все цифры, остальные символы не менять.
12 целые числа пузырьковая генератор случайных чисел Отсортировать все элементы слева от заданного – по убыванию, а справа- по возрастанию
13 целые числа выборочная с клавиатуры Отсортировать все четные элементы по убыванию
14 вещественные числа метод Шелла с клавиатуры Отсортировать элементы с четными индексами по возрастанию, а с нечетными- по убыванию
15 символы быстрая генератор случайных чисел Подсчитать количество перестановок символов
15 целые числа выборочная в тексте программы Найти 2 наибольших и 2 наименьших числа
16 символы метод Шелла строковый литерал Отсортировать элементы, расположенные между позициями, заданными пользователем
17 целые числа пузырьковая с клавиатуры Отсортировать все элементы слева от заданного – по возрастанию, а справа- по  убыванию
18 вещественные числа быстрая в тексте программы Подсчитать количество операций сравнения при сортировке
19 символы выборочная с клавиатуры Найти 3 символа с наибольшими кодами
20 целые числа метод Шелла генератор случайных чисел Преобразовать функцию, чтобы она сортировала в зависимости от 3-го параметра (0-по убыванию, 1-по возрастанию)

 


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

Использование указателей

Цель работы

Целью лабораторной работы является получение практических навыков в работе с указателями и с адресной арифметикой в языке C.

Теми для предварительной проработки

  • Указатели. Типизированные указатели.
  • Указатели и массивы.
  • Адресная арифметика.

Задания для выполнения

Выполнить задание лабораторной работы №9 (работа со строками) с таким дополнительным условиями: в тексте программы запрещается применять операцию индексации.

Пример программы

 

№ варианта Задание
21 Функция выделяет из заданной строки подстроку заданной длины, начиная с заданной позиции.

 

 

#include <stdio.h>

#include <iostream.h>

 

int substr(char *, char *, int, int); //функция выделения подстроки

 

 

int main(void) {

 char str1[100], str2[100]; //исходная строка и строка-результат

 int p,l,r;

/* Ввод исходных данных */

 printf("Input string\n");

 scanf("%s", str1);

 printf("Input position\n");

 cin>>p;  //позиция символа, с которой копировать

 printf("Input length\n");

 cin>>l;  //количество копируемых символов

 r=substr(str1,str2,p,l);  //вызов функции r=0 – успешное выполнение,

                                                             //r=1 – ошибка

 if(r==0)

 { cout<<"Result string"<<endl;

cout<<str2<<endl;}

else cout<<"Data error"<<endl;

 return 0;

}

 

int substr(char *s1, char *s2, int pos, int len)

{ int l1=0, l2=0, i=0;

char *c;

c=s1;

do {

 c++;

i++;

}while (*c!='\0');

l1=i-1;

l2=len;

if ((pos+len>l1)||(pos<0)||(len<=0))

{ return 1;}

else

{ c=s1;

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

        c++;

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

  { *s2=*c;

         s2++;

        c++; }

   *s2='\0';

return 0;}

}


 


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

Использование структур

Цель работы

Целью лабораторной работы является получение практических навыков в работе с интегрированными типами данных - структурами и массивами структур языка C.

Темы для предварительной проработки

  • Типы данных языка C.
  • Массивы.
  • Структуры.

Задания для выполнения

Составить программу, в которой будут вводиться 7 - 10 строк таблицы, образец которой приведен в Вашем варианте индивидуального задания к лабораторной работе №2 и выводится на экран таблица - сразу же после ввода и после сортировки ее по значениям в первом столбце. Примечания к таблице, которые есть в работе №2, можно не выводить.

Пример программы (вариант №30)










Последнее изменение этой страницы: 2018-05-10; просмотров: 179.

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