Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Pascal. Help!  (Прочитано 16206 раз)
0 Пользователей и 1 Гость смотрят эту тему.
MOPO3
Ай да дэдушка! Вах...
Команда клуба

lt
Offline Offline
Пол: Мужской
Холадна аднака!


WWW
« : 13-04-2005 12:06 » 

Форумчане! Поможите пожалуйста с Паскалем. 100 лет на нём не писал и нет времени сейчас совсем писать. А тут такая штука, что дружку срочно понадобилась небольшая програмулинка. Ничего сложного нет, думаю у кого-нибудь вполне могла заваляться уже готовая Улыбаюсь

Задание :
Есть текстовый файлик вида :
продукт;цена
продукт;цена
продукт;цена

Надо в програмулинке открыть этот файл. Считать его и вывести на экран отсортированые списки типа : начиная с наименьшей цены и начиная с наибольшей цены. Причём для каждой сортировки надо написать процедуру(наверно потому что именно их они сейчас и проходят Улыбаюсь ).

В общем народ поможите если кто имеет такое уже.
Записан

MCP, MCAD, MCTS:Win, MCTS:Web
Sla
Команда клуба

ua
Online Online
Пол: Мужской

WWW
« Ответ #1 : 13-04-2005 13:14 » 

Ха
это точно, что проходят
http://pascal.dax.ru/files/alar/sort.txt
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
MOPO3
Ай да дэдушка! Вах...
Команда клуба

lt
Offline Offline
Пол: Мужской
Холадна аднака!


WWW
« Ответ #2 : 13-04-2005 13:20 » 

Sla, это не совсем то что нужно Жаль К сожалению нет времени это читать и реализовывать Жаль Но всё равно спасибо.
Записан

MCP, MCAD, MCTS:Win, MCTS:Web
Sla
Команда клуба

ua
Online Online
Пол: Мужской

WWW
« Ответ #3 : 13-04-2005 13:44 » 

 Приводимая ниже функция используется для вставки адресов почтовых корреспонденций в порядке возрастания фамилий /поле "name"/. В качестве результата функции выдается первый элемент списка. Входными аргументами этой функции являются указатели на начало и конец списка.
добавление элементов в список с одной связью с сохранением
упорядоченности
Код:
function SLS_Store(info, start: AddrPointer;var last: AddrPointer): AddrPointer;
var old, top: AddrPointer;
done: boolean;
begin
  top := start;
  old := nil;
  done := FALSE;
  if start=nil then
   begin (*первый элемент списка*)
      info^.next:=nil;
      last:=info;
      SLS_Store:=info;
   end
   else begin
     while (start<>nil) and (not done) do begin
         if start^.name < info^.name then
           begin
              old:=start;
              start:=start^.next;
           end
          else
          begin (*вставка в середину*)
            if old<>nil then
              begin
                 old^.next:=info;
                 info^.next:=start;
                 SLS_Store:=top; (*сохранить начало*)
                 done:=TRUE;
             end
           else
             begin
               info^.next:=start; (*новый первый элемент*)
               SLS_Store:=info;
               done:=TRUE;
            end;
        end;
     end; (*while*)
    if not done then
     begin
       last^.next:=info; (*вставка в конец*)
       info^.next:=nil;
       last:=info;
       SLS_Store:=top;
    end;
  end;
 end;
Идея такова,
при считывании из файла, сразу же сортировка списка
И когда список уже отсортирован, то бегать по списку, можно снизу вверх, сверху вниз
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
MOPO3
Ай да дэдушка! Вах...
Команда клуба

lt
Offline Offline
Пол: Мужской
Холадна аднака!


WWW
« Ответ #4 : 14-04-2005 06:44 » 

Как отсортировать массив стрингов (реально там только числа вида : 47,5 или 12,1) по возрастающей ?
Записан

MCP, MCAD, MCTS:Win, MCTS:Web
Alf
Гость
« Ответ #5 : 14-04-2005 07:02 » 

Как отсортировать массив стрингов (реально там только числа вида : 47,5 или 12,1) по возрастающей ?

А сортировка нужна текстовая или по значению числа? Если по значению, не мешало бы сначала сделать преобразование, потому как при текстовой сортировке, например, 11 меньше, чем 4.
Записан
MOPO3
Ай да дэдушка! Вах...
Команда клуба

lt
Offline Offline
Пол: Мужской
Холадна аднака!


WWW
« Ответ #6 : 14-04-2005 07:35 » 

Уже сделал всё Улыбаюсь Спасибо всем
Записан

MCP, MCAD, MCTS:Win, MCTS:Web
MOPO3
Ай да дэдушка! Вах...
Команда клуба

lt
Offline Offline
Пол: Мужской
Холадна аднака!


WWW
« Ответ #7 : 14-04-2005 09:10 » 

Вот если кому интересно Улыбаюсь Код конечно не супер Улыбаюсь Быстро надо было, я и не старался Улыбаюсь
Код:
uses Crt;
const
      arrStrN = 40;
type
    str_arr = array [1..arrStrN] of string;
var
   j,jj,jjj, minc : integer;
   dt, dt2 : str_arr;

function explode(sep,s:string;var a:str_arr):integer;
{ Разбить строку s на кусочки подстрокой sep и записать результат
  в строковый массив str_arr. Сама функция вернет число кусочков
  Например:
    explode('mp','This is an simple example',a)
      вернет число 3, и строки в массиве a:
      a[1]='This is an si'; a[2]='le exa'; a[3]='le';
    explode(' ','This is an simple example',a) - вернет 5 и отдельные
      слова в массиве a 'This','is','an','simple','example' }
var
   L:byte absolute s;
   i,n,k,d:byte;
begin
     n:=0;
     for i:=1 to arrStrN do
         a[i]:='';
     k:=Pos(sep,s);
     d:=length(sep)-1;
     while (L*k>0) do
           begin
                inc(n);
                a[n]:=copy(s,1,k-1);
                delete(s,1,k+d);
                k:=Pos(sep,s);
           end;
     inc(n);
     a[n]:=s;
     explode:=n;
end;

Procedure OpenReadSortFile;
var
   f:text;
   name:string;
   c,q,w, mincount, maxcount:string;
   sa:str_arr;
   ll:integer;
begin
  writeln('Программа начала работу. Пробуем открыть файл');
  writeln('**************************************************');
  name := 'C:\PROGRA~1\TP\data.txt';
  assign(f, name);
  {$I-} { - отключим стандартную проверку ошибок ввода/вывода}
  reset(f); {попробуем открыть файл}
  {$I+}
  if ioresult=0 then
        begin
                writeln('Всё в порядке. Файл нашёлся и открылся нормально');
                writeln('**************************************************');
                writeln('Считываем данные из файла и выводим на экран');
                writeln('**************************************************');
                ll := 1;
                while not seekeof(f) do
                        begin
                                read(f,c);
                                explode(' ', c, sa);
                                writeln(c);
                                dt[ll] := sa[2];
                                dt2[ll] := sa[1];
                                ll := ll+ll;
                        end;
                close(f);

        end
  else writeln('Файл с именем ',name,' не найден. Попробуйте другое имя');

  for j:= 1 to arrStrN-1 do
      for jj:=j+1 to arrStrN do
          if dt[j] > dt[jj] then begin
             q := dt[j];
             w := dt2[j];
             dt[j] := dt[jj];
             dt2[j] := dt2[jj];
             dt[jj] := q;
             dt2[jj] := w;
          end;
  writeln('**************************************************');
  writeln('Выводим отсортированые по возрастанию цены данные');
  writeln('**************************************************');
  minc := 1;
  for jjj := 1 to arrStrN do
      begin
           if dt[jjj] <> '' then
              begin
                 if minc = 1 then
                    begin
                       mincount := dt[jjj];
                       minc := minc + minc;
                    end;
                 writeln(dt2[jjj],' ', dt[jjj]);
                 maxcount := dt[jjj];
              end
      end;
  writeln('**************************************************');
  writeln('Наименьшая цена : ', mincount);
  writeln('Наибольшая цена : ', maxcount);

end;

begin
        ClrScr;
        OpenReadSortFile;
        writeln('**************************************************');
        writeln('Программа закончила работу. Нажмите "ENTER" для завершения...');
        readln;
end.

И сам текстовый файл вида :
Код:
product1 18,78
product2 16
product3 78,45
product4 25,7
product5 18,79
product6 18,05
« Последнее редактирование: 03-12-2007 19:04 от Алексей1153++ » Записан

MCP, MCAD, MCTS:Win, MCTS:Web
MOPO3
Ай да дэдушка! Вах...
Команда клуба

lt
Offline Offline
Пол: Мужской
Холадна аднака!


WWW
« Ответ #8 : 14-04-2005 09:15 » 

потому как при текстовой сортировке, например, 11 меньше, чем 4.

Мдас Жаль  Вот это уже проблема Жаль

Может кто подскажет как это сделать ? Желательно в виде функции.
« Последнее редактирование: 14-04-2005 09:47 от MOPO3 » Записан

MCP, MCAD, MCTS:Win, MCTS:Web
Alf
Гость
« Ответ #9 : 14-04-2005 10:07 » 

Там у нас в библиотеке есть книжка Вирта "Алгоритмы и структуры данных", в ней есть готовые рабочие программы и сортировки, и преобразования текста в число.
Записан
PooH
Глобальный модератор

ru
Offline Offline
Пол: Мужской
... и можно без хлеба!


« Ответ #10 : 14-04-2005 10:24 » 

Вместо " dt[ll] := sa[2]" юзай Val( sa[2],dt[ll],dummy_code)
Записан

Удачного всем кодинга! -=x[PooH]x=-
MOPO3
Ай да дэдушка! Вах...
Команда клуба

lt
Offline Offline
Пол: Мужской
Холадна аднака!


WWW
« Ответ #11 : 14-04-2005 10:45 » 

Вместо " dt[ll] := sa[2]" юзай Val( sa[2],dt[ll],dummy_code)
Error in expression!
Записан

MCP, MCAD, MCTS:Win, MCTS:Web
PooH
Глобальный модератор

ru
Offline Offline
Пол: Мужской
... и можно без хлеба!


« Ответ #12 : 14-04-2005 11:40 » 

на Паскакале не писал лет 7 наверное, мож чё подзабыл... dt должен быть array [1..N] of real;  в dummy_code вроде возвращается код ошибки...

VAL
Syntax: VAL(St, Num, Error_code)

Purpose: to convert a string value which is in the form of a valid numeric quantity to the numeric value it represents. If the conversion can be made without error, the value is placed in Num (and the conversion is controlled by the declared numeric type of Num) and Error_code = 0. If an error occurs, the value of Num is unchanged; Error_code > 0 and points to the first position in St where a conversion error occurred. Examples:


     Var
       Num_str: String[20];
       R_Num: Real;
       I_num, Error: Integer;

     Num_str := '23.45';
     Val(Num_str, R_Num, Error); {R_Num = 23.45, Error = 0}
     Val(Num_str, I_Num, Error); {Error = 3; R_Num stays 23.45 }
     Num_str := '256,78';
     Val(Num_str, R_Num, Error); {R_Num = 23.45, Error = 4}
     Num_str := '23456';
     Val(Num_str, I_Num, Error); {I_Num = 23456, Error = 0}
     Val(Num_str, R_Num, Error); {R_Num = 23456.0, Error = 0}
отсюда http://math.uww.edu/~harrisb/courses/cs171/strings.html

скорее всего запятая в твоей стоимости не пройдет придется заменять
« Последнее редактирование: 20-12-2007 21:08 от Алексей1153++ » Записан

Удачного всем кодинга! -=x[PooH]x=-
MOPO3
Ай да дэдушка! Вах...
Команда клуба

lt
Offline Offline
Пол: Мужской
Холадна аднака!


WWW
« Ответ #13 : 14-04-2005 12:21 » 

Сорри, моя ошибка была Улыбаюсь
Записан

MCP, MCAD, MCTS:Win, MCTS:Web
MOPO3
Ай да дэдушка! Вах...
Команда клуба

lt
Offline Offline
Пол: Мужской
Холадна аднака!


WWW
« Ответ #14 : 15-04-2005 12:11 » new

Эх! Сдал сегодня дружок эту програмулинку Улыбаюсь Получил 10 баллов! (ну по вашему 5 наверное с плюсом)
Спасибо вам ребята за помощь!
Записан

MCP, MCAD, MCTS:Win, MCTS:Web
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines