Другие языки программирования и технологии

помогите пожалуста с одномерным массивом в Pascal

Задача № 6
Дан одномерный массив размерностью N. Вставить между элементами, совпадающими по знаку, число 0.
здесь надо сам код программы и алгоритм я так и не понял как её делать
Вообще, любая вставка, иначе говоря увеличения размера предполагает работу с динамическими объектами. Но, видимо, до этого вряд ли дойдет.

var
    a: array [1..200] of integer;
    n, c, k: integer;
begin
    randomize;
    write('размер массива (<= 100): ');
    readln(n);
    if (n < 1) or (n > 100) then exit;
    writeln('исходный массив: ');
    for c := 1 to n do begin
        a[c] := random(101) - 50;
        write(' ', a[c]);
    end;
    writeln;
    c := 1;
    while c < n do begin
        if (a[c] < 0) = (a[c + 1] < 0) then begin
            for k := n + 1 downto c + 1 do a[k] := a[k - 1];
            a[c + 1] := 0;
            inc(c);
            inc(n);
        end;
        inc(c);
    end;
    writeln('преобразованный массив: ');
    for c := 1 to n do write(' ', a[c]);
    readln;
end.

ЗЫ: таки хотелось бы увидеть и твою попытку решения.
Максим Бандура
Максим Бандура
85 465
Лучший ответ
Пиши в личку, 100 рублей, помогу.. .
ну раз тебе лень поискать то и мне лень тебе расписывать, сам совместишь из двух примеров
код на повторяющиеся элементы:
uses crt;
var a:array[1..100]of integer;
i,n,kol,ch,j:integer;
begin clrscr;
randomize;
write('n=');
read(n);
for i:=1 to n do
begin
a:=random(20);
write(a,' ');
end;
writeln;
for j:=1 to n do
begin
kol:=0;
ch:=a[j];
for i:=1 to n do
if a=ch then inc(kol);
writeln('element ',ch,' vstrechaetsya ',kol,' raz');
end;
readkey;
end.
этот на замену элементов:
uses crt;
const n:=15;
var a:array [1..n] of integer;
i:integer;
begin
for i:=1 to n do
begin write('Введите a[,'i',]:');
readln(a);
end;
For i:=1 to N do
if a mod 2=1 then
a:=0;
end;
For i:=1 to N do {Вывод преобразованного массива на экран, можно без этого}
Write('a[,'i',]:', ,'a[,'i',]',);
end;
end.
var a:array[1..11]of integer;
i,n,j:integer; s,s1:string;
begin
for i:=1 to 10 do begin
a:=random(9);
s:=s+inttostr(a);
end;
for j:=1 to 10 do begin
if a[j]=a[j+1] then s1:=s1+inttostr(a[j])+'0' else s1:=s1+inttostr(a[j]);
end;
writeln(s); writeln; writeln(s1);
end.

Есть пару багов 1-й= если ставить например a:=random(99); тогда прога подтупливает вот так например
7559594818867852863
755905948180867852863 -0 между восьмерок (не в тему))) )
2-й если ставить a:=random(9); тогда если в конце 0 то прога автоматом ставит еще один 0
Вот так например
0834435510
0834043505100(можно дописать условие и убрать этот баг. ) Не судите строго на скорую руку написал))) )

ыыы, я походу тоже не понял задание ))))))))))))))0