IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> СРОЧНО! Сортировка массива строковых данных., Не понимаю почему не происходит ...
Stranger
сообщение 21.09.2005 22:43
Сообщение #1


Гость






Доброго времени суток !
Вот друг попросил накидать программку(ака 1ую часть курсовой).
Накидал, но почемуто не происходит сортировка =(
Объясните где что не так плиз (желательно asap)
вот код

program p4;
uses strings;
var
mas:array[1..10,1..2] of string ;
c,x,y,l:integer;
input,output:text;
temp:string;
begin
assign(input,'dan.txt');
reset (input);
assign(output,'res.txt');
rewrite(output);

x:=0;
Repeat
x:=x+1;
Readln(input,temp);
c:=pos(' ',temp);
l:=length(temp);
mas[x,1]:=copy(temp,1,(c-1));
mas[x,2]:=copy(temp,c+1,(l-c));
{y:=pos('r',mas[2,x]);
delete(mas[2,x],y,3);}
until EOF(input);

for y:=1 to x do begin
if mas[y,2]>mas[y+1,2] then begin
temp:=mas[y,2];
mas[y,2]:=mas[y+1,2];
mas[y+1,2]:=temp;
temp:=mas[y,1];
mas[y,1]:=mas[y+1,1];
mas[y+1,1]:=temp;

end;
end;

for y:=1 to x do writeln(output,mas[y,1],' ',mas[y,2]);

close(input);
close(output);
readln;
end.

 К началу страницы 
+ Ответить 
Stranger
сообщение 21.09.2005 22:45
Сообщение #2


Гость






Да входные данные вида
door 1200
window 800
radioset 300
okno 340
computer 4000
mouse 500
keyboard 129
 К началу страницы 
+ Ответить 
volvo
сообщение 21.09.2005 23:19
Сообщение #3


Гость






Цитата
почемуто не происходит сортировка =(

Потому, что "пузырек" делается в два вложенных цикла, а не в один smile.gif
For i := 1 To x Do
For j := x DownTo i+1 Do
If mas[Pred(j), 2] > mas[j, 2] Then Begin
T := mas[Pred(j), 1]; mas[Pred(j), 1] := mas[j, 1]; mas[j, 1] := T;
T := mas[Pred(j), 2]; mas[Pred(j), 2] := mas[j, 2]; mas[j, 2] := T;
End

Хотя легче, наверное определить:
var
mas:array[1 .. 10] of record
s: string; num: string;
end;

и работать с записями... Будет немного проще менять их местами...
 К началу страницы 
+ Ответить 
Guest
сообщение 21.09.2005 23:39
Сообщение #4


Гость






Угу, точно... млин совсем заработался =)
Надо хотя бы иногда спать.
Пасибо.
 К началу страницы 
+ Ответить 
Stranger
сообщение 22.09.2005 18:24
Сообщение #5


Гость






Интересно, возник такой лаг если сравнивать 1200 и 200, то 200 оказывается больше... Any ideas ?
 К началу страницы 
+ Ответить 
volvo
сообщение 22.09.2005 18:51
Сообщение #6


Гость






Цитата(Stranger @ 22.09.2005 18:24)
возник такой лаг если сравнивать 1200 и 200, то 200 оказывается больше...
Абсолютно правильно, это вовсе не лаг, это нормальный результат при сравнении строк: '1200' < '200', т.к. строки сравниваются посимвольно, и уже первая пара символов дает '1' < '2' ... Чтобы получить результат, правильный для чисел, нужно сравнивать числа... smile.gif

Переводи строку в число (Val) и сравнивай...
 К началу страницы 
+ Ответить 
Stranger
сообщение 23.09.2005 0:15
Сообщение #7


Гость






Короче вот мало ли кому нить понадобится выполнить задание аналогичное данному...

Задание
Дан список вещей с указанием цены вида: НАИМЕНОВАНИЕ_ВЕЩИ ЦЕНА
25 символов (данные в одной строке отделяются друг от друга пробелами, например: Стол 2500 руб) Выбрать три самые дорогие вещи и вывести их в файл.

1.Все исходные данные вводятся из входного текстового файла.
2.В выходной текстовый файл выводится как вся введенная информация , так и полученный результат.

Код

program p4;
const
razmermas=10;
var
mas:array[1..razmermas,1..2] of string[25] ;
x,i,j,l,c1,c2:integer;
input,output:text;
temp:string;
begin
assign(input,'dan.txt');
reset (input);
assign(output,'res.txt');
rewrite(output);

x:=0;
writeln(output,'Vhodnije dannije');
Repeat
x:=x+1;
Readln(input,temp);
j:=pos(' ',temp);
i:=length(temp);
writeln(output,temp);
mas[x,1]:=copy(temp,1,(j-1));
mas[x,2]:=copy(temp,j+1,(i-j));
i:=pos(' ',mas[x,2]);
delete(mas[x,2],i,4);
until EOF(input);


For i:=1 To x Do
For j:=x DownTo i+1 Do
begin
val(mas[pred(j),2],c1,l);
val(mas[j,2],c2,l);
If c1>c2 Then Begin
Temp:=mas[Pred(j),1];
mas[Pred(j),1]:=mas[j,1];
mas[j, 1]:=Temp;
Temp:=mas[Pred(j),2];
mas[Pred(j),2]:=mas[j,2];
mas[j,2]:=Temp;
End;
end;
writeln(output);
writeln(output,'Tri samije dorogie veshi');
c1:=0;
for i:=x downto x-2 do
begin
c1:=c1+1;
writeln(output,c1,'. ',mas[i,1],' - ',mas[i,2],' rub');
end;
close(input);
close(output);

end.

 К началу страницы 
+ Ответить 
klem4
сообщение 23.09.2005 7:04
Сообщение #8


Perl. Just code it!
******

Группа: Модераторы
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

Репутация: -  44  +


А ты уверен что эту задачу надо решать именно ТАК ? Мне кажется тут надо использовать записи ...


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 28.07.2025 9:02
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"