Язык си - Написать программу, которая читает с клавиатуры строки (максимальный размер строк – 50 символов). Признаком окончания ввода является ввод пустой строки. Вывести первую строку, в составе которой встречается самая большая сумма чисел.
Описание
Условие:
Вывод:
Характеристики решённой задачи
Список файлов
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
/*C++ - Написать программу, которая в двумерном массиве типа int размером Nстрок иM столбцов сначала сотирует каждую из строк пузырьковым методом(использвя рекурсию), а затем выводит отсортированную последовательность всех элементов массива, используя принцип сортировки слиянием. Массив динамический, элементы инициализируются случайным образом.*/
void swap(int* a, int* b) {
int t;
t = *a, * a = *b, * b = t;
}
int printArray(int** a, int n, int m) {
for (int i = 0; i < n; i++) // цикл по строкам
{
for (int j = 0; j < m; j++) // цикл по столбцам
{
printf("%3d ", a[i][j]); // 5 знакомест под элемент массива
}
printf("\n");
}
printf("\n");
return 0;
}
void bubbleSort(int** mass, int n, int m) {
//сортировка пузырьком
int tmp;
int noSwap;
for (int k = 0; k < n; k++)
for (int i = m - 1; i >= 0; i--) {
noSwap = 1;
for (int j = 0; j < i; j++) {
if (mass[k][j] > mass[k][j + 1]) {
tmp = mass[k][j];
mass[k][j] = mass[k][j + 1];
mass[k][j + 1] = tmp;
noSwap = 0;
}
}
if (noSwap == 1)
break;
}
}
void Merg(int* arr, int begin, int end,int len) {
int i = begin,
t = 0,
mid = begin + (end - begin) / 2,
j = mid + 1;
int* d = (int*)malloc((len) * sizeof(int));
while (i <= mid && j <= end) {
if (arr[i] <= arr[j]) {
d[t] = arr[i]; i++;
} else {
d[t] = arr[j]; j++;
}
t++;
}
while (i <= mid) {
d[t] = arr[i]; i++; t++;
}
while (j <= end) {
d[t] = arr[j]; j++; t++;
}
for (i = 0; i < t; i++)
arr[begin + i] = d[i];
}
void MergSort(int* arr, int left, int right, int len) {
int temp;
if (left < right)
if (right - left == 1) {
if (arr[right] < arr[left]) {
temp = arr[left];
arr[left] = arr[right];
arr[right] = temp;
}
} else {
MergSort(arr, left, left + (right - left) / 2,len);
MergSort(arr, left + (right - left) / 2 + 1, right, len);
Merg(arr, left, right, len);
}
}
void correct(int** a, int n, int m) { // n - число элементов в массиве, arr - массив
int nn, mm;
int *arr = (int*)malloc((n*m) * sizeof(int));
for (int k = 0; k < n*m; k++) {
mm = k % m;
nn = k / m;
arr[k] = a[nn][mm];
}
// ***
MergSort(arr, 0, n*m - 1, n * m);
// ***
for (int k = 0; k < n * m; k++){
if (k%m==0) {
printf("\n");
}
printf("%3d ", arr[k]);
}
printf("\n");
free(arr); // освобождение памяти под строку
}
int main() {
int** a; // указатель на указатель на строку элементов
int i, j, n=5, m=5;
system("chcp 1251");
system("cls");
printf("Введите количество строк: ");
scanf_s("%d", &n);
printf("Введите количество столбцов: ");
scanf_s("%d", &m);
printf("\n");
// Выделение памяти под указатели на строки
a = (int**)malloc(n * sizeof(int*));
// Ввод элементов массива
for (i = 0; i < n; i++) { // цикл по строкам
// Выделение памяти под хранение строк
a[i] = (int*)malloc(m * sizeof(int));
for (j = 0; j < m; j++) { // цикл по столбцам
/*printf("a[%d][%d] = ", i, j); // ввод массива
scanf_s("%d", &a[i][j]);*/
a[i][j] = (rand() % 30 - 10);
}
}
// Вывод элементов массива
printArray(a, n, m);
printf("Реализация сортировки пузыриком:\n");
bubbleSort(a, n, m);
printArray(a, n, m);
printf("Реализация сортировки слияниями(Merg Sort):\n");
correct(a, n, m);
// Очистка памяти
for (i = 0; i < n; i++) // цикл по строкам
free(a[i]); // освобождение памяти под строку
free(a);
system("pause");
return 0;
}