| 
			| 
					
						| MOPO3 
								Ай да дэдушка! Вах...Команда клуба    Offline 
								Пол:   
								Холадна аднака!
								
								
								
								
								
								   | 
								|  | «  : 13-04-2005 12:06 »  |  | 
 
 Форумчане! Поможите пожалуйста с Паскалем. 100 лет на нём не писал и нет времени сейчас совсем писать. А тут такая штука, что дружку срочно понадобилась небольшая програмулинка. Ничего сложного нет, думаю у кого-нибудь вполне могла заваляться уже готовая   Задание : Есть текстовый файлик вида : продукт;цена продукт;цена продукт;цена Надо в програмулинке открыть этот файл. Считать его и вывести на экран отсортированые списки типа : начиная с наименьшей цены и начиная с наибольшей цены. Причём для каждой сортировки надо написать процедуру(наверно потому что именно их они сейчас и проходят    ). В общем народ поможите если кто имеет такое уже. |  
						| 
								|  |  
								|  |  Записан | 
 
 MCP, MCAD, MCTS:Win, MCTS:Web |  |  | 
	| 
			| 
					
						| Sla | 
								|  | « Ответ #1 : 13-04-2005 13:14 »  |  | 
 
 |  
						| 
								|  |  
								|  |  Записан | 
 
 Мы все учились понемногу... Чему-нибудь и как-нибудь. |  |  | 
	| 
			| 
					
						| MOPO3 
								Ай да дэдушка! Вах...Команда клуба    Offline 
								Пол:   
								Холадна аднака!
								
								
								
								
								
								   | 
								|  | « Ответ #2 : 13-04-2005 13:20 »  |  | 
 
 Sla, это не совсем то что нужно    К сожалению нет времени это читать и реализовывать    Но всё равно спасибо. |  
						| 
								|  |  
								|  |  Записан | 
 
 MCP, MCAD, MCTS:Win, MCTS:Web |  |  | 
	| 
			| 
					
						| Sla | 
								|  | « Ответ #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 
								Ай да дэдушка! Вах...Команда клуба    Offline 
								Пол:   
								Холадна аднака!
								
								
								
								
								
								   | 
								|  | « Ответ #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 
								Ай да дэдушка! Вах...Команда клуба    Offline 
								Пол:   
								Холадна аднака!
								
								
								
								
								
								   | 
								|  | « Ответ #6 : 14-04-2005 07:35 »  |  | 
 
 Уже сделал всё    Спасибо всем |  
						| 
								|  |  
								|  |  Записан | 
 
 MCP, MCAD, MCTS:Win, MCTS:Web |  |  | 
	| 
			| 
					
						| MOPO3 
								Ай да дэдушка! Вах...Команда клуба    Offline 
								Пол:   
								Холадна аднака!
								
								
								
								
								
								   | 
								|  | « Ответ #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,78product2 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 
								Ай да дэдушка! Вах...Команда клуба    Offline 
								Пол:   
								Холадна аднака!
								
								
								
								
								
								   | 
								|  | « Ответ #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 
								Глобальный модератор
								
								   Offline 
								Пол:    
								... и можно без хлеба!
								
								
								
								
								
							 | 
								|  | « Ответ #10 : 14-04-2005 10:24 »  |  | 
 
 Вместо " dt[ll] := sa[2]" юзай Val( sa[2],dt[ll],dummy_code) |  
						| 
								|  |  
								|  |  Записан | 
 
 Удачного всем кодинга! -=x[PooH]x=- |  |  | 
	| 
			| 
					
						| MOPO3 
								Ай да дэдушка! Вах...Команда клуба    Offline 
								Пол:   
								Холадна аднака!
								
								
								
								
								
								   | 
								|  | « Ответ #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 
								Глобальный модератор
								
								   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 
								Ай да дэдушка! Вах...Команда клуба    Offline 
								Пол:   
								Холадна аднака!
								
								
								
								
								
								   | 
								|  | « Ответ #13 : 14-04-2005 12:21 »  |  | 
 
 Сорри, моя ошибка была   |  
						| 
								|  |  
								|  |  Записан | 
 
 MCP, MCAD, MCTS:Win, MCTS:Web |  |  | 
	| 
			| 
					
						| MOPO3 
								Ай да дэдушка! Вах...Команда клуба    Offline 
								Пол:   
								Холадна аднака!
								
								
								
								
								
								   | 
								|  | « Ответ #14 :  15-04-2005 12:11 »   |  | 
 
 Эх! Сдал сегодня дружок эту програмулинку    Получил 10 баллов! (ну по вашему 5 наверное с плюсом) Спасибо вам ребята за помощь! |  
						| 
								|  |  
								|  |  Записан | 
 
 MCP, MCAD, MCTS:Win, MCTS:Web |  |  | 
	|  |