Вопрос № 162994: Здравствуйте. Я наткнулся на одну кочку в программировании. В приложении я прикрепил программу на Си++, которая сортирует матрицу при помощи функции. И вот собственно сам вопрос:"Как сортировать эту матрицу по столбцам используя приведенную функ...
Вопрос № 162998: Здравствуйте еще раз. Я задал вопрос номер 162994. По полученному ответу я понял, что я не до конца разъяснил, что конкретно мне надо. Внутрь описанной функции
поочередно передается три массива: 1){1,2,3}; 2){4,5,6};3){7,8,9}. Мне же надо,чтобы внутр...Вопрос № 163034: Добрый день уважаемые эксперты! Пожалуйста помогите в решении программ в языке Турбо Си! 1) Даны действительные числа x1, y1, x2, y2,...,x10, y10. Найти периметр десятиугольника, вершины которого имеют соответственно координаты (x1, y1), (x2,y2...
Вопрос № 162.994
Здравствуйте. Я наткнулся на одну кочку в программировании. В приложении я прикрепил программу на Си++, которая сортирует матрицу при помощи функции. И вот собственно сам вопрос:"Как сортировать эту матрицу по столбцам используя приведенную функцию". Проблема заключается в том, что внутрь функции надо передавать одномерный массив, при этом не создавая массивов посредников. Заранее спасибо.
Приложение:
Отправлен: 23.03.2009, 00:06
Вопрос задал: Hard-t (статус: Посетитель)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Hubbitus
Здравствуйте, Hard-t! Так вроде бы у Вас же и так все почти правильно? И на сколько я понял при беглом взгляде, работает как описано...
Единственное, объявление функции int sort(int * p) и int sort(int p[z]) в общем случае равнозначно (можете попробовать, и так и так работает в моем примере), если мне не изменяет память. Ведь это просто указатель на начало Вашего массива. Это Вы уж внутри должны сами соблюдать гранифы (опираясь на глобальную внешнюю переменную z или можете передать размерность
вторым параметром, как это повсеместно делается в чистом С).
Приложение:
--------- Если у Вас есть все что Вы хотите - значит Вы мало хотите!
Ответ отправил: Hubbitus (статус: 6-й класс)
Ответ отправлен: 23.03.2009, 00:44
Как сказать этому эксперту "спасибо"?
Отправить SMS
#thank 245818 на номер 1151 (Россия) | Еще номера >>
Вам помогли? Пожалуйста, поблагодарите эксперта за это!
Вопрос № 162.998
Здравствуйте еще раз. Я задал вопрос номер 162994. По полученному ответу я понял, что я не до конца разъяснил, что конкретно мне надо. Внутрь описанной функции поочередно передается три массива: 1){1,2,3}; 2){4,5,6};3){7,8,9}. Мне же надо,чтобы внутрь функции передавались вот такие три массива: 1){1,4,7}; 2){2,5,8}; 3){3,6,9}. Вот в этом состоит проблема. p.s. этим вопросом я поставил в тупик своего преподавателя по программированию.... поэтому
и обратился к вам
Приложение:
Отправлен: 23.03.2009, 02:27
Вопрос задал: Hard-t (статус: Посетитель)
Всего ответов: 2 Мини-форум вопроса >>> (сообщений: 2)
Отвечает: Hubbitus
Здравствуйте, Hard-t! Видимо Вы просто не до конца поняли что я Вам ответил :) В функцию на самом деле передается *указатель на начало массива*. Как его использовать и трактовать в функции Вы решаете уже сами. Теперь постараюсь в коде еще немного подробнее: sort(int p[z]){ for(i=0; i<z-1; i++) тут Вы идете по строке. По строке! Но, зная размер 3 (или Ваш глобальный z), никто Вам не мешает двигаться по *столбцу*, что-то вроде такого (остальные циклы я сейчас не смотрю и логику дальше не
проверяю): for(i=0; i<z*z-1; i+=z)
--------- Если у Вас есть все что Вы хотите - значит Вы мало хотите!
Ответ отправил: Hubbitus (статус: 6-й класс)
Ответ отправлен: 23.03.2009, 02:40
Как сказать этому эксперту "спасибо"?
Отправить SMS
#thank 245823 на номер 1151 (Россия) | Еще номера >>
Вам помогли? Пожалуйста, поблагодарите эксперта за это!
Отвечает: Vivikas
Здравствуйте, Hard-t! Это мой дебют, поэому извините, если что не так! Да, Вы совершенно правы, при таком вызове sort(a[i]); передаются указатели на соответствующие строки двухмерного масива, а при таком sort(a[0]+i); - адрес i-го элемента в 0-й строке, т е на столбец, можно считать. Но Вашу функцию надо переписать, т к Вы сравниваете два соседних элемента в строке, а надо в столбце. Вспомните, как компилятор высчитывает адрес ar[i][j] элемента(приведу кусок из лекций в политехе): "для
двухмерного массива k*n адрес произвольного элемента [i][j] компилятор вычисляет следующим образом: адрес_элемента_i_j = адрес_начала_массива + i*n* размер_элемента + j*размер_элемента" И еще, вспомните: если Ar - имя массива, а i - имя целочисленной переменной, то все три нижеприведенных выражения будут корректными и результат будет одинаковым: Ar[i] == *(Ar+i) == i[Ar] т е в приведенном в приложении коде *(p+columns*j) == p[ columns*j ] - можн
о заменить, если так понятнее. Привожу код для любой матрицы размером ROWSxCOLUMNS
Приложение:
Ответ отправила: Vivikas (статус: 1-й класс)
Ответ отправлен: 23.03.2009, 03:56
Как сказать этому эксперту "спасибо"?
Отправить SMS
#thank 245825 на номер 1151 (Россия) | Еще номера >>
Вам помогли? Пожалуйста, поблагодарите эксперта за это!
Вопрос № 163.034
Добрый день уважаемые эксперты! Пожалуйста помогите в решении программ в языке Турбо Си! 1) Даны действительные числа x1, y1, x2, y2,...,x10, y10. Найти периметр десятиугольника, вершины которого имеют соответственно координаты (x1, y1), (x2,y2),...(x10, y10). (определить процедуру вычисления расстояния между двумя точками, заданнами своими координатами). {и если можно то с объяснением} 2) Даны натуральное число n, действительные числа x1,....,xn (n>= 2). Получить последовательность x1-xn, x2-xn,...x(n-1)
- xn. {и если можно то с объяснением} Огромное спасибо!
Отвечает: Лысков Игорь Витальевич
Здравствуйте, Васильй Васильич! 1) Программа в приложении. Введенные координаты точек сортируем так, чтобы следующая была с минимальным расстоянием от предыдущей. Возможно, не самый лучший способ, но, если координаты - реальные, то должно сработать без проблем. 2) Программу не привожу, достаточно простой случай. Приведу лишь фрагмент:
Код:
const int n=10; //число элементов double x[n]; //массив чисел (индексы от 0 до n-1) int i; for (i=0;i<n-1;i++) //по всем, кроме последнего printf("%g
",x[i] - x[n-1]); //посчитаем и выведем x[i] - x[n-1] (x[n-1] - последний элемент)
Приложение:
--------- Удачи!
Ответ отправил: Лысков Игорь Витальевич (статус: Профессионал) Украина, Кировоград ICQ: 234137952 ---- Ответ отправлен: 25.03.2009, 14:50
Как сказать этому эксперту "спасибо"?
Отправить SMS
#thank 246052 на номер 1151 (Россия) | Еще номера >>
Вам помогли? Пожалуйста, поблагодарите эксперта за это!
Оценка за ответ: 5
Отвечает: Boriss
Здравствуйте, Васильй Васильич! Вроде как и я принимал участие в обсуждении, а потому второе задание. Комментарии разместил даже там, где они, по-моему, не нужны Пример окна программы:
Код:
Введите, сколько точек нужно
(не больше 1000): 3 Введите 3 действительных (вещественных) чисел 1) 1 2) 2.3 3) 5 Модифицированная последовательность 1) -4.000000 2) -2.700000 3) 0.000000
Нажите любую клавишу ...
Приложение:
--------- Вывод - то место в тексте, где вы устали думать
Ответ отправил: Boriss (статус: Профессор) Россия, Саранск Организация: Мордовский госуниверситет, Саранск, Факультет Электронной Техники WWW:Программирование на Паскале ICQ: 320096696 ---- Ответ отправлен: 27.03.2009, 12:35
Как сказать этому эксперту "спасибо"?
Отправить SMS
#thank 246177 на номер 1151 (Россия) | Еще номера >>
Вам помогли? Пожалуйста, поблагодарите эксперта за это!
Оценка за ответ: 5
Скажите "спасибо" эксперту, который помог Вам!
Отправьте СМС-сообщение с тестом #thank НОМЕР_ОТВЕТА
на короткий номер 1151 (Россия)
Номер ответа и конкретный текст СМС указан внизу каждого ответа.
* Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи.
(полный список тарифов)
** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
*** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.