Помогите с корректировкой

  • Автор темы Alerq
  • Дата начала
A

Alerq

#1
Текст проги
Код:
PROGRAM p1;
uses crt;
var
A:array['A'..'Z'] OF INTEGER;
C,I,D:CHAR;
Z:INTEGER;
BEGIN
RANDOMIZE;
CLRSCR;
REPEAT
C:=READKEY;
IF C IN ['A'..'Z'] THEN
BEGIN
WRITE(С);
A[C]:=A[C]+1;
END;
UNTIL (C=#13);
WRITELN;
FOR I:='A' TO 'Z' DO
BEGIN
Z:=RANDOM(15)+1;
TEXTCOLOR(Z);
FOR I:='A' TO 'Z' DO
BEGIN
IF A[ORD(I)+1]>A[ORD(I)] THEN
BEGIN
D:=A[I];
A[I]:=A[I+1];
A[I+1]:=D;
END;
END;
WRITELN('a[',I,']=',A[I]);
END;
READLN;
END.
Должна считывать набранные с клавы буквы считать их и выводить результате в порядке убывания, но выбивает ошибку в цикле сортировки. Помогите исправить пожалуйста.
 

hosm

* so what *
18.05.2009
2 442
6
#2
зачем 2й цикл по i внутри 1-го?
IF A[ORD(I)+1]>A[ORD(I)] THEN
BEGIN
D:=A;
A:=A[I+1];
A[I+1]:=D;
END;

с индексами что-то напутали в иф и смене значений? ORD лишнее?
PS: Если массив до 'Z' и вы берете последующий элемент, то цикл надо не до 'Z', а до предыдущего.
Если надо получить символ, то что-то типа Chr(Ord(i) + 1).
Но вообще-то Succ, Pred вроде работали с перечислимыми типами - так будет красивей:
Код:
FOR I:='A' TO Pred('Z') DO
IF A[Succ(I)]>A[I] THEN
и т.д. аналогично поправить дальше...