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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.09.2012, 04:10   #1
pascaluser
Новичок
Джуниор
 
Регистрация: 22.09.2012
Сообщений: 2
Смех Любопытная сортировка в файле

Приветствую,

есть задачка, любопытна она мне
в инпут файле есть некий список примерно таков:

Код:
Ручка            Красная
Карандаш    Зелйный
Окно                Белое
Ножик   Тёмно серый
Телефон       Чёрный
Окно             Красное
,,, итд (может повторяться сколько угодно раз)
задачей является создать новый файл, в котором бы строки, предварительно отсортировавшись, шли с верху в низ в порядке (красный-чёрный-тёмно серый-белый-зелёный)

как делаю:
объявил двумерный массив, размерностью символов в строке/кол-во строк

прочитал файл, переписал в новый, менял символы местами, корче всё что в голову приходило делал, но а вот как собственно проводить сартировку так и не догнал ((

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

воот,,

буду благодарен за направление в нужное русло


сейчас кода под рукой нет, сижу на убунте )) но там и особо ничего нет такого, где у меня загвоздка,,, всё что уже сделал описал выше, вопрос собственно только как проводить сравнение.
pascaluser вне форума Ответить с цитированием
Старый 22.09.2012, 08:04   #2
Шалоник Галина Вас
Новичок
Джуниор
 
Регистрация: 20.09.2012
Сообщений: 5
По умолчанию

Цитата:
Сообщение от pascaluser Посмотреть сообщение
Приветствую,

есть задачка, любопытна она мне
в инпут файле есть некий список примерно таков:

Код:
Ручка            Красная
Карандаш    Зелйный
Окно                Белое
Ножик   Тёмно серый
Телефон       Чёрный
Окно             Красное
,,, итд (может повторяться сколько угодно раз)
задачей является создать новый файл, в котором бы строки, предварительно отсортировавшись, шли с верху в низ в порядке (красный-чёрный-тёмно серый-белый-зелёный)

как делаю:
объявил двумерный массив, размерностью символов в строке/кол-во строк

прочитал файл, переписал в новый, менял символы местами, корче всё что в голову приходило делал, но а вот как собственно проводить сартировку так и не догнал ((

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

воот,,

буду благодарен за направление в нужное русло


сейчас кода под рукой нет, сижу на убунте )) но там и особо ничего нет такого, где у меня загвоздка,,, всё что уже сделал описал выше, вопрос собственно только как проводить сравнение.
Если у тебя все строки в новом массиве. Что сли создать опорный массив из корней цветов для проверки (ведь цветов всего 6-?, тогда 1[красн] 2[чёрн] 3[тёмно сер] 4[бел] 5[зелён] или вообще строку с вариантами 1[красный, красная, красное]) И прогнать проверку по каждому цвету на совпадение. Потребуется процедура сравнения части строки с цветом.
Шалоник Галина Вас вне форума Ответить с цитированием
Старый 22.09.2012, 10:22   #3
whatever
a.k.a. Skull
Форумчанин
 
Регистрация: 17.11.2009
Сообщений: 963
По умолчанию

Цитата:
Сообщение от pascaluser Посмотреть сообщение
задачей является создать новый файл, в котором бы строки, предварительно отсортировавшись, шли с верху в низ в порядке (красный-чёрный-тёмно серый-белый-зелёный)
Такого рода выражения я привык понимать буквально. Следовательно всего у нас есть 5 различных цветов, ни больше, ни меньше.
Я бы создал запись:
Код:
Tsomething=record
  name:string;
  clr:string;
end;
Дальше как обыно, делаем массив записей.
Потом читаем файл T посимвольно (опятьже, считаю, что файл txt):
Код:
reset(T);
  read(t,ch);//ch:char;
//читаем "имя" предмета
  while ch<>' ' do
  begin
    m[i].name:=m[i].name+ch;//m:array of Tsomething;
    read(T,ch);
  end;
//пробегаем ненужные пробелы
  while ch=' ' do
    read(T,ch);
//из цикла выходим, когда ch<>' ', а значит у наc есть первая буква цвета
//определяем цвет
  case ch of
    'к': m[i].clr:='красный';
    'ч': m[i].clr:='черный';
    'т': m[i].clr:='темно серый';
    'б': m[i].clr:='белый';
    'з': m[i].clr:='зеленый'; 
  end;
  readln(t);
И крутим все это в цикле.

Потом сортируем массив записей по полю clr и пишем в новый файл.

По поводу сортировки:
Код:
function clrtoint(s:string):integer;
begin
  case s[1] of
    'к': clrtoint:=1;
    'ч': clrtoint:=2;
    'т': clrtoint:=3;
    'б': clrtoint:=4;
    'з': clrtoint:=5;
  end;
end;
функция ставит в соответствие каждому цвету номер, вот по ним и соритруй.

P.S. писал сразу на форум, возможны огрехи в синтаксисе.
Все тривиальное просто

Последний раз редактировалось whatever; 22.09.2012 в 10:32.
whatever вне форума Ответить с цитированием
Старый 22.09.2012, 12:55   #4
TinMan
Форумчанин
 
Аватар для TinMan
 
Регистрация: 05.09.2011
Сообщений: 869
По умолчанию

whatever, Галина Вас была права все же в том, что распознавание надо вести по корням. Буквальное (в полном смысле слова)) восприятие тут все же может подвести: красный и коричневый так не различишь. Поэтому я бы объединил сказанное тобой и ей. Но только понятие корня тут, думаю, можно упростить (по сравнению с правилами РЯ), и принять за корень, скажем, три первые буквы и префикс (светло-, темно-, нежно-...), если он есть. Распознавание, конечно, усложнится, но все же не слишком.
Предпочитаю на "ты".
TinMan вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сортировка в файле (C) Dragonqc Помощь студентам 0 01.03.2012 02:37
Сортировка в файле Надежда1286 Помощь студентам 3 27.11.2011 16:26
сортировка данных в файле doomer3 Паскаль, Turbo Pascal, PascalABC.NET 9 18.04.2011 00:49
Сортировка данных в файле. Animex Помощь студентам 3 10.12.2010 08:21
Сортировка в текстовом файле Isthmus Паскаль, Turbo Pascal, PascalABC.NET 18 01.05.2008 20:46