|
Главная | Правила | Регистрация | Дневники | Справка | Пользователи | Календарь | Поиск | Сообщения за день | Все разделы прочитаны |
|
Опции темы | Опции просмотра |
29.03.2012, 16:13 | #1 (permalink) |
Новичок
Регистрация: 01.12.2011
Сообщений: 11
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Пытаюсь разобраться с массивами в Free Pascal IDE
"В одномерном массиве, состоящем из п целочисленных элементов, вычислить: 1. Номер максимального элемента массива. 2. Произведение элементов массива, расположенных между первым и вторым нулевыми элементами. 3. Преобразовать массив таким образом, чтобы в первой его половине располагались элементы, стоявшие в нечетных позициях, а во второй половине — элементы, стоявшие в четных позициях." Если можно приложите к своим действиям комментарий чтоб мне было проще разобраться что от куда |
29.03.2012, 16:13 | |
Helpmaster
Member
Регистрация: 08.03.2016
Сообщений: 0
|
Похожие темы встречались на нашем форуме, посмотрите Помогите решить три задачи в Free Pascal Pascal. Работа с одномерными массивами Помогите с матрицами по Free Pascal Пожалуйста, помогите с программой. Free Pascal Помогите решить задачу в Free Pascal Помогите решить задачу в Free Pascal |
29.03.2012, 16:28 | #2 (permalink) |
Новичок
Регистрация: 01.12.2011
Сообщений: 11
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
uses crt;
var a:array[1..100] of integer; i,j,n,max,imax,n1,n2,p,x,k:integer; begin ClrScr; Randomize; Writeln('Vvedite kol-vo elementov: '); repeat Write('n='); Readln(n); until n in [1..100]; for i:=1 to n do begin a[i]:=random(20)-10; Write(a[i],' '); end; Writeln; max:=a[1]; imax:=1; for i:=2 to n do if a[i]>max then begin max:=a[i]; imax:=i; end; for i:=1 to n do if a[i]=0 then begin n1:=i; break; end; for i:=n1+1 to n do if a[i]=0 then begin n2:=i; break; end; p:=1; for i:=n1+1 to n2-1 do p:=p*a[i]; Writeln('Max ',max,' [',imax,']'); Writeln('P=',p); for i:=1 to n do if i mod 2<>0 then begin k:=k+1; x:=a[i]; for j:=i downto k+1 do a[i]:=a[j-1]; a[k]:=x; end; for i:=1 to n do Write(a[i],' '); Readln; end. |
29.03.2012, 16:46 | #3 (permalink) | |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
И что - не работает?
По тексту - вроде до перегруппировки (чет-нечет) всё правильно, за исключением того, что нужно предусмотреть ситуации, когда в массиве один ноль или нет нулей вовсе. А вот тут: Цитата:
|
|
29.03.2012, 16:57 | #4 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Да, и еще замечание - произведение p лучше взять в формате Real: это может быть очень большое число, которое в размер Integer не влезет.
|
29.03.2012, 16:57 | #5 (permalink) |
Новичок
Регистрация: 01.12.2011
Сообщений: 11
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Ошибка есть только не знаю где при вводе числа n больше 29 программа завершается .
|
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
29.03.2012, 20:12 | #8 (permalink) | |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Цитата:
Вместо Код:
a:array[1..100] of integer; Код:
a,b:array[1..100] of integer; Код:
k:=0; for i:=1 to N do if (i mod 2)=1 then begin Inc(k); b[k]:=a[i]; end; for i:=2 to N do if (i mod 2)=0 then begin Inc(k); b[k]:=a[i]; end; a:=b; |
|
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
Опции темы | |
Опции просмотра | |
|
|