![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() ![]() |
![]() |
лоен |
![]()
Сообщение
#1
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 23 Пол: Мужской Репутация: ![]() ![]() ![]() |
если нет равных элементов, то вывести массив по убыванию последней цифры.
вообще бред какой-то творю Const
Nmax=10000;
Var
A:Array[1..Nmax] of Integer;
flag:Byte;
i,j,n:integer;
procedure Sort(Var x,y:integer);
Var
tmp:integer;
Begin
tmp:=x;
x:=y;
y:=tmp;
end;
procedure Poisk(x:integer; flag:Byte);
Var
k,y:Byte;
Begin
flag:=1;
y:=x mod 10;
for I := 1 to n-1 do begin
for k := i+1 to n do begin
If a[i]=a[k] Then begin
flag:=0;
Break;
end;
end;
end;
end;
Begin
Writeln('Vvedite dliny posledovatelnosti(n<=10000)');
Read(n);
Writeln('Vvedite posledovatelnost');
flag:=0;
For i:=1 to n Do
Begin
Read(A[i]);
If flag=0 Then
Poisk(A[i],flag);
end;
If flag=1 Then Begin
For i:=1 to n-1 Do Begin
For j:=i+1 to n Do
If (A[i]mod 10)<=(A[j]mod 10) Then
Sort(A[i],A[j]);
end;
end;
For i:=1 to n Do WriteLn(A[i]);
Readln;
Readln;
end.
Сообщение отредактировано: лоен - 22.12.2007 22:33 |
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
Побочные эффекты от некорректного использования глобальных переменных... У тебя I в цикле ввода и I в процедуре Poisk - одна переменная. И ведет она себя поэтому непредсказуемо... Объяви локальную переменную I в процедуре, и почти все встанет на свои места (почти - потому, что для того, чтобы определить, не вводился ли уже раньше тот элемент, который был введен только что, достаточно ОДНОГО цикла...)
|
лоен |
![]()
Сообщение
#3
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 23 Пол: Мужской Репутация: ![]() ![]() ![]() |
спасибо.
исправил переменную. но есть еще ошибки, я так подозреваю. попробую в один цикл. |
лоен |
![]()
Сообщение
#4
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 23 Пол: Мужской Репутация: ![]() ![]() ![]() |
удалил Y. больше ничего не могу найти T_T
|
volvo |
![]()
Сообщение
#5
|
Гость ![]() |
Покажи, что у тебя есть на данный момент...
|
лоен |
![]()
Сообщение
#6
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 23 Пол: Мужской Репутация: ![]() ![]() ![]() |
почти то же самое.
Const
Nmax=10000;
Var
A:Array[1..Nmax] of Integer;
flag:Byte;
i,j,n:integer;
procedure Sort(Var x,y:integer);
Var
tmp:integer;
Begin
tmp:=x;
x:=y;
y:=tmp;
end;
procedure Poisk(x:integer; flag:Byte);
Var
i,k:Byte;
Begin
flag:=1;
for I := 1 to n-1 do begin
for k := i+1 to n do begin
If a[i]=a[k] Then begin
flag:=0;
Break;
end;
end;
end;
end;
Begin
Writeln('Vvedite dliny posledovatelnosti(n<=10000)');
Read(n);
Writeln('Vvedite posledovatelnost');
flag:=0;
For i:=1 to n Do
Begin
Read(A[i]);
If flag=0 Then
Poisk(A[i],flag);
end;
If flag=1 Then Begin
For i:=1 to n-1 Do Begin
For j:=i+1 to n Do
If (A[i]mod 10)<=(A[j]mod 10) Then
Sort(A[i],A[j]);
end;
end;
For i:=1 to n Do WriteLn(A[i]);
Readln;
Readln;
end.
Сообщение отредактировано: лоен - 23.12.2007 12:29 |
лоен |
![]()
Сообщение
#7
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 23 Пол: Мужской Репутация: ![]() ![]() ![]() |
еще предложения есть?
|
volvo |
![]()
Сообщение
#8
|
Гость ![]() |
Смотри:
Const
Nmax=10000;
Var
A:Array[1..Nmax] of Integer;
procedure Sort(Var x,y:integer);
Var
tmp:integer;
Begin
tmp:=x;
x:=y;
y:=tmp;
end;
{
flag должен быть описан как VAR параметр, кроме этого
передаем номер вводимого в данный момент элемента,
чтоб сравнить его со всеми предыдущими
}
procedure Poisk(x, size: integer; var flag: Byte);
var
i: integer;
Begin
flag := 1; { 1 если элемент уже встречался ранее }
for i := 1 to size - 1 do
if a[i] = X then exit;
flag := 0; { 0 если этого элемента еще не было }
end;
{ Переменные описаны здесь, потому что выше они тебе не нужны... }
var
flag:Byte;
i, j, n: integer;
Begin
Writeln('Vvedite dliny posledovatelnosti(n<=10000)');
Readln(n);
Writeln('Vvedite posledovatelnost');
flag:=0;
For i:=1 to n Do
Begin
Readln(A[i]);
If flag=0 Then
Poisk(A[i], i, flag);
end;
If flag=1 Then Begin
For i:=1 to n-1 Do Begin
For j:=i+1 to n Do
If (A[i]mod 10)<=(A[j]mod 10) Then
Sort(A[i],A[j]);
end;
end;
For i:=1 to n Do WriteLn(A[i]);
Readln;
end.
Вот так вот... |
лоен |
![]()
Сообщение
#9
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 23 Пол: Мужской Репутация: ![]() ![]() ![]() |
все так просто и понятно
огромное спасибо) Добавлено через 4 мин. все равно не работает х_х |
volvo |
![]()
Сообщение
#10
|
Гость ![]() |
Цитата все равно не работает х_х Не принято! Подпись мою внимательно читал? Программа проверена, вот лог работы:Цитата Vvedite dliny posledovatelnosti(n<=10000) Что не устроило? Как ДОЛЖНО БЫТЬ на этих исходных данных? Сказать "все равно не работает" - слишком просто, тебе не кажется?10 Vvedite posledovatelnost 1 20 54 45 45 46 84 21 54 84 46 45 45 84 54 84 54 21 1 20 Добавлено через 2 мин. Или поменять If flag=1 Then Begin { <--- здесь }
For i:=1 to n-1 Do Begin
For j:=i+1 to n Do
If (A[i]mod 10)<=(A[j]mod 10) Then
Sort(A[i],A[j]);
end;
end;
единицу на 0 - это ОЧЕНЬ сложно? Ты же знаешь свое задание, я написал, что значит ноль, а что значит единица для Flag-а... В чем проблема вообще? ![]() |
лоен |
![]()
Сообщение
#11
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 23 Пол: Мужской Репутация: ![]() ![]() ![]() |
оп, извиняюсь)
ну не заметил, бывает) |
![]() ![]() |
![]() |
Текстовая версия | 26.07.2025 18:05 |