![]() |
1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!
![]() |
KerK |
![]()
Сообщение
#1
|
Новичок ![]() Группа: Пользователи Сообщений: 28 Пол: Мужской Репутация: ![]() ![]() ![]() |
Вектор А=(А1,А2,…,Аn) считается лексикографически большим вектора В=(В1,В2,…,Вn), если существует k>=0 такое что Аi=Вi(i<=k),Ak+1>Bk+1. Составить программу лексикографической сортировки числовых векторов. При составлении программы сортировки использовать минимальную необходимую память и эффективные структуры данных.
Давал пост в разделе задачи Лексикографическая сортировка числовых векторов., мне помогли с заданием но реализация была на паскале... вот попробовал перевести в сишку... возникли вопросы.... в сишке ни разу не пробовал процедуры... правильно ли я написал? и нет под рукой книги или хелпа, хотелось бы узнать что дает в паскале команда inc, и как она должна выглядеть в С. Потом не совсем понял какая структура должна быть у программы на С. НАпример на паскале ... ... procedure main(); end; Begin End. а как на си? И посмотрите пожалуйста мой код.... где какие ошибки? и как продолжить главный модуль программы?
|
![]() ![]() |
Michael_Rybak |
![]()
Сообщение
#2
|
Michael_Rybak ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 1 046 Пол: Мужской Реальное имя: Michael_Rybak Репутация: ![]() ![]() ![]() |
Если тебе на сях надо было, ты б так и говорил, я б на сях и пример приводил.
Ну че, давай по порядку. main() - это стандартное для си название главной функции программы. Такая функция всегда есть, и всегда одна. Например: На паскале program a_plus_b; На си:
Очень внимательно изучи это код на предмет оформления и вызова процедур, да и общей структуры программы. Теперь, что касается перевода. 1. Перенеси объявление массивов vv и sorted наверх, иначе из тела функции их не будет видно 2. Строку main() убери, и объяви функцию main отдельно, как я показал в примере выше. 3. Во всех проверках "=" записывается в си как "==". Здесь: if (sort_by=len+1) exit; и здесь: vv[sorted[j+1]][sort_by]=vv[sorted[j]][sort_by] 4. exit, означающий преждевременный выход из процедуры, в си записывается как return; 5. Вот такой цикл for i := 1 to up_bound - low_bound + 1 do Записывается так for (i=1;i<=up_bound-low_bound+1;i++) У тебя все правильно, но стоит "=" вместо "<=". 6. То же самое: for j := low_bound to up_bound - 1 do Записывается так: for (j=low_bound;j<=up_bound-1;j++) Тоже было "=", надо "<=". 7. Вот здесь: while (j < up_bound) and (vv[sorted[j + 1], sort_by] = vv[sorted[j], sort_by]) do Ты заменил случайно j на i. Верни ![]() 8. Inc(j); - это просто j++. 9. Вот здесь: i := j + 1; Ты тоже случайно заменил j на i. Верни. Давай, заменяй и приходи обратно. Какой у тебя си? Может си++? И ты уверен, что ты должен осилить именно "минимальную необходимую память и эффективные структуры данных"? Намучаешься немеряно, обещаю ;) Может давай для начала напишем такую простую сортировку пузырьком? Вот тебе шаблон, попробуй дописать: #include <stdio.h> Не заметил в названии темы ВС++. Тогда вообще хорошо, можно std::sort юзать. Там ведь есть stl (последний раз, когда я видел BC++, я не знал, что такое stl ![]() |
![]() ![]() |
![]() |
Текстовая версия | 22.07.2025 13:31 |