![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() ![]() |
![]() |
Stranger |
![]()
Сообщение
#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 |
![]()
Сообщение
#2
|
Гость ![]() |
Да входные данные вида
door 1200 window 800 radioset 300 okno 340 computer 4000 mouse 500 keyboard 129 |
volvo |
![]()
Сообщение
#3
|
Гость ![]() |
Цитата почемуто не происходит сортировка =( Потому, что "пузырек" делается в два вложенных цикла, а не в один ![]() 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 |
![]()
Сообщение
#4
|
Гость ![]() |
Угу, точно... млин совсем заработался =)
Надо хотя бы иногда спать. Пасибо. |
Stranger |
![]()
Сообщение
#5
|
Гость ![]() |
Интересно, возник такой лаг если сравнивать 1200 и 200, то 200 оказывается больше... Any ideas ?
|
volvo |
![]()
Сообщение
#6
|
Гость ![]() |
Цитата(Stranger @ 22.09.2005 18:24) возник такой лаг если сравнивать 1200 и 200, то 200 оказывается больше... Абсолютно правильно, это вовсе не лаг, это нормальный результат при сравнении строк: '1200' < '200', т.к. строки сравниваются посимвольно, и уже первая пара символов дает '1' < '2' ... Чтобы получить результат, правильный для чисел, нужно сравнивать числа... ![]() Переводи строку в число (Val) и сравнивай... |
Stranger |
![]()
Сообщение
#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 |
![]()
Сообщение
#8
|
![]() Perl. Just code it! ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 4 100 Пол: Мужской Реальное имя: Андрей Репутация: ![]() ![]() ![]() |
А ты уверен что эту задачу надо решать именно ТАК ? Мне кажется тут надо использовать записи ...
-------------------- perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
|
![]() ![]() |
![]() |
Текстовая версия | 19.09.2025 7:26 |