Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.04.2013, 16:12   #1
Avast156
Новичок
Джуниор
 
Регистрация: 18.04.2013
Сообщений: 1
По умолчанию Сортировка Элементов Массива

Задача: Дан массив, состоящий из 20 рандомных 4-ёх значных чисел.
Вывести на экран сумму единиц,десятков,сотен,тысяч каждого числа, после чего все суммы рассортировать в порядке возрастания.

Половина задачи выполнена: Суммы выводятся, но не могу вывести все суммы в порядке возрастания - выводится список сумм не в нужном порядке.


Код:
program Prog;
Var
a:array[1..20] of integer;
b:array[1..20] of integer;
i,x,x1,x2,x3,x4,h,F,k,n:integer;
label M1,M2;
begin
randomize;
for i:=1 to 20 do
    begin
    M1:
    A[i]:=random(9999);
    if A[i]<1000 then goto M1;
    end;
for i:=1 to 20 do
    begin
    x:=A[i];
    x1:=x div 1000;
    x2:=(x-x1*1000) div 100;
    x3:=(x-x1*1000-x2*100) div 10;
    x4:=x-x1*1000-x2*100-x3*10;
    h:=x1+x2+x3+x4;
    b[i]:=h;
    end;
writeln('Число | Сумма единиц,десятков,сотен,тысяч');
for i:=1 to 20 do
    writeln(a[i],'  |  ',b[i]);
M2:
F:=0;
for i:=1 to n-1 do
    begin
    if b[i]>b[i+1] then
       begin
       k:=b[i];
       b[i]:=b[i+1];
       b[i+1]:=k;
       F:=1;
       end;
    end;
if F=1 then goto M2;
for i:=1 to 20 do
    write(b[i],' ');
readln;
end.

Может быть где то ошибка? Лично я не знаю в чём дело, помогите)

Последний раз редактировалось Avast156; 18.04.2013 в 16:16.
Avast156 вне форума Ответить с цитированием
Старый 18.04.2013, 16:41   #2
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Цитата:
Код:
for i:=1 to 20 do
    begin
    M1:
    A[i]:=random(9999);
    if A[i]<1000 then goto M1;
    end;
ой! GoTo? Ужасъ! Как Вы только могли написать это? Всё! В Сибирь!!

Могу предложить такой вариант (единственный недостаток - нет 0 (можно и это убрать, но будет не так красиво..))

Код:
        s := 0;
        for i := 1 to NumberOfDigits do
                s := s*10 + Random (9)+1;
Где, NumberOfDigits - константа, в Вашем случае равная 4-ем.


Смотрим дальше..
После :
Цитата:
Код:
for i:=1 to 20 do
    writeln(a[i],'  |  ',b[i]);
Пишем
Код:
SortArr (b, 20);
Что бы это работало, Вам понадобятся такие процедурки :

Код:
Код:
procedure Swap (var a, b : LongInt);

var
	t : LongInt;

begin
	t := a;
	a := b;
	b := t;
end;


procedure SortArr (var a : TArr; const n : LongInt);

var
	i, j : LongInt;

begin
	for i := 1 to n-1 do
		for j := 1 to n-i do
			if a[j] > a[j+1] then
				Swap (a[j], a[j+1]);
end;
Далее идет вывод, у Вас он сделан..


ВНИМАНИЕ!! Что бы работали процедурки Вам нужно чтобы массив был типа TArr, для этого пишем :
Код:
const
	SIZE = 20;

type
	TArr = array [1..SIZE] of Integer;
И в var'e тоже пишем a, b : TArr.

Удачи
Poma][a вне форума Ответить с цитированием
Старый 18.04.2013, 21:20   #3
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Offtop: А можно поинтересоваться, почему в названии темы каждое слово набрано с заглавной буквы?
s-andriano вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сортировка элементов массива Che Burashka Паскаль, Turbo Pascal, PascalABC.NET 4 24.12.2010 01:55
Сортировка элементов массива по убыванию nadminka Общие вопросы .NET 1 18.05.2010 23:08
сортировка элементов массива Dr@gon Помощь студентам 2 03.03.2010 19:49
Удаление, сортировка элементов массива. Vadim123456 Помощь студентам 8 14.02.2010 23:43