программы (843411)

Файл №843411 программы (Программы по инфе для РК5)программы (843411)2021-06-30СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла

Пузырек и прямой выбор

#include

void massprint(int A[], int b);

void bubblesort(int mas[], int c);

void bubblesort_rekurs(int mas[], int c);

void selectsort(int mas[], int N);

void selectsort_rekurs(int mas[], int L);

int minindex(int A[], int b);

void swap(int *a, int*b);

#define N 10

int main()

{

int mass[N] = { 2,5,3,10,9,1,7,4,6,8 };

massprint(mass, N);

//bubblesort(mass, N);

//bubblesort_rekurs(mass, N);

//selectsort(mass, N);

selectsort_rekurs(mass, N);

massprint(mass, N);

getchar();

return 0;

}

void massprint(int mass[], int c) // вывод массива

{

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

{

printf("%-3d", mass[i]);

}

printf("\n");

}

void swap(int *a, int *b)

{

int temp = *a;

*a = *b;

*b = temp;

}

void bubblesort(int mas[], int c)

{

for (int j = 0; j < c - 1; j++)

{

int metka = 0;

for (int i = 0; i < c -j- 1; i++)// граница за счет фиксации максимального элемента

{

if (mas[i] > mas[i + 1])

{

swap(mas + i, mas + i + 1);

metka = 1;

}

}

if (metka=0)

{

break;

}

}

}

void bubblesort_rekurs(int mas[], int c)

{

unsigned int metka=0;

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

{

if (mas[i] > mas[i + 1])

{

swap(mas + i, mas + i + 1);

metka = 1;

}

}

if (metka==0)

вставками

#include

#define N 10

void massivprint(int A[], int L);

void insertsort(int B[], int r);

unsigned binarnysearch(int A[], unsigned a,int c);

int linearsearch(int A[], int a, int b);

unsigned binary_search_recursion(int A[], unsigned n, int value);

void rightshiftcycle(int A[], unsigned b, unsigned c);

void rightshift(int A[], unsigned b, unsigned c);

int main()

{

int massiv[N] = { 74,56,81,19,63,9,237,34,7,47 };

massivprint(massiv, N);

insertsort(massiv, N);

massivprint(massiv, N);

getchar();

return 0;

}

void massivprint(int mass[], int b)

{

for (unsigned i = 0; i < b; i++)

{

printf("%4d", mass[i]);

}

printf("\n");

}

void insertsort(int mass[], int size)

{

unsigned insertindex;

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

{

if (mass[i] < mass[i-1])

{

insertindex = linearsearch(mass , i , mass[i]);

//insertindex = binarnysearch(mass, i, mass[i]);

//insertindex = binary_search_recursion(mass, i, mass[i]);

rightshiftcycle(mass, insertindex, i);

}

}

}

int linearsearch(int mass[], int size, int value)

{

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

{

if (mass[i] >= value)

{

return i;

}

}

return size;

}

void rightshiftcycle(int mass[], unsigned left, unsigned right)

{

int d = mass[right];

rightshift(mass, left, right);

mass[left] = d;

}

void rightshift(int mass[], unsigned left, unsigned right)

{

for (unsigned i = right; i > left; i--)

{

mass[i] = mass[i - 1];

}

}

unsigned binarnysearch(int mass[], unsigned size, int value)

{

unsigned left = 0, right = size - 1, middle;

do

{

if (mass[left] > value)

return left;

middle = (left + right) / 2;

if (mass[middle] == value)

return middle;

else

if (mass[middle] > value)

right = middle;

else

left = middle;

} while ((right - left) > 1);

return right;

}

unsigned binary_search_recursion(int mass[], unsigned size, int value)

{

unsigned middle;

if (mass[0] > value)

{

return 0;

}

if (size <= 2) return 1;//частный случай - для короткого массива

middle = size / 2;

if (mass[middle] == value)

{

return middle;

}

else

if (mass[middle] > value)

{

return binary_search_recursion(mass, middle, value);

}

else

{

return middle + binary_search_recursion(mass + middle, size - middle, value);

}

}

Слиянием

#include

#include

#include

#define N 10

void massivprint(int A[], int L);

void mergesort(int A[], unsigned s);

void rightshiftcycle(int A[], unsigned b, unsigned c);

void rightshift(int A[], unsigned b, unsigned c);

void threesort(int A[]);

void swap(int *pa, int *pb);

void mergelist(int A[], unsigned a, unsigned b);

int main()

{

int massiv[N] = { 74,56,81,19,63,9,237,34,7,47 };

massivprint(massiv, N);

mergesort(massiv, N);

massivprint(massiv, N);

getchar();

return 0;

}

void massivprint(int mass[], int b)

{

for (unsigned i = 0; i < b; i++)

{

printf("%4d", mass[i]);

}

printf("\n");

}

void rightshiftcycle(int mass[], unsigned left, unsigned right)

{

int d = mass[right];

rightshift(mass, left, right);

mass[left] = d;

}

void rightshift(int mass[], unsigned left, unsigned right)

{

for (unsigned i = right; i > left; i--)

{

mass[i] = mass[i - 1];

}

}

void swap(int* pa, int* pb)

{

int temp = *pa;

*pa = *pb;

*pb = temp;

return;

}

void threesort(int mass[])

{

if (mass[0] > mass[1])

{

if (mass[1] >= mass[2])

{

swap(mass, mass + 2);

return;

}

else

{

swap(mass, mass + 1);

return;

}

}

else if (mass[0] == mass[1])

{

if (mass[1] > mass[2])

{

swap(mass, mass + 2);

return;

}

}

else

{

if (mass[1] > mass[2])

{

swap(mass + 1, mass + 2);

return;

}

}

}

void mergesort(int mass[], unsigned size)

{

if (size <= 1)

return;

else if (size == 2)

{

if (mass[0] > mass[1])

swap(mass, mass + 1);

return;

}

else if (size == 3)

{

threesort(mass);

return;

}

else

{

unsigned length1 = (size - 1) / 2 + 1 ;

unsigned length2 = size - length1;

mergesort(mass, length1); //сортируем левую часть массива длиной lenght1

mergesort(mass + length1, length2); //сортируем правую часть массива

}

}

void mergelist(int mass[], unsigned length1, unsigned length2)

{

unsigned i1 = 0, i2 = length1;

while (i1 < i2 && i2 < (length1 + length2))

{

//если меньший элемент стоит в левой части массива

if (mass[i1] <= mass[i2])

//просто сдвигаем счётчик, элемент и так стоит на своём месте

i1++;

else

{

/*Делаем циклический сдвиг вправо, т.е. вставляем рассматриваемый элементы

из второй части, а все оставшиеся элементы первой части сдвигаем вправо

после сдвига оба индекса увеличиваем на 1*/

rightshiftcycle(mass, i1, i2);

i1++;

i2++;

}

}

}

Длина строки

#include

#include

int str_length(char a[]);

int main()

{

int a;

char str1[] = "Bauman Moscow State Technical Univercity";

printf("%s\n", str1);

a = str_length(str1);

printf("Dlina stroki %d", a);

getchar();

return 0;

}

int str_length(char mass[])

{

unsigned i = 0;

while (mass[i] != '\0')

{

i++;

}

return i;

}

Сравнение строк

Добавляем в main()

char str2[] = "Univercity";

b = str_compare(str1, str2);

printf("Sravnenie strok %d\n", b);

Функция сравнения:

int str_compare(char s1[], char s2[])

{

unsigned i = 0;

while (s1[i] != '\0')

{

if (s1[i] > s2[i])

{

return 1;

}

else if (s1[i] < s2[i])

{

return -1;

}

Безопасный ввод массива с клавиатуры

#include

#include

#include

char* s_gets_c(char* str, unsigned buf_size);

int main()

{

const unsigned buf_size = 50;

char str1[buf_size];

char *p = s_gets_c(str1, buf_size);

getchar();

return 0;

}

char* s_gets_c(char* str, unsigned buf_size)

{

/*

Безопасная (с точки зрения риска переполнения буфера)

реализация чтения строки с консоли

Основана на посимвольном чтении потока ввода (getchar)

*/

unsigned i = 0;

int ch;

//из потока ввода забираем всё,

// что есть до символа '\n' (когда будет нажат ввод)

while ((ch = getchar()) != '\n')

if (i < (buf_size - 1))//но записываем только пока есть место в строке

str[i++] = ch;

str[i] = '\0'; //в конце не забываем поставить символ конца строки

return str;

}

сумма цифр в строке

unsigned sum_of_digits(char* str);

printf("Sum of digits: %u", sum_of_digits(str1));//в main

Функция:

unsigned sum_of_digits(char* str)

{

unsigned i = 0, sum = 0;

while (str[i])

{

if (str[i] >= '0'&& str[i] <= '9')

{

//добавляем значение цифры к сумме

//поскольку в кодовой таблице цифры

//записаны подряд, числовое значение

//можно получить вычислив разность

//кода текущего символа с кодом символа '0'

sum = sum + str[i] - '0';

}

i++;

}

return sum;

}

сумма чисел в строке

unsigned sum_of_decimals(char* str);

printf("Sum of decimals: %u", sum_of_decimals(str1));//в main

Функция:

unsigned sum_of_decimals(char* str)

{

unsigned i = 0, sum = 0, decimals = 0;

do

{

while (str[i] >= '0'&& str[i] <= '9')

{

decimals = decimals * 10 + (str[i] - '0');

i++;

}

sum = sum + decimals;

decimals = 0;

}

while (str[i++]); return sum; }

Подсчет слов

unsigned count_words(char* str);

unsigned str_char(char symbol, char* str);

printf("Count of words: %u", count_words(str1));//в main

Функция:

unsigned count_words(char* str)

{

unsigned inWord = 0, i = 0, count = 0;

char separator[] = " \t,.!?:;";

do

{

if (str_char(str[i], separator))

{

if (inWord)

count++;

inWord = 0;

}

else

inWord = 1;

} while (str[i++]);

//при этом символ '\0' тоже будет обработан

return count;

}

unsigned str_char(char symbol, char* str)

{

/*

Функция проверяет, встречается ли символ в строке

Если встречается - возвращаем 1, если нет - 0

Важно!!! Функция написана так,

чтобы анализировать и символ '\0',

который неявно существует в любой строке в C

*/

unsigned i = 0;

do

if (str[i] == symbol)

return 1;

while (str[i++]);

//при такой организации цикла проверяется и символ '\0'

return 0;

}

Статический способ задания двумерного массива.

#include

#include

#include

#include

//вторая размерность двумерного массива - количество столбцов

//эта константа должна быть объявлена на уровне файла,

//поскольку на неё есть ссылки при объявлении функций обработки

//статически распределённых массивов

const unsigned M = 10;

const unsigned N = 6;

// инициализация и печать статического массива

void init_matr_stat(int A[][M], unsigned n);

void print_matr_stat(int A[][M], unsigned n);

// перестановка двух элементов

void swap(int* a, int* b);

// перестановка строк и столбцов

void rows_static(int A[][M], unsigned row1, unsigned row2);

void columns_static(int A[][M], unsigned n, unsigned col1, unsigned col2);

// транспонирование матрицы

void transponir(int A[][M], unsigned n);

int main()

{

int A[N][M];

srand(time(NULL));

printf("Static massiv:\n");

init_matr_stat(A, N);

print_matr_stat(A, N);

rows_static(A, 2, 3);

print_matr_stat(A, N);

columns_static(A, N, 1, 4);

print_matr_stat(A, N);

transponir(A, N);

getchar();

return 0;

}

void init_matr_stat(int A[][M], unsigned n) // инициализация статического массива

{

//константа M используется в описании типа параметра

unsigned i, j;

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

for (j = 0; j < M; j++)

A[i][j] = rand() % 100;

}

void print_matr_stat(int A[][M], unsigned n) // печать статического массива

{

unsigned i, j;

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

{

for (j = 0; j < M; j++)

printf("%5d", A[i][j]);

printf("\n");

}

printf("\n");

}

void transponir(int mass[][M], unsigned str) // транспонирование

{

int massiv[M][N];

int i, j;

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

{

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

{

massiv[i][j] = mass[j][i];

printf("%4d ", massiv[i][j]);

}

printf("\n");

}

}

void rows_static(int A[][M], unsigned row1, unsigned row2)// перестановка строк

{

unsigned j;

for (j = 0; j < M; j++)

{

swap(&A[row1][j], &A[row2][j]);

}

}

void columns_static(int A[][M], unsigned n, unsigned col1, unsigned col2) // перестановка столбцов

{

unsigned i;

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

{

swap(&A[i][col1], &A[i][col2]);

}

}

void swap(int* a, int* b)

{

int temp = *a;

*a = *b;

*b = temp;

}

Динамический способ задания двумерного массива

#include

#include

#include

#include

const unsigned M = 10;

const unsigned N = 8;

// перестановка строк в матрице

void swap_rows_dynamic(int* A[], unsigned row1, unsigned row2);

// перестановка столбцов в матрице

void swap_columns_dynamic(int* A[], unsigned n, unsigned column1, unsigned column2);

void swap(int* pa, int* pb);

//инициализация и печать динамического двумерного массива

void init_matrix_dynamic(int* A[], unsigned n, unsigned m);

void print_matrix_dynamic(int* A[], unsigned n, unsigned m);

int main()

{

int** B; //указатель для доступа к динамическому двумерному массиву

unsigned i;

srand(time(NULL));

//распределяем память под динамический двумерный массив

B = (int**)malloc(N * sizeof(int*));

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

B[i] = (int*)malloc(M * sizeof(int));

//тестируем работу с динамическим двумерным массивом

//обратите внимание на то,

//что обе размерности передаются как параметры функции

printf("Dynamic matrix\n");

init_matrix_dynamic(B, N, M);

print_matrix_dynamic(B, N, M);

printf("\n\n");

swap_rows_dynamic(B, 2, 1);

print_matrix_dynamic(B, N, M);

printf("\n");

swap_columns_dynamic(B, N, 1, 2);

print_matrix_dynamic(B, N, M);

printf("\n");

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

free(B[i]);

//чистим память для массива указателей

free(B);

getchar();

return 0;

}

void init_matrix_dynamic(int* A[], unsigned n, unsigned m)

{

unsigned i, j;

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

for (j = 0; j < m; j++)

A[i][j] = rand() % 100;

}

void print_matrix_dynamic(int* A[], unsigned n, unsigned m)

{

unsigned i, j;

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

{

for (j = 0; j < m; j++)

printf("%5d", A[i][j]);

printf("\n");

}

}

void swap_rows_dynamic(int* A[], unsigned row1, unsigned row2)

{

unsigned j;

for (j = 0; j < M; j++)

{

swap(&A[row1][j], &A[row2][j]);

}

}

void swap_columns_dynamic(int* A[], unsigned n, unsigned column1, unsigned column2)

{

//при работе со столбцами в любом варианте распределения памяти

//придётся обрабатывать каждый элемент в отдельности

for (unsigned i = 0; i < n; i++)

swap(&A[i][column1], &A[i

Ряд Фибоначчи

#include
void fiba(int a);
int main()
{
int d ;
scanf("%d", &d);
fiba(d);
getchar();
getchar();
return 0;
}
void fiba(int a)
{
int i=1,sum;
int e1 = 1, e2 = 1;
for (int i = 1; i <= a; i++)
{
if (i < 3)
{
printf("%d ", e1);
}
else
{
sum = e1+e2;
e1 = e2;
e2 = sum;
printf("%d ", sum);
}
}
}

Наибольший общий делитель с рекурсией

#include

int nod(int a, int b); //функция nod с двумя параметрами(целочисленными)

int main()

{

int n1, n2, c;

printf("Vvedite dva chisla\n");

scanf("%d", &n1 );

scanf("%d", &n2 );

int c = nod(n1, n2);

printf("NOD %d and %d raven%3d", n1, n2, s);

getchar();

getchar();

return 0;

}

int nod(int a, int b) // заголовок функции, в "a" передается 56, в "b", соответственно, 21

{

if (a < b)

{

int v = a;

a = b;

b = v;

}

int R = a % b; // Рассчитаем остаток от деления a на b

while (R)

{

return nod(b, a%b); // рекурсия

}

return n2;

}



Наибольший общий делитель без рекурсии

#include
int nod(int a, int b); //функция nod с двумя параметрами (целочисленными)
int main()
{
int n1, n2;
scanf("%d", &n1);
scanf("%d", &n2);
int s = nod(n1, n2);
printf("NOD %d and %d raven%3d", n1, n2, s);
getchar();
getchar();
return 0;
}
int nod(int a, int b) // заголовок функции, в "a" передается 56, в "b", соответственно, 21
{ // начало функции
int R; // переменная для хранения остатка
// в случае, если второе число больше первого меняем их местами
if (a {
int c = a;
a = b;
b = c;
}
// Рассчитываем остаток от деления a на b
R = a % b; // % - операция взятия остатка от деления
if (R==0) // если остаток равен нулю выполняем цикл
{
return b;
}
else

{
return nod(b,R);
}
}



// наибольший простой делитель числа

#include

int delitel(int n, int i);

int main()

{

int n, i = 2, c;

printf("Vvedite chislo\n");

scanf_s("%d", &n);

c = delitel(n, i);

printf("%d", delitel(n, i));

getchar();

getchar();

return 0;

}

int delitel(int n, int i)

{

while (i*i <= n)

{

if (n%i == 0)

{

return delitel(n / i, i);

}

else

{

return delitel(n, i + 1);

}

}

return n;

}

Характеристики

Тип файла
Документ
Размер
40,26 Kb
Тип материала
Высшее учебное заведение

Тип файла документ

Документы такого типа открываются такими программами, как Microsoft Office Word на компьютерах Windows, Apple Pages на компьютерах Mac, Open Office - бесплатная альтернатива на различных платформах, в том числе Linux. Наиболее простым и современным решением будут Google документы, так как открываются онлайн без скачивания прямо в браузере на любой платформе. Существуют российские качественные аналоги, например от Яндекса.

Будьте внимательны на мобильных устройствах, так как там используются упрощённый функционал даже в официальном приложении от Microsoft, поэтому для просмотра скачивайте PDF-версию. А если нужно редактировать файл, то используйте оригинальный файл.

Файлы такого типа обычно разбиты на страницы, а текст может быть форматированным (жирный, курсив, выбор шрифта, таблицы и т.п.), а также в него можно добавлять изображения. Формат идеально подходит для рефератов, докладов и РПЗ курсовых проектов, которые необходимо распечатать. Кстати перед печатью также сохраняйте файл в PDF, так как принтер может начудить со шрифтами.

Список файлов лабораторной работы

Свежие статьи
Популярно сейчас
Зачем заказывать выполнение своего задания, если оно уже было выполнено много много раз? Его можно просто купить или даже скачать бесплатно на СтудИзбе. Найдите нужный учебный материал у нас!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6310
Авторов
на СтудИзбе
312
Средний доход
с одного платного файла
Обучение Подробнее