Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.97/34: Рейтинг темы: голосов - 34, средняя оценка - 4.97
55 / 18 / 19
Регистрация: 11.11.2014
Сообщений: 463

Объяснить задание: дана матрица размером NxM. Упорядочить их строки по возрастанию их первых элементов

11.11.2014, 06:52. Показов 6599. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Объясните пожалуйста про двумерные массивы. Препод ничего адекватно нам не объясняет поэтому приходиться учить язык самому, по интернету. Всё что я понял, что двумерные массивы держат в себе большое кол-во переменных и состоят из строк и столбцов. Если значение массивы даны, то я могу вывести любой элемент массивы и с ним уже работать, но на этом моё понимание в массивах закончилось. Прочёл приличное кол-во материала, но для понимания не хватает наглядного примера. Объясните пожалуйста "Обычным языком" как , к примеру, решать такую задачу :
"Дана матрица размером NxM. Упорядочить их строки по возрастанию их первых элементов" . Буду очень благодарен. Уже несколько дней разбираю массивы, только с ними возникла проблема.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
11.11.2014, 06:52
Ответы с готовыми решениями:

Дана матрица размером NxM. Упорядочить её строки по возрастанию их первых элементов
Дана матрица размером NxM. Упорядочить её строки по возрастанию их первых элементов.

Дана матрица размером NxM. Упорядочить её строки по возрастанию их первых элементов
Дана матрица размером NxM. Упорядочить её строки по возрастанию их первых элементов.

Дана матрица размером NxM. Упорядочить ее строки по возрастанию суммы их элементов
Дана матрица размером NxM. Упорядочить ее строки по возрастанию суммы их элементов.

2
 Аватар для Alexandr_1982
191 / 90 / 33
Регистрация: 04.11.2013
Сообщений: 473
Записей в блоге: 4
11.11.2014, 08:22
Лучший ответ Сообщение было отмечено Александр321321 как решение

Решение

Двухмерный массив это матрица. Матрица это прямоугольная таблица чисел. NxM значит, что в матрице либо N строк, M столбцов, либо N столбцов, M строк.

Примеры задания матрицы
https://www.cyberforum.ru/cgi-bin/latex.cgi?\begin{pmatrix}1 & 3 & \\ 2 & 4 & \end{pmatrix}
https://www.cyberforum.ru/cgi-bin/latex.cgi?\begin{pmatrix}1 & 3 & 3\\ 2 & 4 & 4\\3 & 5 & 7\end{pmatrix}

Объявление может производиться несколькими способами.
При статическом выделении памяти объявление двухмерного массива производится с явным указанием количества строк и столбцов, например int a[3][5]; В языке C переменная не может использоваться при статическом выделении памяти под массив. Если числа N, M вводятся с клавиатуры, получают из файла, то используется динамическое выделение памяти. Переменную объявляют как указатель, например int** a; Выделение памяти производится в языке С функцией malloc стандартной библиотеки. Указателю присваивается адрес при выделении памяти. malloc в windows выделет память из кучи посредством обращения к winAPI функции HeapAlloc.

Обращение к элементам двухмерного массива производится либо по индексам, например a[1][2], a[3][4], либо по указателю *(*(a+i)+j). Двухмерный массив является в языке С указателем, то есть a это указатель. Смещение адреса указателя a+i на i единиц. Разыменовывания указателя, то есть получение доступа к значению производится оператором * (звездочка).

В 32 разрядной системе адрес является 32 разрядным и указывает на расположение в образе исполняемой программы в памяти. Компилятор при компиляции делает образ программы, который загружается в том же виде, в котором в файле записан, в память. 32 разрядный адрес является двоичным, так как компьютер умеет работать только с двоичными данными (1 это наличие тока в электрической цепи, 0 - отсутствие тока). То есть там элементы электрической цепи, которые умеют сохранять напряжение, и если оно есть, то в памяти находится 1, если напряжения в электрической цепи нет, то находится 0. 1 и 0 это абстрактно. Компьютер не понимает, есть ли 0 или 1 или нет.

При динамическом выделении памяти может выделяться не последовательный набор адресов. Адрес от одного исполнения программы к другому не сохраняется.

Вывод элемента массива может быть произведен функцией printf которая имеет прототип int printf(const char* str, ...); Функция имеет переменное число параметров (при переменном числе параметров обращение к параметрам производится по указателю. Первым аргументом функции является строка, которую нужно вывести, где указаны спецификаторы типов данных, передаваемых в составе массива переменного числа параметров. Целочисленные данные имеют спецификатор %d, поэтому вызов, например, printf("%d", 5); где функция выводит 5. Числа с плавающей точкой имеют спецификатор %f, например, printf("%f", 2.3); Целая часть от десятичной отделяется точкой. Причем printf("%f", 2); является ошибкой, так как 2 не преобразуется в число с плавающей точкой, и нужно явное преобразование типа printf("%f", (float)2);

Чтобы использовать функцию printf, нужно подключить заголовочный файл stdio.h. На ассемблере вывод делается вручную через указатели.

srand запускает генератор псевдослучайных чисел. rand() генерирует псевдослучайное число. time получает время.

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <time.h>
 
int main()
{
 
int** a;
int n;
int m;
 
int i;
int j;
int k;
 
int tmp;
 
n = 10;
m = 20;
 
srand(time(0));
 
a = (int**) malloc(n*sizeof(int*));
 
for(i=0;i<n;i++)
a[i] = (int*) malloc(m*sizeof(int));;
 
for(i=0;i<n;i++)
for(j=0;j<m;j++)
a[i][j] = rand()%9;
 
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
printf("%d ", a[i][j]);
printf("\n");
}
 
for(i=0;i<n;i++)
{
for(k=i+1;k<n; k++)
{
if (a[i][0] > a[k][0])
{
for(j=0;j<m;j++)
{
tmp = a[i][j];
a[i][j] = a[k][j];
a[k][j] = tmp;
}
}
}
}
 
printf("\n");
 
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
printf("%d ", a[i][j]);
printf("\n");
}
 
for(i=0;i<n;i++)
free(a[i]);
 
free(a);
 
return 0;
 
}
1
55 / 18 / 19
Регистрация: 11.11.2014
Сообщений: 463
11.11.2014, 17:03  [ТС]
Спасибо большое за потраченное время, но много лишнего написали и по моему не в том направлении.Про printf можно было не объяснять. И к самой задаче не то совсем, пошли не тем путём. Нужно самому ввести размерность матрицы и её координаты и уже эти координаты упорядочить по возрастанию( или упорядочить строки так, чтобы сумма каждой новой строки была больше предыдущей(тут на выбор)). Ну к примеру дана матрица
1 4 5 6
3 7 2 3
1 4 6 7 сумма 1 = 16, 2 = 15 , 3=18 и получается, что первая строка будет 3723
вторая 1456 третья 1467. Ну типо такого. И вот мне нужно разобраться, как это сделать. Сегодня сам смог разобраться с первой частью, как задавать размерность матрицы и писать её координаты. Смог сделать так чтобы считалась сумма в каждой строке, но о сталось теперь понять как их по возрастанию поставить.

Но всё равно спасибо вам, оказывается не так уж и мало знаю, как думал, о двумерном массиве. И хотя бы узнал зачем ** надо)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
11.11.2014, 17:03
Помогаю со студенческими работами здесь

Дана матрица размером NxM. Упорядочить их строки по возрастанию их наибольших элементов
Дана матрица размером NxM. Упорядочить их строки по возрастанию их наибольших элементов Помогите пожалуйста( Ошибка &quot;&quot; is not...

Дана вещественная матрица размером NxM. Упорядочить ее строки по неубыванию их первых элементов
Дана вещественная матрица размером NxM. Упорядочить ее строки по неубыванию их первых элементов

Сортировка массива. Дана матрица размером NxM. Упорядочить ее строки по возрастанию их наибольших элементов
Дана матрица размером NxM. Упорядочить ее строки по возрастанию их наибольших элементов. Подскажите, что не так. Максимальные элементы...

Дана матрица размером N строк и M столбцов Упорядочить ее строки по возрастанию их первых элементов
Дана матрица размером N строк и M столбцов. Упорядочить ее строки по возрастанию их первых элементов. Переменные вводить и выводить с...

Дана матрица А размером NxM. Упорядочить ее строки по неубыванию их наибольших элементов
Дана матрица А размером NxM. Упорядочить ее строки по неубыванию (возрастанию ) их наибольших элементов. Помогите пожалуйста послезавтра...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru