Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на C / C++


Хостинг Портала RusFAQ.ru:
MosHoster.ru - Профессиональный хостинг на Windows 2008

РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

Чемпионы рейтинга экспертов в этой рассылке

Hubbitus
Статус: 6-й класс
Рейтинг: 94
∙ повысить рейтинг >>
Micren
Статус: Практикант
Рейтинг: 89
∙ повысить рейтинг >>
Лысков Игорь Витальевич
Статус: Профессионал
Рейтинг: 59
∙ повысить рейтинг >>

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / C/C++

Выпуск № 1269
от 28.03.2009, 21:05

Администратор:Dr_Andrew
В рассылке:Подписчиков: 499, Экспертов: 44
В номере:Вопросов: 3, Ответов: 5

Нам важно Ваше мнение об этой рассылке.
Оценить этот выпуск рассылки >>

Вопрос № 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 (Россия) | Еще номера >>
  • Отправить WebMoney:
  • Вам помогли? Пожалуйста, поблагодарите эксперта за это!


    Вопрос № 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 (Россия) | Еще номера >>
  • Отправить WebMoney:
  • Вам помогли? Пожалуйста, поблагодарите эксперта за это!


    Отвечает: 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 (Россия) | Еще номера >>
  • Отправить WebMoney:
  • Вам помогли? Пожалуйста, поблагодарите эксперта за это!


    Вопрос № 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. {и если можно то с объяснением}
    Огромное спасибо!
    Отправлен: 23.03.2009, 13:23
    Вопрос задал: Васильй Васильич (статус: Посетитель)
    Всего ответов: 2
    Мини-форум вопроса >>> (сообщений: 6)

    Отвечает: Лысков Игорь Витальевич
    Здравствуйте, Васильй Васильич!
    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 (Россия) | Еще номера >>
  • Отправить WebMoney:
  • Вам помогли? Пожалуйста, поблагодарите эксперта за это!

    Оценка за ответ: 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 (Россия) | Еще номера >>
  • Отправить WebMoney:
  • Вам помогли? Пожалуйста, поблагодарите эксперта за это!

    Оценка за ответ: 5


    Вы имеете возможность оценить этот выпуск рассылки.
    Нам очень важно Ваше мнение!
    Оценить этот выпуск рассылки >>

    Отправить вопрос экспертам этой рассылки

    Приложение (если необходимо):

    * Код программы, выдержки из закона и т.п. дополнение к вопросу.
    Эта информация будет отображена в аналогичном окне как есть.

    Обратите внимание!
    Вопрос будет отправлен всем экспертам данной рассылки!

    Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
    экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


    Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
    Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.

    Скажите "спасибо" эксперту, который помог Вам!

    Отправьте СМС-сообщение с тестом #thank НОМЕР_ОТВЕТА
    на короткий номер 1151 (Россия)

    Номер ответа и конкретный текст СМС указан внизу каждого ответа.

    Полный список номеров >>

    * Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи. (полный список тарифов)
    ** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
    *** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.


    © 2001-2009, Портал RusFAQ.ru, Россия, Москва.
    Авторское право: ООО "Мастер-Эксперт Про"
    Техподдержка портала, тел.: +7 (926) 535-23-31
    Хостинг: "Московский хостер"
    Поддержка: "Московский дизайнер"
    Авторские права | Реклама на портале

    ∙ Версия системы: 5.13 от 01.12.2008

    Яндекс Rambler's Top100
    RusFAQ.ru | MosHoster.ru | MosDesigner.ru
    RusIRC.ru | Kalashnikoff.ru | RadioLeader.ru

    В избранное