Пошук

неділю, 10 січня 2010 р.

VII. Одновимірні масиви

ЗАДАЧА № 44

Постановка задачі:

Дано одновимірний масив цілих чисел А[і], де і = 1, 2, …, n. Вивести елементи масиву з парними індексами.

Аналіз алгоритму:

У даному випадку незручно користуватися для виведення на екран елементів з парними індексами циклом з параметром, тому що він дозволяє зміну індексу тільки на одиницю. Тому пропонуємо скористатися циклом з перед- або післяумовою.

Текст програми:

Program Task_44;

Uses crt;

Var N, і:word; {N – кількість елементів масиву, і – змінна циклу}

A:array[1..100] of longint; {A – заданий масив}

Begin

Clrscr;

Write(‘Введіть кількість елементів масиву (<100):>

Readln(N);

For i:=1 to N do

Begin

А[і] :=random(300) ; {Заповнення масиву випадковими числами}

Write(A[i]:5); {Виведення масиву на екран для контролю правильності роботи програми}

End;

Writeln; {Переведення курсору на наступний рядок}

і:=2;

while i<=N do

Begin

Write(A[i]:5);

i:=i+2; {Змінна циклу змінюється на 2, щоб вибрати тільки парні елементи}

End;

Readkey;

End.

ЗАДАЧА № 45

Постановка задачі:

Барон Мюнхгаузен, вийшовши на екологічно чисте полювання, зарядив свою рушницю кісточками вишень. Після того, як він вдало влучив поміж роги оленям (в яких влучило відповідно k1, k2, …, kN кісточок), у них на головах виросли чудові молоді вишеньки. Скільки саджанців зміг подарувати барон Мюнхгаузен садівникам-дослідникам?

Аналіз алгоритму:

Для розв’язування цієї задачі пропонується використати масив для зберігання кількості кісточок, що влучили поміж роги оленям. Оскільки кількість кісточок є цілим числом, масив повинен мати розмірність N елементів цілого типу. Для спрощення відлагодження програми доречно використовувати автоматичне заповнення масиву за допомогою генератора випадкових чисел, а з метою перевірки правильності роботи програми після заповнення масив виводиться на екран.

Текст програми:

Program Task_45;

Uses crt;

Var N:word;

К:array[1..100] of longint;

{K – зарезервований масив для зберігання кількості кісточок, що влучили в оленів}

і,Sum:longint; {і – змінна циклу,

Sum – загальна кількість кісточок, що влучили в оленів}

Begin

Randomize; {Ця процедура запускається з метою зробити числа генератора випадкових чисел ще більш «випадковими»}

Clrscr;

Sum:=0; {Спочатку Мюнхгаузен ще ні в кого не влучив}

Write(‘Олені, в яких влучив Мюнхгаузен (<=100): ‘);

Readln(N);

For і:=1 to N do

Begin

К[і]:=random(50)+20;{Заповнення масиву випадковими числами в діапазоні від 20 до 70}

Write(К[і]:5); {Виведення на екран для контролю}

Sum: =Sum+K[і]; {Знаходження кількості влучених кісточок}

End;

Writeln; {Переведення курсору на новий рядок}

Writeln(‘Кількість нових саджанців: ‘, Sum);

Readkey;

End.

ЗАДАЧА № 46

Постановка задачі:

Дано натуральне число А. Складіть програму, що представляє його у вигляді многочлена. Наприклад, 123 = 1 × 102 + 2 × 101 + 3 × 100.

Аналіз алгоритму:

Ця задача фактично зводиться до пошуку окремих цифр числа. Оскільки ми не знаємо на початку роботи, скільки цифр має число, для їх зберігання можна використати масив цілих чисел, причому розмірність цього масиву можна задати не більше 10 елементів, тому що навіть найбільше ціле число типу longint має в своєму складі не більше 10 цифр. Щоб вивести на екран отриманий многочлен, ми спочатку знаходимо кількість цифр у числі та виділяємо кожну цифру окремо, а потім організовуємо цикл від «найстаршої» значущої (ненульової) цифри числа до «наймолодшої» з виведенням на екран самої цифри, помноженої на 10 у степені номер розряду–1 (тобто i–1).

Текст програми:

Program Task_46;

Uses crt;

Var N, і, Count:longint; {N – задане ціле число,

і – змінна циклу,

Count – кількість цифр в числі}

Cifra:array[1..10] of byte; {Cifra – масив для зберігання цифр числа}

Begin

Clrscr;

Count:=0;

Write(‘Введіть ціле число: ‘);

Readln(N);

While N>0 do

Begin

Count:=Count+1;

Cifra[Count]:=N mod 10;

N:=N div 10;

End;

Write(‘N = ‘);

For i:=Count downto 1 do

Begin

Write(Cifra[i],‘*10^’,i–l); {Якщо доданок не останній, то до нього дописується знак «+»}

If і>1 Then write(‘ + ‘);

End;

Readkey;

End.

ЗАДАЧА № 47

Постановка задачі:

Дано дійсні числа а1951, а1952, … , а2000 – кількість опадів (у мм), що випали у місті за останні 50 років XX століття. Обчислити середню кількість опадів за цей період і щорічне відхилення від середнього значення.

Аналіз алгоритму:

У цій задачі слід організовувати проходження по масиву двічі, оскільки першим проходженням ми знайдемо тільки суму всіх опадів, що випали за останні 50 років, а потім, поділивши отриманий результат на 50, знайдемо середню кількість опадів за вказаний період. Другим же проходженням можемо вже визначити щорічне відхилення від середнього значення, причому для того, щоб не втратити вхідні дані, зарезервуємо в програмі ще один масив на 50 дійсних чисел для зберігання цих результатів.

Текст програми:

Program Task_47;

Uses crt;

Var N, i:longint; {N – кількість елементів масиву, і – змінна циклу}

А:аrrау[1951..2000] of real; {A – масив для зберігання кількості опадів у відповідному році}

В:array[1951..2000] of real; {В – масив для зберігання відхилення від середнього значення}

Begin

Randomize;

Clrscr;

Sum:=0;

For і:=1951 to 2000 do

Begin

A[i]:=random(500)/7;{Заповнення масиву випадковими дійсними числами}

Write (А[і]:8:2);{Виведення масиву на екран для контролю}

Sum:=Sum+K[і];

End;

Sum:=Sum/50; {Середня кількість опадів за рік}

Writeln;

WriteIn(‘Щорічні відхилення від середньої кількості опадів за період 1951–2000 p.p.‘);

For і:=1951 to 2000 do

Begin

В[і]:=Sum – А[і]; {Знаходження щорічного відхилення}

Write(В[і]:8:2); {Виведення результатів на екран}

End;

Readkey;

End.

ЗАДАЧА № 48

Постановка задачі:

Дано дійсні числа а1, а2, … , a30 та b1, b2, …, b30. Обчислити

Аналіз алгоритму:

Очевидно, що для обчислення результату цієї задачі спочатку необхідно знайти чисельник та знаменник дробу. Причому зверніть увагу на те, що кількість доданків і в одному, і в іншому випадках дорівнює 15, тільки в чисельнику вибираються елементи масивів з непарними індексами, а в знаменнику – із парними. Щоб організувати зміну індексів за заданим правилом, можна скористатися таким штучним прийомом: якщо в циклі з параметром індекс і змінюється від 1 до п, то для отримання непарних чисел з проміжку [1..2n] використовується формула:            2*і-1.

Запропонуйте дітям подумати, яка формула дасть змогу отримати парні числа (Відповідь: 2*і).

Текст програми:

Program Task_48;

Uses crt;

Var A, B:array [1..30] of real;

{А, В – масиви для зберігання вхідних даних}

і:byte; {і – змінна циклу}

Rl, R2:real; {R1 – чисельник дробу, R2 – знаменних дробу}

Rez:real; {Rez – результат обчислень}

Begin

Randomize;

Clrscr;

Writeln(‘Масив А:’);

For i:=1 to 30 do

Begin

A[i]:=random(200)/7–random*15;

Write(A[i]:8:2);

End;

Writeln;

Writeln(‘Масив В:’);

For i:=1 to 30 do

Begin

B[i]:=random*200–random*100;

Write(B[i]:8:2);

End;

Writeln;

Rl:=0; R2:=0; {Початкові значення дорівнюють 0, тому що результат є накопиченням суми}

For і:=і to 15 do

Begin

R1:= R1+(A[2*i–1]+B[2*i–1]);

R2:= R2+(A[2*i]+B[2*i]) ;

End;

Rez:=Rl/R2;

Writeln(‘Результат обчислень = ‘, Rez:8:2);

Readkey;

End.

Немає коментарів:

Дописати коментар