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

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

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

 
 Ответить  Открыть новую тему 
> Задача на ссылочные типы данных
сообщение
Сообщение #1


Новичок
*

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

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


Вот задача:
Используя динамическое размещение последовательности вещественных чисел A1,A2…An, преобразовать исходную последовательность, добавив нулевые элементы после каждого отрицательного.


program Zadacha_1;

type
ptr=^arr;
arr=array[1..100] of real;


var
p:ptr;
q,i:word;
v:real;
begin
new(p);
writeln('Enter qantity of elements');
readln(q);
for i:=1 to q do
begin
writeln('Enter value of ',i,' element');
readln(p^[i]);
end;
writeln;
writeln('The list before processing:');
for i:=1 to q do
write(p^[i]:4 :2,', ');
writeln;
writeln('The list after processing:');
{for i:=1 to q do
begin
if p^[i]<0 then p^[i+1]:=0;
write(p^[i]:4 :2,', ');
end;}
dispose(p);
readln;
end.


Помогите, пожалуйста, написать сам цикл по добавлению нулей после отрицательных элементов

Сообщение отредактировано: volvo -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






   writeln('The list before processing:');
for i:=1 to q do
write(p^[i]:4 :2,', ');
writeln;

i := q;
while i > 0 do begin
if p^[i] < 0 then begin
for j := q downto i do p^[j + 1] := p^[j];
p^[i + 1] := 0; inc(q);
end;
dec(i);
end;

writeln('The list after processing:');
for i:=1 to q do
write(p^[i]:4 :2,', ');
writeln;

, хотя мне кажется, что от тебя требовалось нечто другое: выделить память под Q элементов, потом пройтись по массиву, посчитать, сколько отрицательных введено, выделить память под новый массив, и переписать из старого в новый, включая нули после отрицательных элементов.

 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Новичок
*

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

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


program Zadacha_1;

type
ptr=^arr;
arr=array[1..100] of real;


var
p:ptr;
q,i,j:word;
v:real;
begin
new(p);
writeln('Enter qantity of elements');
readln(q);
for i:=1 to q do
begin
writeln('Enter value of ',i,' element');
readln(p^[i]);
end;
writeln;
writeln('The list before processing:');
for i:=1 to q do
write(p^[i]:4 :2,', ');
writeln;
i:=q;
while i>0 do begin
if p^[i]<0 then begin
for j:=q downto i do p^[i+1]:=p^[i];
p^[i+1]:=0; inc(q) end;
dec(i) end;
writeln('The list after processing:');
for i:=1 to q do
write(p^[i]:4 :2,', ');
writeln
dispose(p);
readln;
end.


Я вот так переделал... Правильно? У меня не работает.

Еще. Покажите, пожалуйста, покажите как сделать эту прогу как вы сказали. Будет 2 варианта rolleyes.gif

Сообщение отредактировано: volvo -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






   for j:=q downto i do p^[i+1]:=p^[i];
Я этого не говорил. Смотри внимательнее.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Новичок
*

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

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


Спасибо, исправил. Получилось
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Гость






А вот - тот вариант, о котором я написал выше, с перераспределением памяти:
program Zadacha_1;

type
ptr = ^arr;
arr = array[1 .. 1000] of real;

var
p,pt:ptr;
q,i,j,count:word;
v:real;
begin
writeln('Enter qantity of elements');
readln(q);

getmem(p, q * sizeof(real));
for i:=1 to q do
begin
writeln('Enter value of ',i,' element');
readln(p^[i]);
end;

writeln;
writeln('The list before processing:');
for i:=1 to q do
write(p^[i]:4 :2,', ');
writeln;

count := 0;
for i := 1 to q do begin
if p^[i] < 0 then inc(count);
end;

if count > 0 then begin
getmem(pt, (q + count) * sizeof(real));
j := 1;
for i := 1 to q do begin
pt^[j] := p^[i]; inc(j);
if p^[i] < 0 then begin
pt^[j] := 0; inc(j);
end;
end;
freemem(p, q * sizeof(real));
inc(q, count);
p := pt;
end;

writeln('The list after processing:');
for i:=1 to q do
write(p^[i]:4 :2,', ');
writeln;

freemem(p, q * sizeof(real));
readln;
end.
 К началу страницы 
+ Ответить 

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

 





- Текстовая версия 29.10.2020 12:26
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name