Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Помогите с задачей с циклом For i:=N downto 1 do

Автор: Lutan 16.01.2008 23:00

Элементы заданного массива B(N) переписать в новый массив A(N) в обратном порядке

Автор: klem4 16.01.2008 23:07

Твоих попыток что-то не видно ... с чем проблемы ? С вводом массива ? Алгоритм практически весь в заголовке твоей темы написан.

http://forum.pascal.net.ru/index.php?showtopic=2694

Автор: Гость 16.01.2008 23:13

ну т.е.
сначала раписал массив как B(n) как For i:=1 to N do
потом A(n) как For i:=N downto 1 do B[i]:=A[N-i+1]
но что-т не получается задача)

Автор: klem4 16.01.2008 23:20

вводишь массив A, а потом

for i := n downto 1 do
b[i] := a[n - i + 1];


все верно ... показывай весь код

Автор: volvo 16.01.2008 23:32

Ничего не понял... Что вводится, а что надо заполнить? Вводится B, заполняется A? Тогда

for i := n downto 1 do
a[i] := b[n - i + 1];


Автор: Гость 16.01.2008 23:33


type mas=array [1..20] of real;
var
A, B: mas;
i,N: integer;
begin
write('Vvedite N');
readln(N);
for i:=1 to N do begin
Write('A[',i,']=');
readln(A[i]);
end;
for i:=N to 1 do B[i]:=A[N-i+1];
writeln;
writeln(A[i],'');
readln
end.


Автор: Гость 17.01.2008 3:41

посидел над программкой.
вот что в итоге получилось:


var
I, N: integer;
A,B:array [1..50] of integer;
begin
Write('Vvedite kol-vo 4isel v massive, N=');
Readln(N);
for i:=1 to n do
begin
write('Vvedite A[',i,']=');
readln(A[i]);
end;
for i:=n downto 1 do A[N-i+1]:=B[i];
write(B[i],' ');
readln;
end.

но ответ выводит не тот, который нужен. выводит всего 0, а не массив в обратном порядке. если же рассматривать задачу с одним массивом, то всё отлично работает:
var
I, N: integer;
A:array [1..50] of integer;
begin
Write('Vvedite kol-vo 4isel v massive, N=');
Readln(N);
for i:=1 to n do
begin
write('Vvedite A[',i,']=');
readln(A[i]);
end;
for i:=n downto 1 do
write(A[i],' ');
readln;
end.



кто-нибудь может помочь?)) плз)

Автор: Айра 17.01.2008 4:21

Цитата
но ответ выводит не тот, который нужен. выводит всего 0

Естесственно, смотри:

readln(A[i]); //ты заполняешь массив А, хотя по заданию надо В..
end;
for i:=n downto 1 do A[N-i+1]:=B[i]; //а тут ты ему же присваиваешь значения из массива В,
//который пока что состоит из нулей
write(B[i],' '); //и выводишь ты в не цикла (begin\end вроде еще не отменяли)))


Должно быть так:
var
i, n: integer;
A,B:array [1..50] of integer;
begin
Write('Vvedite kol-vo 4isel v massive, N=');
Readln(n);
for i:=1 to n do
begin
write('Vvedite B[',i,']=');
readln(B[i]); //заполняешь массив _В_
end;
for i:=n downto 1 do
begin
A[n-i+1]:=B[i];
write(A[n-i+1],' '); //и выводить нужно с таким индексом, иначе, при A[i] ты выводишь
// элементы, которые еще не заполнены, то бишь нули
end;
readln;
end.

Автор: Гость 17.01.2008 14:51

оо)
огромное спасибо)

Автор: Гость 27.01.2008 3:47

Цитата(Lutan @ 16.01.2008 19:00) *

Элементы заданного массива B(N) переписать в новый массив A(N) в обратном порядке

Я решил эту задачу так решил...вроде работало...посмотри....

program Demo;
uses
crt;
var
a,b:array [1..10] of integer;
i:integer;
begin
clrscr;
writeln('a[i]>');
for i:=1 to 10 do
readln(a[i]);
for i:=10 downto 1 do
begin
b[i]:=a[10-i+1];
writeln('b[i]',b[i]);
end;
readln;
end.



Автор: Гость 27.01.2008 3:49

[quote name='Гость' date='26.01.2008 23:47' post='119317']
Я решил эту задачу так решил...вроде работало...посмотри....


program Demo;
uses
crt;
var
a,b:array [1..10] of integer;
i:integer;
begin
clrscr;
writeln('a[i]>');
for i:=1 to 10 do
readln(a[i]);
for i:=10 downto 1 do
begin
b[i]:=a[i];
writeln('b[i]',b[i]);
end;
readln;
end.



Автор: Yevgeny 27.01.2008 4:12

[quote][quote name='Гость' date='26.01.2008 23:47' post='119317']
Я решил эту задачу так решил...вроде работало...посмотри....


program Demo;
uses
crt;
var
a,b:array [1..10] of integer;
i:integer;
begin
clrscr;
writeln('a[i]>');
for i:=1 to 10 do
readln(a[i]);
for i:=10 downto 1 do
begin
b[i]:=a[i];
writeln('b[i]',b[i]);
end;
readln;
end.
[/quote]

Бред, бред, бред... blum.gif

Автор: Айра 27.01.2008 15:41

for i:=10 downto 1 do
begin
b[i]:=a[10-i+1]; //присваивание правильное
writeln('b[i]',b[i]); //а вывод нет.. у тебя массив В выводится с конца, а тогда похоже,
//что заполнен он не правильно
end;


for i:=10 downto 1 do
begin
b[i]:=a[i]; //а здесь ты заполняешь его неправильно.. он получается такой же как А
writeln('b[i]',b[i]); //а на выводе "обманываешься"))
end;

сделай в обоих вариантах вывод массива В "вне" цикла с присваиванием и посмотри, где правильно, а где нет..
и еще.. если тебе нужно видеть номер выводимого элемента, а не красивую буковку i smile.gif, то надо делать так
writeln('b[',i,']',b[i]); //тогда и ошибки увидишь

Автор: Гость 27.01.2008 18:26

А вот теперь точно правильно...Спасибо за комментарии..я понял свои ошибки...


uses
crt;
var
a,b:array [1..10] of byte;
i:integer;
begin
clrscr;
write('b[i]>');
for i:=1 to 10 do
readln(b[i]);
for i:=10 downto 1 do
begin
a[10-i+1]:=b[i];
end;
for i:=1 to 10 do
writeln(a[i]);
readln;
end.