|
|
|
| Здравствуйте!
Помогите, пожалуйста решить такую задачу на Паскале:
В одномерном массиве, состоящем из N целочисленных элементов, вычислить:
1. Минимальный по модулю элемент массива.
2. Сумму модулей элементов массива, расположенных после первого элемента, равного нулю.
Преобразовать массив таким образом, чтобы в первой его половине располагались элементы, стоявшие в четных позициях, а во второй половине - элементы, стоявшие в нечетных позициях.
P.S. я в Паскале слаб, поэтому надеюсь на вашу помощь. | |
|
|
|
|
|
|
|
для: Mookapek
(17.12.2007 в 23:47)
| | 1) Эту задачу можно решить следующим образом
program minabs;
Uses Crt;
Var
InpValue, i, MinValue, MaxValue :Integer;
A :Array[1..50] of Integer;
begin
Write('Введите целое число N (0 < N < 51) ');
Readln(InpValue);
if InpValue < 0 then InpValue := 1;
if InpValue > 50 then InpValue := 50;
for i:=1 to InpValue do
begin
Write('Введите значение (', i, '): ');
Readln(A[i]);
end;
MinValue := abs(A[i]);
for i:=1 to InpValue do
begin
if MinValue > abs(A[i]) then MinValue := abs(A[i]);
end;
WriteLn('Результат: ', MinValue);
end.
|
| |
|
|
|
|
|
|
|
для: cheops
(18.12.2007 в 00:30)
| | Большое спасибо Вам! Очень выручили! | |
|
|
|
|
|
|
|
для: cheops
(18.12.2007 в 00:30)
| | а почему здесь вводится ограничение именно на 50 элементов массива? | |
|
|
|
|
|
|
|
для: Mookapek
(18.12.2007 в 00:44)
| | Поставьте 100, если мало, я если честно смутно помню как на Pascal выделять динамический объём памяти... | |
|
|
|
|
|
|
|
для: cheops
(18.12.2007 в 00:51)
| | А можно объявить массив так:
A :array[1..N] of Integer;
|
? | |
|
|
|
|
|
|
|
для: Mookapek
(18.12.2007 в 01:05)
| | только если N уже имеет значение к этому моменту. Да и то не во всех диалектах. | |
|
|
|
|
|
|
|
для: Mookapek
(18.12.2007 в 01:05)
| | В Delphi так, Pascal не помню :)
//объявили ссылку на область памяти
var A:array of real;
//создали массив состоящий из 25 элементов начиная с 0
SetLength(A,25);
//а для определения верхний границы используем функцию Hihg
I:=High(A);
//I - верхняя граница. Определения длины Length(A),
//определения нижней границы Low(A).
//при нулевой длине массива High, возращает -1.
//Пример:
var
a,b: array of integer;
begin
SetLength(a,2);
SetLength(b,2);
a[0]:=2;
b[0]:=3;
a:=b;
b[0]:=4;
end;
|
| |
|
|
|
|
|
|
|
для: cheops
(18.12.2007 в 00:30)
| | 2) Вот вторую часть попробовал написать:
var summ: integer;
...
...
for i:=1 to InpValue do
begin
if A[i]:=0 then begin k:=i; break; end;
end;
summ:=0;
for k to InpValue do
begin
summ:=summ+abs(A[k]);
end;
WriteLn('Сумма=', summ);
|
Правильно или нет? | |
|
|
|
|
|
|
|
для: Mookapek
(18.12.2007 в 01:02)
| | >> if A[i]:=0 then begin k:=i; break; end;
Исправьте на if A[i] = 0.. Ну и логичнее было бы k присваивать i+1 - хотя тут в результате из-за нуля разницы не будет. | |
|
|
|
|
|
|
|
для: kasmanaft
(18.12.2007 в 08:12)
| | Да, конечно A[i] = 0, а не ":=". ":=" - это же операция присваивания, а не сравнения. | |
|
|
|
|
|
|
|
для: cheops
(18.12.2007 в 00:30)
| | А здесь по-моему в девятой строке надо писать if InpValue < 1... Или нет? | |
|
|
|
|
|
|
|
для: Mookapek
(17.12.2007 в 23:47)
| | Ну вот, осталась последняя часть:
"Преобразовать массив таким образом, чтобы в первой его половине располагались элементы, стоявшие в четных позициях, а во второй половине - элементы, стоявшие в нечетных позициях."
Как я понимаю, позиция - это индекс массива имеется в виду? Если нет, то поправьте.
Вот, чтоя попытался сделать, но кажется, что неправильно:
array: B[1..50] of Integer;
...
...
{Третья часть}
m:=1;
for i:=1 to InpValue do
begin
if (i/2)=0 then begin B[m]=A[i]; m:=m+1; end;
end;
for i:=1 to InpValue do
begin
if (i/2)!=0 then begin B[m]=A[i]; m:=m+1; end;
end;
|
| |
|
|
|
|
|
|
|
для: Mookapek
(18.12.2007 в 19:20)
| | Если можно завести еще один массив - тогда можно и так.
Только (i/2) замените на "i mod 2", а != на <>
>> А здесь по-моему в девятой строке надо писать if InpValue < 1... Или нет?
Да, точно.. | |
|
|
|
|
|
|
|
для: kasmanaft
(18.12.2007 в 19:58)
| | А как можно реализовать задачу без дополнительного массива? | |
|
|
|
|
|
|
|
для: Mookapek
(18.12.2007 в 20:07)
| | Помогите кто-нибудь, пожалуйста! | |
|
|
|
|
|
|
|
для: Mookapek
(18.12.2007 в 21:57)
| | . | |
|
|
|
|
|
|
|
для: Mookapek
(18.12.2007 в 19:20)
| | Вот сколько уже пытаюсь, а без дополнительного массива никак не получается третью часть сделать :(
Форумчане, помогите! | |
|
|
|
|
|
|
|
для: Mookapek
(20.12.2007 в 00:55)
| | Я думаю тут несколько вариантов, но мне приходит пока только один:
Увеличить размер массива, четные элементы добавлять с позиции 51...75, а нечетные 76...100, потом удалить элементы 0...50 (51..100 переместить в начало) | |
|
|
|
|
|
|
|
для: ddhvvn
(20.12.2007 в 11:00)
| | увеличить размер смассива или воспользоваться дополнительным - разница невелика | |
|
|
|
|
|
|
|
для: Trianon
(20.12.2007 в 22:21)
| | А все! Прокатило с дополнительным массивом :-) А с одним массивом, наверное надо использовать временную переменную и вложенный цикл. Но конкретно не знаю. | |
|
|
|