Форум программистов, компьютерный форум, киберфорум
PascalABC.NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/9: Рейтинг темы: голосов - 9, средняя оценка - 4.89
1 / 1 / 0
Регистрация: 10.12.2017
Сообщений: 48

Сортировка массива string

11.09.2018, 16:41. Показов 1777. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Уже битый час не могу понять в чем проблема, хотя задача очень простая. Суть задачи: Пользователь вводит строку из 2х и более слов через пробел, необходимо вывести слова из строки в алфавитном порядке. Я решил добавить в строку после ввода пробел и с помощью паскалевских функций вынести каждое слово в ячейку строкового массива, вроде это у меня получилось. А вот с сортировкой проблем, программа просто не выдает нужный результат. Привожу код:
Pascal
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
var
  s: string;
  tmp: array [1..100] of string;
  
  b, i, q: integer;
  c, temp: string;
 
begin
  i := 1;
  writeln('Введите строку');
  readln(s);
  s := s + ' ';
  while (length(s) > 0) do
  begin
    b := Pos(' ', s);
    tmp[i] := Copy(s, 1, b - 1);
    i := i + 1;
    delete(s, 1, b);
  end;
   //Начало сортировки
  for i := 1 to 10 do
    for q := 1 to 10 do
      if (tmp[i] > tmp[i + 1]) then
      begin
        temp := tmp[i];
        tmp[i] := tmp[i + 1];
        tmp[i + 1] := temp;
      end;
  //Вывод отсортированного массива
  for i := 1 to 10 do
    writeln(tmp[i]);
end.
Прошу указать на ошибки, желательно подробно, просто я перешел в другую школу, а в прошлой у меня программирование было на уровне if else да еще и на другом языке, вот это осознал за 2 дня. Так же попрошу дать совет, какой язык и что именно из него лучше начать изучать, ибо меня еще и нагрузили созданием графического приложения "чтобы там было что программировать, а не много if'ов" для курсового проекта под конец года, это мне почти с нуля все осваивать
1
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
11.09.2018, 16:41
Ответы с готовыми решениями:

Одномерные массивы. Вставка, удаление элементов массива. Перестановка элементов массива. Сортировка массива методом пузырька
Помогите пожалуйста! Дан массив, состоящий из N букв латинского алфавита а) Заполнить массив датчиком случайных чисел б)...

Сортировка массива. Упорядочить нечетные элементы массива по возрастанию методом обмена
Упорядочить одномерный массив по возрастанию, методом обмена. (по возрастанию должны быть толбко нечётные элементы)

Сортировка вставками «с конца массива» последовательным поиском с начала массива
Сортировка вставками «с конца массива» последовательным поиском с начала массива.

4
Почетный модератор
 Аватар для Puporev
64315 / 47611 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
11.09.2018, 17:44
Pascal
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
var
  s: string;
  tmp: array [1..100] of string;
 
  b, i, n, q: integer;
  c, temp: string;
 
begin
  n := 0; //размер массива
  writeln('Введите строку');
  readln(s);
  s := s + ' ';
  while (length(s) > 0) do
  begin
    b := Pos(' ', s);
    n:=n+1;
    tmp[n] := Copy(s, 1, b - 1);
    delete(s, 1, b);
  end;
   //Начало сортировки
  for i := 1 to n-1 do
    for q := 1 to n-1 do
      if (tmp[q] > tmp[q + 1]) then //сортировка неверно
      begin
        temp := tmp[q];
        tmp[q] := tmp[q + 1];
        tmp[q + 1] := temp;
      end;
  //Вывод отсортированного массива
  for i := 1 to n do
    writeln(tmp[i]);
end.
0
 Аватар для Sun Serega
2355 / 1458 / 526
Регистрация: 07.04.2017
Сообщений: 4,798
11.09.2018, 18:06
А можно вам подсказывать в стиле PascalABC.Net? Потому что у вас весь код в стиле старого паскаля. Этот стиль на новом будет работать, но если у вас в школе нельзя программировать на новом - то то что я подскажу вам никак не поможет.

Добавлено через 16 минут
Ну хотя, я сейчас лучше посмотрел - там всё просто:
1. Вы не правильно реализовали пузырьковую сортировку. цикл с "i" должен быть внутренним, то есть for i и for q надо поменять местами.
2. В сортировке вы используете 11 элементов, потому что макс. значение i = 10, а i+1 будет 11. Надо перебирать значения i от 1 до 9.

Ещё можно немного оптимизировать, если учесть особенности пузырьковой сортировки, но если исправить эти 2 пункта - должно работать.


Ну а что касается стиля PascalABC.Net:
Pascal
1
2
3
4
5
6
begin
  ReadlnString
  .ToWords
  .Order
  .PrintLines
end.
Правда, тут много придётся объяснять)) Но, если что - могу, если надо.
1
Почетный модератор
 Аватар для Puporev
64315 / 47611 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
11.09.2018, 18:09
Лучший ответ Сообщение было отмечено smurf19458 как решение

Решение

Цитата Сообщение от Sun Serega Посмотреть сообщение
Надо перебирать значения i от 1 до 9.
Надо определить размер полученного массива и перебирать от 1 до n-1.
2
Alvin Seville
 Аватар для Соколиный глаз
343 / 273 / 134
Регистрация: 25.07.2014
Сообщений: 4,537
Записей в блоге: 22
11.09.2018, 18:41
Реализация ToWords:
Pascal
1
2
3
4
5
/// Преобразует строку в массив слов
function ToWords(Self: string; params delim: array of char): array of string; extensionmethod;
begin
  Result := Self.Split(delim, System.StringSplitOptions.RemoveEmptyEntries);
end;
, вполне ясно и понятно. Было бы полезно ТС-у почитать про Split. Также про OrderBy, так как Order реализован на его основе:
Pascal
1
2
3
4
5
/// Возвращает отсортированную по возрастанию последовательность
function Order<T>(Self: sequence of T): sequence of T; extensionmethod;
begin
  Result := Self.OrderBy(x -> x);
end;
Что касается стиля PascalABC.Net, то перед этим следовало бы ТС-у изучить что такое последовательности sequence of T и почитать про IEnumerable<T>. И на мой взгляд, ТС-у еще рано лезть в последовательности.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
11.09.2018, 18:41
Помогаю со студенческими работами здесь

Отображение массива <record s1,s2:string> в ListView
Доброго времени суток. Пожалуйста, покажите на примере работающего кода, как создавать ListView и работать с ним (удаление записи по...

Сортировка массива вставками с конца массива
Дано натуральное число N (1&lt;=N&lt;=100), целочисленный линейный массив a0, a1, …, aN-1. Эле-менты массива заполняются случайными целыми...

Сортировка массива класса string
Добрый вечер. Задача опять таки учебная, но тем не менее интересно как можно оптимально ее решить. Создать массив строк - к...

Сортировка массива типа String
Здравствуйте! Подскажите, пожалуйста, как решить проблему. Имеется пять переменных типа String: a = &quot;Будильник установлен на...

Сортировка массива string по алфавиту
Как отсортировать масив string по алфавите к примеру есть масив string на 10 елементов как отсортировать по первой букве кажного...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&amp;d=1772460536 Одним из. . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru