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

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

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

 
 Ответить  Открыть новую тему 
> СРОЧНО! Сортировка массива строковых данных., Не понимаю почему не происходит ...
сообщение
Сообщение #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.

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


Гость






Да входные данные вида
door 1200
window 800
radioset 300
okno 340
computer 4000
mouse 500
keyboard 129
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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;

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


Гость






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


Гость






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


Гость






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

Переводи строку в число (Val) и сравнивай...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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.

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


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

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

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


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


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

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

 





- Текстовая версия 2.05.2024 9:24
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name