Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.10.2010, 01:28   #1
cyt
Пользователь
 
Регистрация: 01.10.2010
Сообщений: 10
По умолчанию Сортировка строк массива (по числам)

Подскажите, пожалуйста, как отсортировать строки массива по числовым значениям? Например,

Имя Рост

Даша 168
Рома 182
Саша 190
Таня 178
Вова 184

Самые высокие:
...


Необходимо вывести общий список ребят и двух самых высоких (списком ниже).

Как я понимаю, сначала надо символы 168, 192 и т.д. перевести в числа с помощью команды "ord", а потом отсортировать от большего к меньшему и вывести 2 первых числа и соответствующие им строки.

Застрял на команде 'ord' (числа выводятся, но совсем не те, что даны в исходных данных) и на выводе соответствующих строк (не знаю как связать полученные числа и первоначальные строки)
Заранее спасибо за помощь!
cyt вне форума Ответить с цитированием
Старый 01.10.2010, 08:36   #2
Niro
Форумчанин
 
Аватар для Niro
 
Регистрация: 23.09.2010
Сообщений: 682
По умолчанию

Ну во-первых функция "ord" не переводит строку в число, а возвращает код символа, неважно будь то цифра или буква.
Для перевода строки в число используй функцию - VAL(строка, число, C), - 'С' равно нулю, если преобразование успешно
Проще всего признать свою ошибку.
Гораздо труднее еЁ осознать и исправить.
Niro вне форума Ответить с цитированием
Старый 01.10.2010, 08:39   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

ord тут не помощник - она выдает код символа
Ты имел ввиду val. Но.
Я бы не хранил данные смешанного вида в одной ячейке массива. Лучше уж массив записей с полями Имя,Рост. тогда просто сортировка с проверкой по полю Рост.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 01.10.2010, 21:14   #4
cyt
Пользователь
 
Регистрация: 01.10.2010
Сообщений: 10
По умолчанию

Цитата:
Сообщение от Niro Посмотреть сообщение
Ну во-первых функция "ord" не переводит строку в число, а возвращает код символа, неважно будь то цифра или буква.
Для перевода строки в число используй функцию - VAL(строка, число, C), - 'С' равно нулю, если преобразование успешно
По заданию мне нужно работать с символьным массивом. Вот, например, что скажете по этому поводу: (ord(A[i,j])-48)*1000 + (ord(A[i,j+1])-48)*100... ?

Цитата:
Сообщение от Stilet Посмотреть сообщение
ord тут не помощник - она выдает код символа
Ты имел ввиду val. Но.
Я бы не хранил данные смешанного вида в одной ячейке массива. Лучше уж массив записей с полями Имя,Рост. тогда просто сортировка с проверкой по полю Рост.
А что делать, если нужно использовать символьный массив? Подскажите, пожалуйста, с текстом программы.

Последний раз редактировалось Stilet; 02.10.2010 в 12:47.
cyt вне форума Ответить с цитированием
Старый 01.10.2010, 21:22   #5
Mad_Cat
Made In USSR!
Старожил
 
Аватар для Mad_Cat
 
Регистрация: 01.09.2010
Сообщений: 3,657
По умолчанию

сделаю за 3.5 $ icq 600067777
"...В жизни я встречал друзей и врагов.В жизни много всего перевидал.Солнце тело мое жгло, ветер волосы трепал,но я смысла жизни так и не узнал..."
(c) Юрий Клинских aka "Хой"
Mad_Cat вне форума Ответить с цитированием
Старый 01.10.2010, 22:41   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

1) сортируйте строки целиком

2) для сравнения строк используйте функцию GetHeight(s : string):integer;
Код:
function GetHeight(s : string):integer;
var
  H, k : integer;
  subStr : string;
begin
  if Pos(' ',s)=0 then
    H := 0
  else begin
    subStr := Copy(s, Pos(' ',s), 255);
    while (Length(subStr)>0) and (subStr[1]=' ') do
      Delete(subStr, 1, 1);
    while (Length(subStr)>0) and (subStr[Length(subStr)]=' ') do
      Delete(subStr, Length(subStr), 1);
    Val(subStr, H, k);
    if K<>0 then H := 0;
  end;
  GetHeight := H;
end;
Serge_Bliznykov вне форума Ответить с цитированием
Старый 02.10.2010, 14:09   #7
cyt
Пользователь
 
Регистрация: 01.10.2010
Сообщений: 10
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
1) сортируйте строки целиком

2) для сравнения строк используйте функцию GetHeight(s : string):integer;
Код:
function GetHeight(s : string):integer;
var
  H, k : integer;
  subStr : string;
begin
  if Pos(' ',s)=0 then
    H := 0
  else begin
    subStr := Copy(s, Pos(' ',s), 255);
    while (Length(subStr)>0) and (subStr[1]=' ') do
      Delete(subStr, 1, 1);
    while (Length(subStr)>0) and (subStr[Length(subStr)]=' ') do
      Delete(subStr, Length(subStr), 1);
    Val(subStr, H, k);
    if K<>0 then H := 0;
  end;
  GetHeight := H;
end;
Строки по заданию использовать нельзя. Только массив символов
cyt вне форума Ответить с цитированием
Старый 02.10.2010, 14:42   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Строки по заданию использовать нельзя. Только массив символов
1) по какому заданию?! Покажите, где это написано?
2) Строка — это и есть массив символов
3) а ну-ка, покажите, пожалуйста Ваш код, которым Вы заполняете исходный массив с данными.
4) Не вижу принципиальных сложностей, можно переделайть под использование массивов символов. НО! Вам прийдётся реализовать аналог функции VAL
я бы мог такое написать, но не уверен, что это кому-нибудь нужно...

p.s. Вы реально хотите сделать задачу самостоятельно?! Может быть, действительно обратитесь к фрилансерам, и они с огромным удовольствием сделают Вам задачу за бабки...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 02.10.2010, 15:28   #9
cyt
Пользователь
 
Регистрация: 01.10.2010
Сообщений: 10
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
1) по какому заданию?! Покажите, где это написано?
2) Строка — это и есть массив символов
3) а ну-ка, покажите, пожалуйста Ваш код, которым Вы заполняете исходный массив с данными.
4) Не вижу принципиальных сложностей, можно переделайть под использование массивов символов. НО! Вам прийдётся реализовать аналог функции VAL
я бы мог такое написать, но не уверен, что это кому-нибудь нужно...

p.s. Вы реально хотите сделать задачу самостоятельно?! Может быть, действительно обратитесь к фрилансерам, и они с огромным удовольствием сделают Вам задачу за бабки...
Да, хочу самостоятельно :-)

Исходный массив уже дан (в отдельном файле), его заполнять не надо. Надо только вывести две строки с наибольшими значениями.

В задании сказано: надо преобразовать символы в числа и вывести в выходной файл.
cyt вне форума Ответить с цитированием
Старый 02.10.2010, 17:00   #10
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Да, хочу самостоятельно :-)
Весьма похвально!

Значится так.
Я смогу Вам помочь если Вы:
- приведёте задание не в вольном пересказе, а _дословно
- приведёте здесь Ваш исходный массив (в отдельном файле) + Ваши наработки по работе с этим файлом. Ведь хотя бы вывести список ребят на экран из этого самого файла у Вас получается?

p.s. файл и Ваш исходник лучше запаковать в архив, и архив выложить сюда, на форум. Если Вам ещё не хватает прав для этого - тогда на любой файлообменник, а сюда ссылочку на скачивание.

Удачи!
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
сортировка массива строк. daruwanov Общие вопросы C/C++ 6 21.09.2010 19:57
сортировка массива строк в Си SpLIne Общие вопросы C/C++ 2 15.04.2010 16:17
Гистограмма по числам из массива sokla Помощь студентам 1 06.01.2010 12:15
Сортировка по числам... ZuBy Общие вопросы Delphi 8 08.09.2009 07:08
Сортировка массива строк StanPBH Помощь студентам 9 24.04.2007 00:34