Программирование полного и неполного ветвления 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Программирование полного и неполного ветвления



Сравните запись алгоритма БИД1 из предыдущего параграфа с соответствующей программой.

алг БИД1 вещ А, В, С нач ввод А, В если А>В то С:=А иначе С:=В кв вывод С кон Program BID1; var А, В, С: real; begin readln(А, В); if A>B then C:=A else C:=B; writeln(С) end.

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

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

< (меньше); > (больше); <= (меньше или равно); <= (больше или равно); = (равно); <> (не равно).

А теперь запрограммируем на Паскале алгоритм БИД2, в котором использовано неполное ветвление.

алг БИД2 вещ А, В, С нач ввод А, В С:=А если В > А то С:=B кв вывод С кон Program BID2; var А, В, С: real; begin readln(А, В); С:=А; if B>A then C:=B; write(С) end.

 

Программирование циклов (на примере языка программирования Паскаль или Си++).

Цикл for

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

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

Цикл for существует в двух формах:

for счетчик:=значение to конечное_значение do тело_цикла;

 

for счетчик:=значение downto конечное_значение do тело_цикла;

Счетчик – это переменная любого из перечисляемых типов (целого, булевого, символьного, диапазонного, перечисления). Начальные и конечные значения могут быть представлены не только значениями, но и выражениями, возвращающими совместимые с типом счетчика типы данных. Если между начальным и конечным выражением указано служебное слово to, то на каждом шаге цикла значение параметра будет увеличиваться на единицу. Если же указано downto, то значение параметра будет уменьшаться на единицу.

Количество итераций цикла for известно именно до его выполнения, но не до выполнения всей программы. Так в примере ниже, количество выполнений цикла определяется пользователем. Значение присваивается переменной, а затем используется в заголовке цикла. Но когда оно используется, циклу уже точно известно, сколько раз надо выполниться.

var i, n: integer; begin write('Количествознаков: ');readln(n); for i:= 1 to n do write('(*) '); readln end.

Цикл while

Цикл while является циклом с предусловием. В заголовке цикла находится логическое выражение. Если оно возвращает true, то тело цикла выполняется, если false – то нет.

Когда тело цикла было выполнено, то ход программы снова возвращается в заголовок цикла. Условие выполнения тела снова проверяется (находится значение логического выражения). Тело цикла выполнится столько раз, сколько раз логическое выражение вернет true. Поэтому очень важно в теле цикла предусмотреть изменение переменной, фигурирующей в заголовке цикла, таким образом, чтобы когда-нибудь обязательно наступала ситуация false. Иначе произойдет так называемое зацикливание, одна из самых неприятных ошибок в программировании.

var i, n: integer; begin write('Количествознаков: ');readln(n); i:=1; while i <= n dobegin write('(*) ');i:= i + 1 end; readln end.

Цикл repeat

Цикл while может не выполниться ни разу, если логическое выражение в заголовке сразу вернуло false. Однако такая ситуация не всегда может быть приемлемой. Бывает, что тело цикла должно выполниться хотя бы один раз, не зависимо оттого, что вернет логическое выражение. В таком случае используется цикл repeat – цикл с постусловием.

В цикле repeat логическое выражение стоит после тела цикла. Причем, в отличие от цикла while, здесь всё наоборот: в случае true происходит выход из цикла, в случае false – его повторение.

var i, n: integer; begin write('Количествознаков: ');readln(n); i:=1; repeat write('(*) ');i:= i + 1 until i > n; readln end.

 

Булевы функции http://www.univer.omsk.su/departs/compsci/kursi/disc/fr_bools.htm

 

 

Вариант 1.

Задание 1. Выполнить перевод числа 5484 в двоичную систему счисления, выполнить контрольную проверку перевода. Осуществить операцию сложения двоичных чисел 10011001001001 и 1110001110101. Результат операции представить в десятичном виде.

Ответ1: 000000000001010101101100.

Ответ2: 100001010111110 в десятичной 17086

 

 

Вариант 4

Задание 1. Выполнить проверку на наличие ошибок и дефрагментацию жесткого диска при помощи стандартных средств операционной системы Windows.

Задание 2. Разработать алгоритм и программу для решения задачи: дано натуральное число N. Определить самую большую цифру и ее позицию в числе (например, N=573863, наибольшей является цифра 8, ее позиция четвертая слева).

Входные данные: N - целое число.
Выходные данные: max - значение наибольшей цифры в числе, pos - позиция этой цифры в числе.
Промежуточные данные: i - параметр цикла, kol - количество цифр в числе, M - переменная для временного хранения значения N.

Разобьем решение этой задачи на два этапа. Вначале найдем количество цифр в заданном числе (рис. 2.20), а затем определим наибольшую цифру и ее позицию (рис. 2.21).

Рис. 2.20. Определение количества цифр в числе

Для того, чтобы подсчитать количество цифр в числе, необходимо определить, сколько раз заданное число можно разделить на десять нацело. Например, пусть N=12345, тогда количество цифр kol = 5. Результаты вычислений сведены в таблицу 2.5.

Таблица 2.5. Определение количества цифр числа
kol N
   
  12345 div10=1234
  1234 div 10=123
  123 div 10=12
  12 div 10=1
  1 div 10=0

Процесс определения текущей цифры числа N=12345 представлен в таблице 2.6.

 
i Число М Цифра
    12345 mod 10 = 5
  12345 div10=1234 1234 mod 10 = 4
  1234 div 10=123 123 mod 10 = 3
  123 div 10=12 12 mod 10 = 2
  12 div 10=1 1 mod 10 = 1

 

Вариант 6

Задание 1. Подключить к ПЭВМ сканер, установить необходимое ПО и выполнить сканирование предложенного документа, с последующейконвертацией его в формат текстового редактораWORD.

Задание 2. Разработать алгоритм и программу для решения задачи: вводится последовательность целых чисел, цифра 0 – ее конец. Найти минимальное среди положительных значений, определить количество положительных значений.

#include "stdafx.h"

#include <iostream.h>

#include <math.h>

#include <windows.h>

#include <conio.h>

voidcout_rus(char text[])

{

char buffer[256];

CharToOem(text,buffer);

cout<<buffer;

}

 

int main(intargc, char* argv[])

{

intN,pr,k,min;

cout<<"\n N=";

cin>>N;

for(pr=k=0;N!=0;cout<<"N=",cin>>N)

if(N>0)

if (pr==0)

{

pr=1;

min=N;

k=1;

}

else

if (N<min)

{

min=N;

k=1;

}

else

if (N==min) k++;

if (pr)

{cout<<min;

cout_rus(" - минимальное число последовательности, таких чисел\t");

cout<<k<<endl;

}

else

cout<<"В последовательности нет положительных чисел";

 

}

 

N=3

N=5

N=6

N=2

N=-4

N=5

N=2

N=-2

N=2

N=13

N=10

N=-6

N=2

N=0

2 - минимальное число последовательности, таких чисел 4

 

Вариант 7

Задание 1. Подключить к ПЭВМ модем, установить необходимое программное обеспечение и выполнить его тестирование.

Задание 2. Разработать алгоритм и программу для решения задачи: упорядочить элементы в массиве по возрастанию их значений методом «пузырька».

 

Const

m =10;

 

Var

arr: array [1..m] ofinteger;

i, j, k: integer;

 

Begin

randomize;

 

write('Исходныймассив: ');

for i:= 1 to m dobegin

arr[i]:= random(256);

write(arr[i]:4);

end;

writeln; writeln;

 

 

for i:= 1 to m-1 do

for j:= 1 to m-i do

if arr[j]>arr[j+1] thenbegin

k:=arr[j];

arr[j]:=arr[j+1];

arr[j+1]:= k

end;

 

write('Отсортированныймассив: ');

for i:= 1 to m do

write(arr[i]:4);

 

writeln;

 

readln

end.

 

 

Вариант 11

Задание 1. По заданным IP-адресу узла и маске определите адрес сети.

IP –адрес узла: 217.233.232.3 Маска: 255.255.252.0

 

Решение:

IP-адрес состоит из 4-х байт.

255=111111112 (8 единиц, т.к. 28=256).

Поразрядная конъюнкция с IP-адресом узла, где байт маски равен 255 в итоге даст байт IP-адреса узла, т.к. конъюнкция 111111112 и любого числа даст в итоге это последнее число.

Поразрядная конъюнкция с IP-адресом узла, где байт маски равен 0 в итоге даст 0, т.к. конъюнкция 0 и любого числа даст в итоге 0.

IP-адрес сети:217.233.х.0, где х-поразрядная конъюнкция 232 и 252.

Переведем числа 232 и 252 в двоичную систему счисления:

232=255-23=255-16-7=

252=255-3=

 

252Λ232=

Видно, что поразрядная конъюнкция равна второму слагаемому, т.е. 232.

IP-адрес сети: 217.233.232.0.

Получаем: СDEA.

 

Задание 2. Запись десятичного числа в системах счисления с основаниями 3 и 5 в обоих случаях имеет последней цифрой 0. Какое минимальное натуральное десятичное число удовлетворяет этому требованию?

 



Поделиться:


Последнее изменение этой страницы: 2017-02-21; просмотров: 506; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.145.8.141 (0.044 с.)