• Составьте программу для вычисления суммы и произведения элементов массива, больших 4. Массив А состоит из 15 элементов.

  • Скачать 179.16 Kb.


    Дата12.05.2017
    Размер179.16 Kb.
    ТипУрок

    Скачать 179.16 Kb.

    Задания к урокам 13 – 17 (декабрь)



    Задания к урокам 13 – 17 (декабрь).
    Темы: «Программы типа ветвление и цикл на Бейсике, работа

    с массивами».


    Задание состоит из нескольких частей:

    • прочитайте лекционный материал по теме (с. 1-5) и разберите примеры ;

    • выполните задание 1 (с. 5);

    • прочитайте лекционный материал по теме (с. 6-8) и разберите примеры ;

    • выполните задание 2 (с. 8-9);

    • прочитайте лекционный материал по теме (с. 9-14) и разберите примеры ;

    • выполните задание 3 (с. 14);

    • познакомьтесь с понятием «матрица» и примерами работы с матрицами (с. 15-17).


    Решенные задания пришлите на электронный адрес школы, в письме в

    разделе «Тема» укажите «Кавериной Н.Е информатика». В начале текста

    письма укажите свою фамилию, класс, дату выполнения задания и

    номера заданий (13 - 17). Задания копируйте, а затем записывайте ответы.
    ВНИМАНИЕ! Задание должно быть сдано до 12 января.
    Ветвление в алгоритмах и программах.
    Просмотрите лекционный материал по данной теме, разберите примеры,

    если будут вопросы – задайте их в письме.

    Разветвляющий алгоритм – это алгоритм, в котором в зависимости от условия выполняется либо одна, либо другая последовательность действий.

    Во многих случаях требуется, чтобы при одних условиях выполнялась одна последовательность действий, а при других - другая.



              

    Вся программа состоит из команд (операторов). Команды бывают простые и составные (команды, внутри которых встречаются другие команды). Составные команды часто называют управляющими конструкциями. Этим подчеркивается то, что эти операторы управляют дальнейшим ходом программы.



    Рассмотрим запись условного оператора на языке Basic.

    Простая форма оператора выглядит следующим образом:

    IF <УСЛОВИЕ> THEN <ОПЕРАТОР> 

    или


    IF <УСЛОВИЕ> 
    <ОПЕРАТОР 1>
    <ОПЕРАТОР 2>
                …
    <ОПЕРАТОР N>
    END IF

    Если условие справедливо, то программа выполняет тот оператор, который стоит после ключевого слова THEN (или серию операторов от ключевого слова THEN до END IF), и дальше руководствуется обычным порядком действий. Если условие не выполняется, то оператор, стоящий после THEN (или серия операторов от THEN до END IF) не выполняется, и программа сразу переходит к обычному порядку действий.


    Конструкция IF...THEN  позволяет в зависимости от справедливости условия либо выполнить  оператор, либо пропустить этот оператор.
    Конструкция IF...THEN...END IF  позволяет в зависимости от справедливости условия либо выполнить группу операторов, либо пропустить эту группу операторов.

    Условия - еще один тип логических выражений. В них используются следующие операторы сравнения:



    =

    равно

    <>

    не равно

    >

    больше

    <

    меньше

    >=

    больше или равно

    <=

    меньше или равно

    Справа и слева от знака сравнения должны стоять величины, относящиеся к одному типу. В результате сравнения получается логическая величина, имеющее значение ИСТИНА (TRUE) или ЛОЖЬ (FALSE).

    Пример:
    5<7    - ИСТИНА;


    8=12     -ЛОЖЬ (проверяем равно ли 8 12, именно проверяем, а не утверждаем, что 8=12);

    Предыдущие конструкции позволяли обойти или выполнить серию оператор в зависимости от справедливости условия. Это еще не было ветвлением. Чтобы вычисления могли разветвляться по нескольким направлениям, служит конструкция IF...THEN...ELSE...END IF



    IF <УСЛОВИЕ> THEN 
    <ОПЕРАТОРЫ 1>
    ELSE
    <ОПЕРАТОРЫ 2>
    END IF

    Если условие справедливо (ИСТИНА), то выполняются <операторы 1> (стоящие между THEN и ELSE), а <операторы 2> (стоящие между ELSE и END IF) будут пропущены.


    Если условие не справедливо (ЛОЖЬ), то <операторы 1> игнорируются и выполняются <операторы 2>.

    IF - если, THEN - тогда, ELSE - иначе.



    Если в комнате темно, тогда надо включить свет. 

    Если пойдет дождь, тогда надо взять зонтик, 
    иначе, зонтик не брать. 

    Пример: Проверить, равно ли введенное число некоторому значению, и в случае равенства выдать  на экран сообщение о равенстве чисел.

    REM сравнить число с каким-то значением
    INPUT "Введите а", а
    IF a=7 THEN PRINT "Числа равны"
    END

    После запуска программы проверяется, равно ли введенное значение семи или нет. Если равно, то на экран выводится сообщение 'Числа равны'.

    Пример: Определить большее из двух чисел, вывести его на экран, затем - увеличить его в двое и вывести результат на экран.

    REM определить большее из двух чисел...
    INPUT "Введите а", а
    INPUT "Введите b", b
    IF a>b THEN
    PRINT "Большее число: ", a
    с=2*a
    ELSE
    PRINT "Большее число: ", b
    с=2*b
    END IF
    PRINT "результат: ", c
    END

    Сначала программа запрашивает оба числа, затем проверяет условие a>b. Если условие верно, то на экран выводится число a, затем это число удваивается. Иначе на на экран выводится число b, затем  число b удваивается. В завершении на экран выводится удвоенное значение большего числа.

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

    REM определить большее из двух чисел...


    INPUT "Введите а", а
    INPUT "Введите b", b
    IF a=b TNEN
    PRINT "Числа равны"
    с=2*a
    ELSE
        IF a>b THEN
        PRINT "Большее число: ", a
        с=2*a
        ELSE
        PRINT "Большее число: ", b
        с=2*b
        END IF
    END IF
    PRINT "результат: ", c
    END

    В этой программе два условных оператора, первым проверяется условие равенства чисел и, в случае его выполнения, будет выдано сообщение о равенстве чисел, если числа не равны, то проверяется второе условие...

    Пример: Решение квадратного уравнения.
    Решение квадратного уравнения зависит от значения дискриминанта.

    REM Решение квадратного уравнения


    INPUT "Введите коэффициент a: ", а
    INPUT "Введите коэффициент b: ", b
    INPUT "Введите коэффициент c: ", c
    d=b*b-4*a*c
    IF d<0 THEN
    PRINT "Корней нет"
    ELSE
        IF d=0 THEN
        x=-b/(2*a)
        PRINT "корень уравнения: ", x
        ELSE
        x1=(-b-SQR(d))/(2*a)
        x2=(-b+SQR(d))/(2*a)
        PRINT "корни уравнения: ", x1, x2
        END IF
    END IF
    END

    Задание 1.

    1. Напишите программу для проверки знаний таблицы умножения (один столбец по выбору). Применяйте комментарии для пояснения дальнейших действий отвечающего.

    2. Заданы 3 числа (вводите их с клавиатуры с комментариями) а, в, с. Напишите программу, выбирающую и распечатывающую большее число.

    3. Напишите программу для вычисления значения У, если известно:



    Циклы в алгоритмах и программах.

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

    С необходимостью повторяющихся вычислений программисты сталкиваются постоянно. Например, если надо подсчитать, сколько раз буква "о" встречается в тексте необходимо перебрать все буквы. При всей простоте этой программы исполнить ее человеку очень трудно, а для компьютера это задача на несколько секунд.

    Циклический алгоритм - описание действий, которые должны повторяться указанное число раз или пока не выполнено заданное условие.

    Перечень повторяющихся действий называют телом цикла.

    Например, на уроке физкультуры вы должны пробежать некоторое количество кругов вокруг стадиона.

                                 

     

    Такие циклы называются - циклы со счетчиком.



    На языке Basic они записываются следующим образом:

    FOR Счетчик=НачЗнач TO КонЗнач [STEP шаг]
    тело цикла
    NEXT [Счетчик]

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

    Пример: Вывести на экран все числа от 1 до 100. Для этого можно было бы написать следующую программу:

    REM Вывод чисел от 1 до 100


    PRINT 1
    PRINT 2
    PRINT 3
    PRINT 4
    PRINT 5
    PRINT 6
    PRINT 7
        ...
    PRINT 98
    PRINT 99
    PRINT 100
    END

    Всего каких-то 102 строчки :-). Хотя эту же программу можно написать намного короче:

    REM Вывод чисел от 1 до 100
    FOR I=1 TO 100
    PRINT I
    NEXT
    END

    Немного исправив программу можно сделать, чтобы она выводила все числа от a до b.

    REM Вывод чисел от a до b
    a=55
    b=107
    FOR I=a TO b
    PRINT I
    NEXT
    END

    В этом случае счетчик при первом прохождении цикла принимает значение переменной a, после чего выполняются операторы до ключевого слова NEXT. После этого счетчик увеличивается на единицу и сравнивается со значение переменной b, если счетчик меньше, то цикл выполняется еще.

    Легко сделать чтобы программа выводила числа в обратном порядке. Для этого шаг цикла должен быть равен -1 (минус один). В этом случае значение счетчика каждый раз после прохождения цикла будет уменьшено на единицу.

    REM Вывод чисел от b до a


    a=55
    b=107
    FOR I=b TO a STEP -1
    PRINT I
    NEXT
    END

    Пример: Вычислить сумму двухзначных натуральных чисел.

    REM Вычислить сумму двухзначных натуральных чисел
    FOR I=10 TO 99
    s=s+I
    NEXT
    PRINT "Результат = ",s
    END

    Программа перебирает числа от 10 до 99 каждый раз выполняя действия s=s+I. С точки зрения математики это совершенно бессмысленная запись, но рассмотрим её внимательней. 


    Процесс решения вычислительной задачи - это процесс последовательного изменения значений переменных. В итоге - в определенных переменных получается результат. Переменная получает определенное значение в результате присваивания. Вы помните, что присваивание - это занесение в ячейку, отведенную под переменную, определенного значения в результате выполнения команды. 
    В результате операции а=5 переменная а получает значение 5. 
    В результате операции с=a+b переменная с получает значение равное сумме значений переменной а и b
    В результате операции s=s+I переменная s получает значение равное сумме предыдущего значения переменной s и значения переменной I. Т.е., если до операции присваивания значение s было равно 5, а переменной I равно 3, то после операции значение переменной s будет равно 8 (5+3, старое значение s + значение I).
    Значит после выполнения нашей программы в переменной s будет хранится сумма всех двузначных чисел от 10 до 99.

    Пример: вычислить факториал числа а (записывается так: а!). Факториал - это произведение чисел от 1 до а. Например, 5! (факториал пяти) - это 5!=1*2*3*4*5

    REM Вычислить факториал числа
    a=5
    f=1
    FOR I=1 TO a
    f=f*I
    NEXT
    PRINT f
    END

    Вы, конечно, заметили, что до начала цикла мы присвоили переменной f значение равное единице. Иначе бы мы получили в результате ноль.



    Задание 2.

    1. Используя оператор FOR … NEXT, напишите программу расчета и вывода на печать значения функции Y=5/X при изменении аргумента Х от -5 до +5 с шагом 0,5.

    2. Используя оператор FOR … NEXT, напишите программу которая вычеслит сумму первых 10 целых чисел и выдете результат на экран.

    3. Напишите результат выполнения программы:

    10 FOR X=1.5 TO 0 STEP -0.5

    20 PRINT X,X^2

    30 NEXT X

    Массивы. Одномерные массивы.

    При работе с большим числом данных одного типа очень удобно использовать массивы.

    Итак, что же такое массивы...
    Массив, это разновидность переменной. Он дает возможность хранить сколько угодно значений под одним и тем же именем. К каждому конкретному значению массива, необходимо обращаться через числовой индекс.

    Массив - это набор переменных, имеющих одинаковое имя (идентификатор), но различающихся порядковыми номерами (индексами).

    Обычно массивы применяют для группировки переменных, имеющих много общих свойств. Например, если в классе 30 учеников, то имя каждого ученика можно было бы сохранить в отдельной строковой переменной: name1, name2, ... Но вводить 30 новых переменных крайне неудобно. Можно сделать проще: объявить один массив name(), имеющий 30 элементов. В скобках проставляется индекс когда надо обратиться к какому-то конкретному элементу.

    Отсчет элементов массива во многих языках начинается с нуля. Поэтому имя первого (по классному журналу) ученика  будет храниться в переменной name(0), второго - в переменной name(1), а последнего (тридцатого) - в переменной name(29).

    Для того чтобы использовать массив его надо сначала объявить в программе. Для этого используют оператор DIM. По умолчанию (если нет оператора DIM в программе) считается заданным массив из 10 элементов.

    Пример:

    DIM a(100) AS INTEGER


    Это массив из ста элементов, каждый из которых может быть целым числом.
    DIM name(30) AS STRING
    DIM mas(20)
    Это массив из 20 элементов, тип переменных явно не указан.

    DIM mas1(10) AS INTEGER



    mas1

     5

    2

    23

    111

    65

    87

    65

    333

    7

    21

     

    0

    1

    2

    3

    4

    5

    6

    7

    8

    9

     

    Обращение к элементам массива:

    a(24)
    name(5)


    mas(2)
    mas(3)

    Основное преимущество массивов перед обычным набором разноименных переменных состоит в том. что индекс нужного элемента можно записывать не числом, а переменной или даже вычислять по выражению. Это дает возможность использовать массивы внутри циклов - собственно для этого они и были придуманы. Если в программе есть массив, то, скорее всего, в ней же вы найдете и цикл.

    Можно также объявить массив и таким образом:

    DIM mas2(1 TO 10) AS INTEGER



    mas2

     3

    66

    34

    76

    2

    99

    345

    2

    90

    4

     

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

     

    или даже так:

    DIM a2(5 TO 10) AS INTEGER

    В чем отличие? В том что данном случае индексация элементов массива начинается не с нуля, а с нужного вам индекса (в примере массив mаs2 имеет индексы от 1 до 10, массив а2 - от 5 до 10).

    Допустим в классе 30 учеников. Предположим, что для хранения их оценок по предмету создан массив DIM mark(30) AS INTEGER. Следующая программа, поставит каждому учащемуся случайную оценку от 3 до 5. Конечно, так расставлять оценки нельзя, но этот пример показывает, что программа не становиться сложнее, если в классе не 30 учеников, а сто пятьдесят миллионов. Сочетание массивов и циклов позволяет достичь удивительной простоты.

    REM Выставление оценок :)
    DIM mark(30) AS INTEGER
    FOR I=0 TO 29
    mark(I)=3+INT(RND*3)
    NEXT
    END

    mark


     3

    3

    5

    3

    4

    5

    5

    3

    ...

    4

     

    0

    1

    2

    3

    4

    5

    6

    7

    ...

    29

     

    Для создания случайных чисел в языке Basic служит стандартная функция RND. Она создает случайное число в диапазоне от 0 до 1. Умножив его на 3, мы получаем случайное число от 0 до 3. А взяв от него целую часть (с помощью функции INT), получим целое случайное число в диапазоне от 0 до 2. Прибавив к нему число 3, мы поучаем случайную оценку, которая не меньше 3 и не больше 5.

    Пример: Составить программу заполнения массива из 15 элементов случайными числами в диапазоне от 1 до 10. Предусмотреть вывод массива на экран.

    REM Заполнение и вывод массива
    DIM mas(15) AS INTEGER
    FOR I=0 TO 14
    mas(I)=1+INT(RND*10)
    NEXT
    CLS
    PRINT "Вывод массива"
    FOR I=0 TO 14
    PRINT mas(I);
    NEXT
    END

    CLS - очистка экрана. Точка с запятой (;) в операторе PRINT позволяет выводить элементы массива в строку.

    Тоже самое задание, но отличающиеся объявлением массива:

    REM Заполнение и вывод массива
    DIM mas(1 TO 15) AS INTEGER
    FOR I=1 TO 15
    mas(I)=1+INT(RND*10)
    NEXT
    CLS
    PRINT "Вывод массива"
    FOR I=1 TO 15
    PRINT mas(I);
    NEXT
    END

    Всё очень просто. Какой из вариантов использовать решать вам.

    Пример: Вывести количество отрицательных элементов массива.

    REM Вывести количество отрицательных элементов


    INPUT "Введите число элементов массива", n
    DIM mas(n) AS INTEGER
    FOR I=0 TO n-1
    INPUT "Введите элемент массива", mas(I)
    NEXT
    CLS
    PRINT "Вывод массива"
    FOR I=0 TO n-1
    PRINT mas(I);
    NEXT
    FOR I=0 TO n-1
    IF mas(I)<0 THEN k=k+1
    NEXT
    PRINT
    PRINT "Число отрицательных элементов: ",k
    END

    Подсчет количества отрицательных элементов массива происходит в цикле:


    FOR I=0 TO n-1
    IF mas(I)<0 THEN k=k+1
    NEXT

    Пример: Составить программу для вычисления наибольшего элемента массива и его номера.

    REM вычисления наибольшего элемента массива и его номера
    INPUT "Введите число элементов массива", n
    DIM mas(n) AS INTEGER
    FOR I=0 TO n-1
    INPUT "Введите элемент массива", mas(I)
    NEXT
    CLS
    PRINT "Вывод массива"
    FOR I=0 TO n-1
    PRINT mas(I);
    NEXT
    max=mas(0)
    nomer=1
    FOR I=0 TO n-1
    IF mas(I)>max THEN
    max=mas(I)
    nomer=I+1
    END IF
    NEXT
    PRINT
    PRINT "Максимальный элемент: ", max, " с номером ", nomer
    END

    Задание выполняется в строчках:


    max=mas(0)
    nomer=1
    FOR I=0 TO n-1
    IF mas(I)>max THEN
    max=mas(I)
    nomer=I+1
    END IF
    NEXT
    Вначале примем за наибольший элемент - первый элемент массива mas(0). Затем перебирая все элементы по очереди сравниваем их со значение max и если mas(I)>max, то принимаем этот элемент за наибольший.

    Пример: составить программу сортировки массива по возрастанию.

    REM сортировка массива
    INPUT "Введите число элементов массива", n
    DIM mas(n) AS INTEGER
    FOR I=0 TO n-1
    mas(I)=1+INT(RND*10)
    NEXT
    CLS
    PRINT "Вывод массива"
    FOR I=0 TO n-1
    PRINT mas(I);
    NEXT
    REM сортировка массива
    FOR I=0 TO n-2
    FOR J=I+1 TO n-1
    IF mas(I)>mas(J) THEN
    REM если нашли меньший элемент, то обменяем их местами
    a=mas(I)
    mas(I)=mas(J)
    mas(J)=a
    END IF
    NEXT J
    NEXT I
    REM конец сортировки массива
    PRINT
    PRINT "Вывод отсортированного массива"
    FOR I=0 TO n-1
    PRINT mas(I);
    NEXT
    END

    Иногда для ввода данных удобно использовать операторы DATA и READ.


    DATA указывает значения для чтения последующими операторами READ. READ считывает эти значения и присваивает их переменным. RESTORE позволяет READ заново считать значения в указанном операторе DATA.

    DATA константы


    READ переменные

    Пример: ввод массива с использование оператора DATA.

    REM Ввод данных из DATA
    DIM mas(5) AS INTEGER
    DATA 2, -4, 1, 5, 9
    REM ввод массива
    FOR I=0 TO 4
    READ mas(I);
    NEXT
    REM вывод массива
    FOR I=0 TO 4
    PRINT mas(I);
    NEXT
    END

    Задание 3.

    1. Составьте программу для вычисления суммы и произведения элементов массива, больших 4. Массив А состоит из 15 элементов.

    2. Напишите программу для нахождения минимального элемента массива В, состоящего из 20 элементов.

    3. Даны массивы А и В, состоящие из 20 элементов. А) Напишите программу для получения нового массива Х, состоящего из 20 элементов, если известно, что х( I )=2*a( i)-b(i). Б) Напишите программу для получения нового массива У, состоящего из 15 элементов, если известно, что у( I )=a( i)+3*b(i).


    Массивы. Двумерные массивы.

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

    Объявляются двумерные массивы так же, как переменные и одномерные массивы. Например, целочисленный числовой массив, содержащий 3 строк и 4 столбца объявляется следующим образом:

    DIM tabl(3 ,4)

    DIM tabl(3 ,4) AS INTEGER

    tabl


     

    0

    1

    2

    3

     

    0

    1

    2

     

    2

    7

    8

    3

    22

    1

    3

    34

    5

    56

    9

    777

     

     

    DIM tabl1(1 TO 3 ,1 TO 4) AS INTEGER



    tabl1

     

    1

    2

    3

    4

     

    1

    2

    3

     

    2

    7

    8

    3

    22

    1

    3

    34

    5

    56

    9

    777

     

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

    DIM tablum(1 TO 9 ,1 TO 9) AS INTEGER



    tablum

     

    1

    2

    3

    4

    5

    6

    7

    8

    9

     

    1

    2

    3

    4

    5

    6

    7

    8

    9

     

    1

    2

    3

    4

    5

    6

    7

    8

    9

    2

    4

    6

    8

    10

    12

    14

    16

    18

    3

    6

    9

    12

    15

    18

    21

    24

    27

    4

    8

    12

    16

    20

    24

    28

    32

    36

    5

    10

    15

    20

    25

    30

    35

    40

    45

    6

    12

    18

    24

    30

    36

    42

    48

    54

    7

    14

    21

    28

    35

    42

    49

    56

    63

    8

    16

    24

    32

    40

    48

    56

    64

    72

    9

    18

    27

    36

    45

    54

    63

    72

    81

     

    REM Таблица умножения
    DIM tabum(1 TO 9, 1 TO 9) AS INTEGER
    REM Заполнение массива - создание таблицы умножения
    FOR I=1 TO 9
    FOR J=1 TO 9
    tabum(I, J)=I*J
    NEXT J
    NEXT I
    REM Вывод массива на экран в виде таблицы
    FOR I=1 TO 9
    FOR J=1 TO 9
    PRINT tabum(I,J);
    NEXT J
    PRINT
    NEXT I
    END

    Пример: В таблице 3х4 вычислить количество отрицательных элементов, сумму четных элементов, произведение элементов второй строки.



    REM вычислить количество...
    DIM tabl(1 TO 3, 1 TO 4) AS INTEGER
    REM Заполнение массива
    FOR I=1 TO 3
    FOR J=1 TO 4
    INPUT "Введите элемент массива:", tabl(I, J)
    NEXT J
    NEXT I
    REM Вывод массива на экран в виде таблицы
    CLS
    FOR I=1 TO 3
    FOR J=1 TO 4
    PRINT tabl(I,J);
    NEXT J
    PRINT
    NEXT I
    REM требуемые вычисления
    k=0
    s=0
    p=1
    FOR I=1 TO 3
    FOR J=1 TO 4
    IF tabl(I, J)<0 THEN k=k+1
    IF tabl(I, J) MOD 2 = 0 THEN s=s+tabl(I, J)
    IF I=2 THEN p=p*tabl(I, J)
    NEXT J
    NEXT I
    PRINT
    PRINT "результ:"
    PRINT "отрицательных элементов: ", k
    PRINT "сумма четных элементов: ", s
    PRINT "произведение элементов второй строки: ",p
    END

    Коьрта
    Контакты

        Главная страница


    Задания к урокам 13 – 17 (декабрь)

    Скачать 179.16 Kb.