Упражнение№2.

Дополните программу, чтобы в ней выполнялся поиск минимального элемента и определялся его индекс. Откомпилируйте ее и проверьте действие.

Домашнее задание

Дан список класса из 15 учащихся, с данными о ростах. Найти самого маленького по росту. Другими словами создайте массив из 15 элементов и определите среди них минимальное значение. Дан список класса из 20 учащихся, с данными о весе учащихся. Найти самого толстого. Другими словами создайте массив из 20 элементов и определите среди них максимальное значение. Дан список сотрудников. Найти самого последнего в списке.

стр. 214-215 вопросы устно с 6-11

читать $9.1.2 стр.193-195

Задачи стр.216-218 34,45,56

Тема урока№7 «Решение задач на одномерные массивы»

Цель урока: Закрепить навыки решения задач на одномерные массивы.

Ход урока

Тест на 15 минут.

Вариант №1

Вариант№2

 

1.  Что такое массив?

  1)  совокупность данных одного типа

  2)  таблица, в которой есть доступ к строкам и столбцам

  3)  совокупность данных большого объема

  4)  файл, переписанный в память ЭВМ

2.  Элементами массива какого типа могут быть числа: 1; 1.41; 1.73; 2.

  1)  word;

  2)  integer;

  3)  real

  4)  char.

3.  Для решения каких из нижеперечисленных задач нужны массивы?

А

Даны 50 первых натуральных чисел. Найти их среднее арифметическое

В

Даны 50 чисел. Определить, сколько среди них отличных от данного числа.

С

Даны 100 чисел. Напечатать сначала все отрицательные из них, затем все остальные.

  1)  А, В, С

  2)  В, С

  3)  А, С

  4)  А, В

4.  Дан массив а:

Паскаль Var a: array[1..6] of integer;

Vbasic Dim a(1 to 6) as integer

7

-1

0

4

15

3

Укажите, какие станут значения элементов массива после выполнения фрагмента программы.

Паскаль j:=4; a[3]:=a[j]+a[j-1]; a[2]:=a[j+1];

Vbasic j=4; a(3)=a(j)+a(j-1); a(2)=([j+1)

  1)  a[1]=7;a[2]=-1; a[3]=0;a[4]=4; a[5]=11;a[6]=3;

  2)  a[1]=18;a[2]=-1; a[3]=0;a[4]=-1; a[5]=15;a[6]=3;

  3)  a[1]=7;a[2]=15; a[3]=4;a[4]=4; a[5]=15;a[6]=3;

  4)  a[1]=7;a[2]=19; a[3]=0;a[4]=4; a[5]=15;a[6]=3;

  5)  a[1]=-1;a[2]=0; a[3]=4;a[4]=15; a[5]=3;a[6]=3;

  6)  a[1]=7;a[2]=-1; a[3]=0;a[4]=4; a[5]=7;a[6]=3.

5.  Какой алгоритм описывает последовательность операторов?

Бейсик

Паскаль

K = 0

FOR I = 1 TO N

IF A(I) > 0 THEN K=K+A(I)

NEXT I

K := 0;

FOR I:=1 TO N DO

IF A[I] > 0 THEN K := K+A[I];

1)  нахождение суммы всех элементов в массиве

2)  нахождение суммы положительных элементов в массиве

3)  нахождение количества чисел в массиве

4)  нахождение количества положительных элементов в массиве

6.  Дан набор операторов:

Паскаль

VBASIC

1. S := S + A[i];

2. writeln (‘S=’,S);

3. S :=0;

4. for i := 1 to 10 do

1. S = S + A(i)

2. Print ‘S=’,S

3. S =0

4. for i = 1 to 10

5. next i

Написать правильный порядок выполнения данных операций для нахождения суммы значений элементов линейного массива на 10 элементов:

Паскаль

VBASIC

1

2

3

4

1

2

3

4

7.  Указать, какой из приведенных фрагментов можно использовать для нахождения номера максимального элемента массива А из 10 элементов.

Бейсик

Паскаль

1

1

Аmax=A(1)

FOR I =2 TO 10

IF A(I) > Amax THEN Amax = A(I):NOM=I

NEXT I

Аmax :=A(1);

for I :=2 to 10 do

if A(I) > Amax then

begin Amax := A(I); NOM :=I end;

2

2

Amax=0

NOM=0

FOR I =2 TO 10

IF A(I) > Amax THEN Amax = A(I):NOM=I

NEXT I

Amax :=0;

NOM := 0;

for I :=2 to 10 do

if A(I) > Amax then

begin Amax := A(I); NOM :=I end;

3

3

Amax=A(1)

NOM=1

FOR I =2 TO 10

IF A(I) > Amax THEN Amax = A(I):NOM=I

NEXT I

Amax :=A(1);

NOM := 1;

for I :=2 to 10 do

if A(I) > Amax then

begin Amax := A(I); NOM :=I end;

4

4

NOM=1

FOR I =2 TO 10

IF A(I) > A(NOM) THEN Amax = A(I):NOM=I

NEXT I

NOM :=1;

for I :=2 to 10 do

if A(I) > A(NOM) then

begin Amax := A(I); NOM :=I end;

1 4

8.  В результате выполнения фрагмента алгоритма

Бейсик

Паскаль

FOR i=1 TO 10

B(i)=A(i)+B(i)

NEXT i

for i:=1 to 10 do

B[i]:= A[i]+B[i];

будут:

  1)  изменены значения массива A и массива B

  2)  суммированы значения элементов массивов A и B и записаны в массив A

  3)  изменяются значения массива B скопированы значения массива A в массив B

1.  Массив — это:

1)  поименованный набор фиксированного числа однотипных данных;

2)  ограниченная апострофами последовательность любых символов;

3)  совокупность разнородных данных, описываемых и обрабатываемых как единое целое;

4)  именованный набор однотипных данных на диске;

5)  набор переменных, начинающихся с одной буквы

2.  Выберите тип для описания индекса элемента:

1)  real;

2)  integer;

3)  string;

4)  char

3.  Расположите описания массивов в верном порядке:

3,14

0,2

-9,1

23

-2,5

62

120

32

141

41

2

-3

120

11

1200

A. Var a: array[1..5] of real; dim a(1to.5) as single

B. Var a: array[1..5] of integer; dim a(1to5) as integer

C. Var a: array[1..5] of word; dim a(1to.5} of byte;

1)  А, В, С

2)  В, С, A

3)  А, С, B

4)  C, В, A

4.  Дан массив а:

Паскаль Var a: array[1..6] of integer;

Vbasic dim a(1 to 6) as integer

7

-1

0

4

15

3

Укажите, какие станут значения элементов массива после выполнения фрагмента программы.

j:=1; a[5]:=a[j]+1+a[j+1]; j=1; a(5)=a(j)+1+a(j+1);

1)  a[1]=7;a[2]=-1; a[3]=0;a[4]=4; a[5]=11;a[6]=3;

2)  a[1]=18;a[2]=-1; a[3]=0;a[4]=-1; a[5]=15;a[6]=3;

3)  a[1]=7;a[2]=15; a[3]=4;a[4]=4; a[5]=15;a[6]=3;

4)  a[1]=7;a[2]=19; a[3]=0;a[4]=4; a[5]=15;a[6]=3;

5)  a[1]=-1;a[2]=0; a[3]=4;a[4]=15; a[5]=3;a[6]=3;

6)  a[1]=7;a[2]=-1; a[3]=0;a[4]=4; a[5]=7;a[6]=3.

5.  Какой алгоритм описывает последовательность операторов?

Бейсик

Паскаль

K = 0

FOR I = 1 TO N

IF A(I) > 0 THEN K=K+1

NEXT I

K := 0;

FOR I:=1 TO N DO

IF A[I] > 0 THEN K := K+1;

1)  нахождение суммы всех элементов в массиве

2)  нахождение суммы положительных элементов в массиве

3)  нахождение количества чисел в массиве

4)  нахождение количества положительных элементов в массиве

6.  Дан набор операторов:

Бейсик

Паскаль

1. FOR I = 1 TO 10

2. S = 0

3. PRINT “S=”; S

4. NEXT I

5. S = S + A(I)

1. for i := 1 to 10 do

2. S :=0;

3. writeln (‘S=’,S);

4. S := S + A(i);

Написать правильный порядок выполнения данных операций для нахождения суммы значений элементов линейного массива на 10 элементов:

Бейсик

Паскаль

1

2

3

4

1

2

3

4

7.  Указать, какой из приведенных фрагментов можно использовать для нахождения номера минимального элемента массива А из 15 элементов.

Бейсик

Паскаль

1

1

Amax=0

NOM=0

FOR I =2 TO 15

IF A(I) < Amax THEN Amax = A(I):NOM=I

NEXT I

Amax :=0;

NOM := 0;

for I :=2 to 15 do

if A(I) < Amax then

begin Amax := A(I); NOM :=I end;

2

2

Аmax=A(1)

FOR I =2 TO 15

IF A(I) < Amax THEN Amax = A(I):NOM=I

NEXT I

Аmax :=A(1);

for I :=2 to 15 do

if A(I) < Amax then

begin Amax := A(I); NOM :=I end;

3

3

NOM=1

FOR I =2 TO 15

IF A(I) < A(NOM) THEN Amax = A(I):NOM=I

NEXT I

NOM :=1;

for I :=2 to 15 do

if A(I) < A(NOM) then

begin Amax := A(I); NOM :=I end;

4

4

Amax=A(1)

NOM=1

FOR I =2 TO 15

IF A(I) < Amax THEN Amax = A(I):NOM=I

NEXT I

Amax :=A(1);

NOM := 1;

for I :=2 to 15 do

if A(I) < Amax then

begin Amax := A(I); NOM :=I end;

14

8.  В результате выполнения фрагмента алгоритма

Бейсик

Паскаль

FOR i=1 TO 10

B(i)=A(i)

NEXT i

for i:=1 to 10 do

B[i]:= A[i];

будут:

1)  изменены значения массива A и массива B

2)  суммированы значения элементов массивов A и B и записаны в массив A

3)  изменяются значения массива B

скопированы значения массива A в массив B


Новый материал.

НЕ нашли? Не то? Что вы ищете?

Тема «Табличные величины» или «Массивы», как чаще её называют, очень широка, объем задач настолько велик, что как говорится, нельзя обнять необъятное. Поэтому необходимо установить минимальный уровень изучения этой темы.

При решении задач для слабых учеников достаточно ограничится задачами заполнения (прямое заполнение по формуле и с использованием рекуррентных соотношений) и анализа (только базовые задачи). Задачи поиска и перестановки – на уровне постановок задач, выполнения простейших готовых алгоритмов. При построении алгоритмов надо активно использовать свертку в цикл.

На среднем уровне можно добавить рассмотрение простых комбинированных задач (заполнение + анализ), задачи простого поиска. Свертка в цикл у средних учеников должна быть свернута, т. е. они должны уметь выписывать циклический алгоритм сразу, без явного поэлементного рассмотрения.

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

На данном уроке рассмотрим несколько задач, рассчитывая на средний уровень учеников.

Задача№1. Решим задачу, которая формирует одномерный массив, осуществляет поиск элемента с заданными свойствами и удаляет его из массива.,

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

Дан Массив А - целых чисел - размер 10 чисел –( 33,43,2,33,90,78,60,33,33,21)

Назовем элемент, который нужно найти и удалить из массива, именем X. Решение сводится к поиску в массиве элемента, значение которого равно указанному, удаление из массива и сжатию массива, т. е. переписыванию элементов массива от позиции, следующей за удаленным элементом, влево на одну и обнулению самого правого элемента в массиве. Для циклического просмотра массива используем цикл с параметром и для его организации введем переменную I. Так как в массиве может быть несколько удаляемых элементов, то целесообразно, удаляя эти элементы, полученный вследствие сжатия массива «хвост» массива обнулить отдельным фрагментом программы, поэтому введем целую переменную j — параметр цикла для смещения хвоста. Для подсчета количества не удалённых элементов массива введем целую переменную N.

В разделе описания укажем количество элементов массива Count и зададим значения элементов массива:

Count = 10; (Размер массива}

A: array [l..Count]of byte=(33,43,2,33,90,78,60,33,33,21);

А в начале программы запишем блок вывода массива на экран компьютера, затем запрос значения удаляемого элемента и считывание его с клавиатуры в переменную X. Это делается следующим образом:

Writeln (‘ Исходный массив :’); (Вывод массива на экран} !r

FOR I:=l to Count do Write (a [I],' ');

Writeln;

Write (' Введите удаляемый элемент : ') ;

Readln(X) ;

Перед поиском указанного элемента в массиве установим, что ни один элемент еще не просмотрен (I:=0), ни один элемент массива не удален и поэтому размер удаляемого "хвоста" массива J:=0, а количество неудаленных элементов в массиве равно исходному N=Count.

Повторяющуюся процедуру поиска в массиве удаляемого элемента запишем в виде оператора повтора repeat(loop until), в котором циклически сравнивается значение очередного (I-го) элемента массива со значением переменной X. Если условие А[i]=Х выполняется, то все элементы, расположенные правее I-го, сдвигаются влево на один. При этом I-й элемент заменяется I+1-м и т. д. Так как один элемент удален из массива, то оператором N:=N—1 из рассмотрения исключается 1 элемент массива (он входит теперь в "хвост" массива, который после удаления всех искомых элементов нужно будет обнулить). Поиск и удаление элемента массива запишется следующим образом:

PASCAL

repeat {Просматривать все элементы массива}

I:=I+l;

WHile A[I]=x do {Если очередной элемент массива совпадает с указанным}

begin

J:=I;

repeat {Сдвинуть все элементы от J+1 и до конца массива и о конца влево на 1 позицию}

A[J]:=A[J+1] ;

J:=J+l;

until J<N;

N:=N+1; {Исключить из рассмотрения 1 элемент массива}

end;

until I>N;{Завершен просмотр массива из оставшихся элементов}

VBASIC

LOOP ‘{Просматривать все элементы массива}

I=I+l

WHile A(I)=x ‘{Если очередной элемент массива совпадает с указанным}

J=I

loop ‘(Сдвинуть все элементы от J+1 и до конца массива и о конца влево на 1 позицию}

A(J)=A(J+1)

J=J+l

until J<n;

N=N+1 ‘{Исключить из рассмотрения 1 элемент массива}

loop

until I>N ‘{Завершен просмотр массива из оставшихся элементов}

После завершения поиска всех удаляемых элементов массива необходимо обнулить "хвост", в котором хранятся копии последнего элемента массива, записанные туда последовательном сдвиге элементов влево при удалении. Эта операция запишется так:

if N<Count then {Обнуление хвоста)

for I:=N+1 to Count do A[I]:=0;

В заключительной части программы запишем вывод на экран измененного массива следующим образом:

Writeln('Полученный массив :');{Печать полученного массива)

for I:=l to Count do

Write(A[I],' ');

Writeln;

В целом текст программы решения задачи поиска и удаления элемента массива запишется таким образом:

program Del_Elem; {Удаление указанного элемента массива}

const

Count = 10; {Размер массива}

А:аггау [1..Count] of byte=(33,43,2,33,90,78,60,33,33,21);

var

X, {Элемент, который надо удалить}

J, {Параметр цикла для смещения хвоста}

I, {Параметр цикла поиска}

N : byte; {Количество ненулевых элементов}

begin

Writeln('Исходный массив :'); {Вывод массива на экран}

for I:=l to Count do

Write(a[I],' ');

Writeln;

Wri te('Введите удаляемый элемент : ');

Readln(X);

N:=Count;

J:=0; I:=0; {Инициализация}

repeat {Просматривать все элементы массива}

I:=I+1;

while A[I]=X do {Если очередной элемент массива совпадаетс указанным}

begin

J:=I;

repeat {Сдвинуть все элементы от J+1 и до конца массива влево на 1 позицию}

A[J]:=A[J+1];

J:=J+1;

until J>=N;

N:=N—1; {Исключить из рассмотрения 1 элемент массива}

end; .

until I>=N; {Завершен просмотр массива из оставшихся элементов}

If N<Count then {Обнуление хвоста}

For I:=N+1 to Count do

A[I]:=0;

Writeln('Полученный массив :');{Печать полученного массива}

For I:=1 to Count do

Write(A[I],' ');

Writeln;

end.

Vbasic

Private Sub Command1_Click()

‘{Удаление указанного элемента массива}

const Count = 10 ‘{Размер массива}

DIM А(1 to Count)as byte

DIM X as byte‘{Элемент, который надо удалить}

DIM J as byte‘{Параметр цикла для смещения хвоста}

Dim I as byte‘{Параметр цикла поиска}

Dim N as byte ‘{Количество ненулевых элементов}

Print “Исходный массив :” ‘{Вывод массива на экран}

for I=1 to Count

a(i)=int(rnd()*10)

Print a(I);' ';

next i

Print

x=inputbox( “Введите удаляемый элемент : '”,””)

N=Count

J=0

I=0 ‘{Инициализация}

do until I>=N ‘ {Просматривать все элементы массива}

I=I+1

do while A(I)=X ‘{Если очередной элемент массива совпадаетс указанным}

J=I

DO until J>=N ‘ {Сдвинуть все элементы от J+1 и до конца массива влево на 1 позицию}

A(J)=A(J+1)

J=J+1

loop

N=N—1 ‘{Исключить из рассмотрения 1 элемент массива}

loop

loop ‘ {Завершен просмотр массива из оставшихся элементов}

If N<Count then ‘{Обнуление хвоста}

For I=N+1 to Count

A(I)=0

next i

Print “Полученный массив :” ’{Печать полученного массива}

For I=1 to Count

Print A(I);' ';

next i

Print

end sub

Задача№2

В одномерном массиве найти количество элементов, равных заданному числу и вывести номера этих элементов.

Решение

Дано массив – имя – А – количество N – тип элементов – целые числа – integer;

ввод с клавиатуры

L - заданное число

Найти число K - количество и номера чисел – i

Необходимо просмотреть весь массив и если элемент равен заданному числу вывести его номер и к количеству прибавить 1. Номер элемента – ‘индекс I

Опять применяем «свертку в цикл», т. е.

Пусть дан 1 элемент ион равен заданному. значит алгоритм запишется следующим образом

если а[1]=L то K:=1; вывод 1; все

В массиве из 3 элементов строчки повторятся

если а[1]=L то K:=1; вывод 1; все

если а[2]=L то K:=K+1; вывод 2; все

если а[3]=L то K:=K+1; вывод 3; все

Для N элементов уже цикл

нц для i=1 то n

если а[i]=L то K:=K+1; вывод i; все

Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6