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

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

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

 
 Ответить  Открыть новую тему 
> массив. поиск. сортировка
лоен
сообщение 22.12.2007 22:28
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 23
Пол: Мужской

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


если нет равных элементов, то вывести массив по убыванию последней цифры.
вообще бред какой-то творю
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
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 22.12.2007 22:35
Сообщение #2


Гость






Побочные эффекты от некорректного использования глобальных переменных... У тебя I в цикле ввода и I в процедуре Poisk - одна переменная. И ведет она себя поэтому непредсказуемо... Объяви локальную переменную I в процедуре, и почти все встанет на свои места (почти - потому, что для того, чтобы определить, не вводился ли уже раньше тот элемент, который был введен только что, достаточно ОДНОГО цикла...)
 К началу страницы 
+ Ответить 
лоен
сообщение 22.12.2007 22:46
Сообщение #3


Новичок
*

Группа: Пользователи
Сообщений: 23
Пол: Мужской

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


спасибо.
исправил переменную. но есть еще ошибки, я так подозреваю.
попробую в один цикл.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
лоен
сообщение 22.12.2007 23:09
Сообщение #4


Новичок
*

Группа: Пользователи
Сообщений: 23
Пол: Мужской

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


удалил Y. больше ничего не могу найти T_T
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 22.12.2007 23:17
Сообщение #5


Гость






Покажи, что у тебя есть на данный момент...
 К началу страницы 
+ Ответить 
лоен
сообщение 23.12.2007 0:05
Сообщение #6


Новичок
*

Группа: Пользователи
Сообщений: 23
Пол: Мужской

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


почти то же самое.
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
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
лоен
сообщение 23.12.2007 13:23
Сообщение #7


Новичок
*

Группа: Пользователи
Сообщений: 23
Пол: Мужской

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


еще предложения есть?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 23.12.2007 13:45
Сообщение #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.

Вот так вот...
 К началу страницы 
+ Ответить 
лоен
сообщение 23.12.2007 14:12
Сообщение #9


Новичок
*

Группа: Пользователи
Сообщений: 23
Пол: Мужской

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


все так просто и понятно
огромное спасибо)

Добавлено через 4 мин.
все равно не работает х_х
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 23.12.2007 14:30
Сообщение #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-а... В чем проблема вообще? dry.gif
 К началу страницы 
+ Ответить 
лоен
сообщение 23.12.2007 14:37
Сообщение #11


Новичок
*

Группа: Пользователи
Сообщений: 23
Пол: Мужской

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


оп, извиняюсь)
ну не заметил, бывает)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 

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