uses crt;
label 1;
var i,k:integer;
a:array[1..20] of integer;
begin clrscr;
1:write ('vvedite chislo - '); read(k);
if (k<=8) or (k>20) then begin
write('!vvedite chislo ot 9 do 20!');
readln;
readln;
clrscr;
goto 1;
end;
for i:=1 to k do begin
write('a[',i,']='); read(a);
end;
readln;
readln;
end.
Работа с массивом чисел
Вот само задание:
Число m, сотставлено из цифр числа n так , что сначала идут четные цифры числа n , а затем нечетные ( в том же порядке, что и в числе n )
Код:
Код:
const
m = 12345; {число, которое нужно преобразовать}
var
i, n: integer;
rez: real;
begin
rez:=0; i:=0;
n:=m;
while n>0 do {отбираем нечётные числа}
begin
if Odd(n mod 10) then
begin
rez:= rez + (n mod 10)*exp(i*ln(10));
inc(i);
end;
n:= n div 10;
end;
n:=m;
while n>0 do {отбираем чётные числа}
begin
if not Odd(n mod 10) then
begin
rez:= rez + (n mod 10)*exp(i*ln(10));
inc(i);
end;
n:= n div 10;
end;
writeln(rez:0:0);
readln;
end.
m = 12345; {число, которое нужно преобразовать}
var
i, n: integer;
rez: real;
begin
rez:=0; i:=0;
n:=m;
while n>0 do {отбираем нечётные числа}
begin
if Odd(n mod 10) then
begin
rez:= rez + (n mod 10)*exp(i*ln(10));
inc(i);
end;
n:= n div 10;
end;
n:=m;
while n>0 do {отбираем чётные числа}
begin
if not Odd(n mod 10) then
begin
rez:= rez + (n mod 10)*exp(i*ln(10));
inc(i);
end;
n:= n div 10;
end;
writeln(rez:0:0);
readln;
end.
Обращаю внимание на то, что результат формируется задом-наперёд
Если будут нужны подробные комментарии - обращайтесь сюда же.
Код:
const
mn = ['1', '3', '5', '7', '9']; {множество нечётных цифр}
var
m: string;
n: array of char; {динамический массив, в котором будет храниться результат}
i,r: integer; {i - индекс элемента массива, r - размерность массива}
begin
readln(m);
r:=1;
{обращаю внимание на то, что индекс первого элемента в динамическом массиве равен нулю!}
{далее всё должно быть интуитивно понятно}
for i:=1 to length(m) do {бежим по строке}
if m in mn then {если элемент строки - состоит в множестве нечётных цифр, то добавим сий элемент в массив}
begin
SetLength(n,r); {размер массива равен r}
n[r-1]:= m; {присваивание}
inc(r); {r увеличиваем на единичку}
end;
for i:=1 to length(m) do {то же самое для чётных чисел}
if not (m in mn) then
begin
SetLength(n,r);
n[r-1]:= m;
inc(r);
end;
for i:=0 to r-1 do {вывод на экран элементов массива}
write(n);
readln;
end.
mn = ['1', '3', '5', '7', '9']; {множество нечётных цифр}
var
m: string;
n: array of char; {динамический массив, в котором будет храниться результат}
i,r: integer; {i - индекс элемента массива, r - размерность массива}
begin
readln(m);
r:=1;
{обращаю внимание на то, что индекс первого элемента в динамическом массиве равен нулю!}
{далее всё должно быть интуитивно понятно}
for i:=1 to length(m) do {бежим по строке}
if m in mn then {если элемент строки - состоит в множестве нечётных цифр, то добавим сий элемент в массив}
begin
SetLength(n,r); {размер массива равен r}
n[r-1]:= m; {присваивание}
inc(r); {r увеличиваем на единичку}
end;
for i:=1 to length(m) do {то же самое для чётных чисел}
if not (m in mn) then
begin
SetLength(n,r);
n[r-1]:= m;
inc(r);
end;
for i:=0 to r-1 do {вывод на экран элементов массива}
write(n);
readln;
end.
> [COLOR="Blue"]if (k<=8) or (k>20) then begin[/COLOR]
И ещё. Запомните: метки - это зло! Сделайте лучше вот так:
Код:
Repeat
write('Please, type value `k` ');
readln(k);
Until (k<=8) or (k>20);
write('Please, type value `k` ');
readln(k);
Until (k<=8) or (k>20);
ЗдЕсЬ.
Удачи!
Немного подробнее о массивах (включая динамические), можно почитать
Удачи!
Благадарю за помощь)