программы (843411)
Текст из файла
Пузырек и прямой выбор
#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;
}
Характеристики
Тип файла документ
Документы такого типа открываются такими программами, как Microsoft Office Word на компьютерах Windows, Apple Pages на компьютерах Mac, Open Office - бесплатная альтернатива на различных платформах, в том числе Linux. Наиболее простым и современным решением будут Google документы, так как открываются онлайн без скачивания прямо в браузере на любой платформе. Существуют российские качественные аналоги, например от Яндекса.
Будьте внимательны на мобильных устройствах, так как там используются упрощённый функционал даже в официальном приложении от Microsoft, поэтому для просмотра скачивайте PDF-версию. А если нужно редактировать файл, то используйте оригинальный файл.
Файлы такого типа обычно разбиты на страницы, а текст может быть форматированным (жирный, курсив, выбор шрифта, таблицы и т.п.), а также в него можно добавлять изображения. Формат идеально подходит для рефератов, докладов и РПЗ курсовых проектов, которые необходимо распечатать. Кстати перед печатью также сохраняйте файл в PDF, так как принтер может начудить со шрифтами.