Классификация языков программирования. 


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



ЗНАЕТЕ ЛИ ВЫ?

Классификация языков программирования.



Введение.

Языки программирования.

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

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

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

Программирование в машинных кодах трудоёмко и требует знания архитектуры компьютера, для которого создаётся программа.

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

Язык самого низкого уровня – это язык машинного кодирования, чуть выше лежит уровень языка Ассемблера, далее идут проблемно-ориентированные языки (BASIC, FORTRAN, COBOL, PASCAL, C...).

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

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

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


 

Этапы создания программы

Программу на языке программирования записывают в виде текстового файла в любом простом текстовом редакторе или в редакторе, имеющимся в используемой инструментальной среде программирования. Такой программный код, записанный на языке высокого уровня, называют исходным текстом программы. Исходный текст программы должен быть преобразован в команды понятные процессору, эти преобразования выполняют программы называемые трансляторами. Транслятор переводит исходные модули в последовательность машинных кодов – объектный код программы.

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

Классификация языков программирования.

Языки программирования делятся на три основных класса:

· процедурные (большинство классических языков программирования, например: C, Basic, Fortran);

· логические (ЛИСП, Пролог);

· объектно-ориентированные (C++, Java, Object Pascal).

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



Программирование линейных алгоритмов

Структура программы.

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

Функция – это коллективное имя для некоторой группы описаний и операторов, заключённых в фигурные скобки { } и являющихся телом функции.

В общем виде программа имеет следующую структуру:

#<Директивы препроцессора>

main()

{

< тело функции main>

}

function1()

{

< тело функции function1>

}

function2()

{

< тело функции function2>

}

...

Директивы препроцессора.

Препроцессор представляет собой текстовый процессор, осуществляющий обработку исходного файла- программы, до его поступления на вход компилятора.

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

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

 

2.2.1 Включение в текст программы внешнего файла.

Самой важной для программиста директивой препроцессора, несомненно, является директива # include. С её помощью препроцессор даёт распоряжение включить файл, указанный в качестве аргумента в текущий файл. В большинстве случаев включается так называемый файл-заголовок, который содержит объявления, символьные константы, макросы и/или определения типов. Включение файла-заголовка может происходить в любом месте текущего файла, однако, существует соглашение, включение происходит в начале файла. Использование файла-заголовка целесообразно для программы, состоящей из нескольких исходных файлов.

Включение текста внешнего файла в исходный файл осуществляется директивой # include.

Форматы записи директивы:

1)

# include <имя файла>   

#include <math.h>

Препроцессор заменяет эту строку содержимым файла math.h. Угловые скобки означают, что файл math.h будет взят из некоторого стандартного каталога. Текущий каталог не просматривается.

Стандартно подключаемые библиотеки:

<stdio.h> ввода/вывода;

<conio.h> интегрированная среда;

<stdlib.h> стандартных функций;

<math.h> математическая;

<sting.h> работа со строками символов;

<time.h> определение дат и времени;

<graphics.h> графическая.

 

2)

 # include “имя файла”

Имя файла должно удовлетворять требованиям к именам DOS (допустима обратная наклонная черта). Поиск осуществляется сначала в том каталоге, в котором находится текущий исходный файл, а в случае неудачи – в стандартно каталоге. 

#include “ABC”

Препроцессор заменяет эту строку содержимым файла ABC.

3)

# include “диск:\каталог\имя файла”

Компилятор осуществляет поиск только по указанному пути.

#include “C:\prog\tools\typen.h”

 

2.2.2 Включить определение.

С помощью директивы препроцессора # define определяется макрос. Макроопределение имеет следующую форму:

 

#define <имя_ макроса> последовательность_лексем           

 или

#define <идентификатор (параметр_1, параметр_2,… параметр_N,)> <блок_текста

                                                                                                                             замены>

Директива # define указывает препроцессору на то, что в тексте программы <идентификатор> (макрос) должен быть заменён на <блок_текста_замены>.

#define PI 3.1416

#defineMAX_INT 32767

Идентификаторы PI и MAX_INT заменяются препроцессором на соответствующие им числовые константы.

 Определение констант, т.е. применение идентификаторов символьных констант для замены числовых констант, упрощает процесс внесения последующих изменений, так как гораздо проще один раз изменить строку определения, чем искать и изменять значения константы во всём тексте программы.

  

 При второй форме записи директивы # define препроцессор осуществляет замену <идентификатора> блоком текста замены с подстановкой фактических параметров вместо формальных, определённых в директиве. Формальные параметры в блоке текста замены показывают те места, куда должны быть подставлены фактические.

#define summa(x,y) (x+y)

выражение в тексте программы summa(2,3) заменяется текстом summa(2+3)

 

Идентификаторы.

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

Идентификаторы состоят из прописных и строчных букв латинского алфавита, цифр и символов подчёркивания. Длина идентификатора не ограничена, но только первые 32 являются значимыми.

Прописные и строчные буквы рассматриваются как различные буквы (index, Index, INDEX- разные идентификаторы). Нельзя использовать зарезервированные слова.

 

Константы.

Константа это такое данное в программе, которое в процессе работы программы не меняет своё значение.

Константы обычно обозначаются большими буквами (LOWER, UPPER, STEP).

Язык С поддерживает целые, длинные, с плавающей точкой, символьные и строковые константы.

1) Целые константы

Десятичные цифры 0-9 (первая цифра ≠0) 12 111 956 1007

8-ричные  цифры 0-7 (начинаются с 0)  012 0111 0956 01007

16-ричные цифры 0-9, буквы A-F (начинаются с 0 x или 0 X) 0х12=18, 0Х12=18,

                                                                                                       0х2f=47

2) Длинные целые константы явно определяются латинской буквой l или L, стоящей после константы. 12 L, 012 l, 0x12 l

3) Константы с плавающей точкой всегда представляются числом с плавающей точкой двойной точности, т.е. имеющих тип double.

Общийвид mmmm.nnnn E xx, любая часть может быть опущена.

Пример: 345.=345        3.1459  1.2Е5 = 120000 307е-5

4) Символьные константы – состоят из одного символа кода ASCII, заключённого в апострофы.
Всегда тип int – целые 'а', '\', '7'

Специальные управляющие символы:

‘\ n’ – новая строка;

‘\r’ - возврат каретки;

‘\t’ - горизонтальная табуляция;

‘\v ’ вертикальная табуляция.

 

5) Строковые константы – состоит из последовательности символов кодов ASCII, заключённых в кавычки («как, например, эта»). Она располагается обязательно на одной строке. Для продолжения символьной последовательности на новой строке необходимо использовать символ новой строки ‘\ n’.

    Всегда тип char.

Пример1: char *p=”Это пример того как С“

                        ” будет автоматически \n выполнять конкатенацию“

                        ”длинных строк \n делая наглядным общий вид программы “;

                 puts(p);

Типы данных.

Целочисленные типы

char - символьный, целый длиной не менее 8 бит;

short int - короткий целый (можно short);

int – целый;

long - длинный целый.

Каждый из целочисленных типов может быть определён либо как знаковый signed либо как беззнаковый unsigned (по умолчанию signed).

Вещественные типы

float - вещественный одинарной точности;

double -вещественный удвоенной точности;

long double - вещественный максимальной точности;

 

void – без типа.

                        Основные типы данных                                 Таблица

Тип данных

Размер, бит Диапазон значений Спецификатор

Char

8 -128 - +127 %c, %d, %o, %x

Unsigned char

8 0 - 255 %u

Int

16 -32768 - +32767 %d, %i, %o,%x

Unsigned int

16 0- 65535 %u

Long

32 -2147483648 - +2147483647 %ld

Float

32 3.4E-38 - 3.4E+38 %f, %e

Double

64 1.7E-308 - 1.7E+308 %lf, %e

Pointer

 

16   32 указатели типа near,_ cs,_ ds, _ es, _ ss указатели типа far, huge   %p
  short int 2

-32 768 / 32 767

 
  unsigned short int 2

0 / 65 535

 
  int 4

-2 147 483 648 / 2 147 483 647

 
  unsigned int 4

0 / 4 294 967 295

 
  long int 4

-2 147 483 648 / 2 147 483 647

 
  unsigned long int 4

0 / 4 294 967 295

 
 

типы данных с плавающей точкой

 
  float 4

-2 147 483 648.0 / 2 147 483 647.0

 
  long float 8

-9 223 372 036 854 775 808.0 / 9 223 372 036 854 775 807.0

 
  double 8

-9 223 372 036 854 775 808.0 / 9 223 372 036 854 775 807.0

 
           

 

 

Инициализация переменных.

При определении переменных их можно инициализировать, т.е. присваивать переменным какие – либо значения.

Пример 2: int i=1;

           int k=5;

           char ch1=’*’;

Массивы так инициализировать нельзя.

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

 Пример 3: i= k=0;

либо в другом месте

Пример 4: i=1; k=5;

 

Функции ввода/вывода.

Функция вывода.

В языке С имеется большой набор различных функций ввода / вывода.

Формат функции вывода:

printf (“ <управляющая_строка> [, список_аргументов] );

 

список_аргументов – последовательность констант, переменных или выражений, значения которых выводятся на экран дисплея в соответствии с форматом управляющей строки;

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

Пример 5: вывести на экран числа 4, 19.1, 27

#include <stdio.h>

#include <conio.h>

void main()

{ char a,b;

float c;

a=4; b=27; c=19.1;

clrscr();

printf (“\n a=%d b=%x c=%f”,a,b,c);

getch();

}

 

2.6.2 Спецификации преобразования.

% [ <выравнивание>] [ <ширина>] [ <доп_признаки>] <символ_преобразования>

выравнивание вправо – по умолчания;

                        влево - символ ' -'.

ширина определяет минимальное число выводимых символов. Она может задаваться целым числом. Символ * обозначает, что число выводимых символов будет определяться текущим значением переменной.

  Пример: printf(“ %d”,width_number);

Дополнительные признаки

+ - печать знака «+»;

. число – количество знаков после точки в экспоненциальном виде;

l – указывает, что соответствующий аргумент имеет тип long;

L -double long.

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

d –аргумент преобразуется в десятичное представление (% d -> 43, %+ d -> +43,

                                                                                             % d -> ь43);

o- аргумент преобразуется в восьмеричное представление (% o-> 0 5627);

x, X- аргумент преобразуется в шестнадцатеричное представление(% x -> 2e59a3d,

                                                                                                              % X -> 2E59A3D);

c- значением аргумента является символ ( ->А, %3с ->ььА, %-3с ->Аьь);

s- значением аргумента является строка символов (%6 s -> abcdef, %6.2 s -> ьььь ab,

                                                                                   %-6.2 s-> abьььь);

e - значением аргумента является величина типа float или double в форме с плавающей точкой (%.3е -> 1.235е+03, %.4е ->1.2345+03);

f - значением аргумента является величина в форме с фиксированной точкой

  (%5.2 f -> 679.41);

u - значением аргумента является целое безнаковое число (% u -> 77626577);

p - значением аргумента является указатель (адрес).

 

Ввод данных.

scanf (“управляющая строка”, список аргументов);

Аргументами scanf должны быть указателями на соответствующие значения (для этого перед именем переменной, не являющейся указателем, записывается символ взятия адреса &).

Управляющая строка содержит спецификации преобразования и используется для установления количества и типа аргументов. В неё могут включаться:

· пробелы, символы табуляции и перехода на новую строку (все они игнорируются при вводе);

· спецификации преобразования, состоящие из знака %, возможно символа запрещения (*), возможно числа, задающего максимальный размер поля, и самого символа преобразования.

Примеры 6:

1. float x;

char id[8+1];

int n;

scanf (“%f % * f %8[a-z 0-9]%d”,&x, id, &n);

ввод  12.45 1048.73              ae405271                              438

вывод 12.45 символы             переменной id     438

                 пропускаются             присваивается          переменной n присваивается        

                                             строка символов ae405271 значение 438

 

2.int i;

float x;

 char name[50];

 scanf(“%d %f %s”, &i, &x, name); //name уже адрес

ввод  25      54.32е-01                  monday

вывод 25       5.432                         Monday

ввод по адресу переменной i, x

 

Арифметические операции.

В языке С существуют арифметические операции сложения +, вычитания -, умножения *, деления /, деления по модулю %.

Особенности операции деления. Эта операция даёт целый результат, если оба операнда целые. Чтобы получить действительный результат, необходимо иметь хотя бы один действительный операнд.

9/5 =1 9./5 =1.8.

Деления по модулю a % b даёт остаток от целочисленного деления a на b. 9 % 5=4.

В языке существуют две нетрадиционные операции – операция увеличения (инкремента) «++» и операция уменьшения (декремента) «--» на единицу значения операнда. Операции имеют префиксную (++а или - - а значениеоперации стоит до операнда)и постфиксную (а++ или а-- значениеоперации стоит после операнда) формы записи. Префиксная - значение операнда а сначала изменяется, а затем используется для дальнейших вычислений. Постфиксная - значение операнда а сначала используется, а затем изменяется.

sum=a + d++;  // сложить числа a и d, присвоить результат sum

        // и увеличить d на единицу

sum=a + ++d; //увеличить d на единицу, сложить числа a и d,

        //присвоить результат sum

а=5;

х=++а; // х=6, а=6 сначала происходит увеличение а на 1, а затем

  // использование операнда в выражении

х=а++; // х=5, а=6 сначала использование операнда в выражении,

  // затем увеличение а на 1

Приоритет операций * и / выше, чем у операций сложения и вычитания => требуется применение скобок.

Язык C поддерживает стандартные механизмы по автоматическому преобразованию одного типа данных в другой. Если в выражении присутствуют операнды различных типов, то они преобразуются в некоторый общий тип. (Тип результата при выполнении любой арифметической операции с двумя переменными а и в зависит от типа этих переменных)

 

а             в char int long float double
char char int long float double
int int int long float double
long long long long float double
float float float float float double
double double double double double double

 


 

Примеры составления линейных программ.

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

Алгоритм программы с линейной структурой может иметь вид:

  

1. Написать программу вычисления площади параллелограмма.

Рекомендуемый вид экрана:

Вычисление площади параллелограмма

Введите исходные данные:

Длина (см) -> 9

Ширина (см) -> 7.5

Площадь параллелограмма: 67.50 кв.см.

 

#include <stdio.h>

#include <conio.h>

void main()

{ char len;

float w,s;

clrscr();

printf(“Вычисление площади параллелограмма \nВведите исходные данные);

printf(“\nДлина (см) ->);

scanf (“%d”,&len);

printf(“\Ширина (см) ->);

scanf (“%f”,&w);

s=len*w;

printf(“\n Площадь параллелограмма: % 6.2f кв.см.->”,s);

 getch();

}

 

2. Дано расстояние в сантиметрах. Найти число полных метров в нём.

#include <stdio.h>

#include <conio.h>

void main()

{ char len;

clrscr();

printf(“\nВведите расстояние в сантиметрах);

scanf (“%d”,&len);

len=len/100;

printf(“\n Число полных метров: % d ->”,len);

 getch();

}

 

3. Описать переменную k и записать выражение, вычисляющее сумму цифр числа, считая, что переменная содержит двухзначное число.

#include <stdio.h>

#include <conio.h>

void main()

{ char k,k1;

clrscr();

printf(“\nВведите двухзначное число ->”);

scanf (“%d”,&k);

k1=k/10;

printf(“\n Число десятков равно: % d ”,k1);

k1=k%10;

printf(“\n Число единиц равно: % d ”,k1);

getch();

}

 

Логические операции.

Для получения логического значения («истинно», кодируемое цифрой 1, или «ложно», кодируемое цифрой 0) используются операции отношения, логические и побитовые операции.

В языке С используется обычный набор операций отношений: < (меньше), <= (меньше или равно), > (больше), >= (больше или равно), == (равно) и != (не равно).

Логическое выражение в виде отношения принимает значение 1 (истинно), если оно удовлетворяется для входящих в него операндов, и 0 (ложно) в противном случае, поэтому выражение 5>2 имеет значение 1, а 7<=00.

К логическим операциям относятся логическое И или логическое умножение (&&), логическое ИЛИ или логическое сложение (| |), исключающее ИЛИ (^)и логическое отрицание (!).

Выражения с участием логических связок будут раскрываться слева направо и как только определяется истинность или ложность всего выражения вычисления заканчиваются.

 Если операнд операции отрицания равен нулю, то результат операции будет равен единице; если же значение операнда отлично от нуля, результат операции равен нулю.

if (!good)

printf(“not good”);

 

Операция логического умножения даёт значение «истинно», если оба операнды истинны, т.е. отличны от нуля; в противном случае результат операции будет равен нулю, т.е. ложен.

if (p!=NULL && p>7) //сначала проверяется // значение b 1, значение b 2 проверяется только в том //случае, если значение b1-истинно

Логическое сложение вырабатывает значение 1 (истинно), если хотя бы один из операндов истинен (отличен от нуля) и 0 (ложно) в противном случае.

if (x<a||x>b)

printf (“out of range”);

 

Библиотечные функции.

Функция

Обозначение функции

Тип

Файл описания

функции аргумента

Абсолютное значение

abs(x) int int <stdlib.h>
fabs(x) double double <math.h>
Косинус cos(x) double double <math.h>
Синус sin(x) double double <math.h>
Округление до большего целого ceil(x) double double <math.h>
Округление до меньшего целого floor(x) double double <math.h>
Степенная функция XY pow(x) double double <math.h>
Степенная функция 10n pow10(x) double int <math.h>
Логарифм натуральный log(x) double double <math.h>
Логарифм десятичный log10(x) double double <math.h>
Корень квадратный sqrt(x) double double <math.h>
Остаток от деления Х на Y fmod(x) double double <math.h>
Генератор случайных чисел в диапазоне от 0 до 32767 rand(x) int   <stdlib.h>

Условный оператор.

Форматы оператора.

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

Форматы оператора:

I f(выражение)

   оператор_1;

[ else оператор_2;]   

Пример 2. Оператор, вычисляющий у=|х|.

if (X>=0) y=x;

else  y=-x;

Вложенная конструкция if.

В качестве внутренних операторов оператор i f может использовать любой оператор, в том числе и условный. То есть оператор i f может иметь вложенную конструкцию, в этом случае часть else связывается с ближайшим предыдущим i f в том же блоке, не имеющим части else.

Примеры 3.

1)if(n>0)   // 1 оператор if

if(a>b) z=a; // 2 оператор if

else z=b; // часть else относится к 2-ому оператору if

2)if (n>0)  // 1 оператор if

  { if (a>b) z=a; // 2 оператор if

}

else z=b; // часть else относится к 1-ому оператору if

 

Если необходимо выполнить одновременно несколько операторов, то используется составной оператор или блок, представляющий собой группу операторов, заключённую в фигурные скобки { }.

Многоуровневые вложения.

Пример 4. Если х является символом a, то y=1. Если х является символом b, то y=2, z=3. Если х является символом с, то y=4, в остальных случаях вывести на печать error.

 

i f(выражение_1)                           if (x==’ a’)

   оператор_1;                                y=1;

else i f(выражение _2)                    else if (x==’b’)

   оператор _2;                                    { y=2; z=3;

                                                                   }

   else i f(выражение _3)                      else if (x==’c’)

           оператор _3;                                        y=4;

           else оператор _4;                                 else printf(“error”);

Примеры записи логических выражений, истинных при выполнении указанных условий.

Условие Запись условия на языке С
Целое число а – чётное? a % 2==0
Целое число а – нечётное? a % 2==1
Целое число k кратно 7? k % 7=0
Каждое из чисел a, b положительно? (a>=0) &&(b>=0)
Только одно из чисел a, b является положительным? ((a>=0) && (b<0)) || ((a<0) && (b>=0))
Хотя бы одно из чисел a, b, c является отрицательным? (a<0) || (b<0) || (c<0)
Число х удовлетворяет условию a <x <b? (x>a) && (x<b)
Число х имеет значение в промежутке [1,3]? (x>=1) && (x<=3)
Целые числа a и b имеют одинаковую чётность? ((a % 2==0) && (b %2==0)) ||((a % 2==1) && (b % 2==1)) или (a % 2==b % 2)
Точка с координатами (x,y) лежит в круге радиуса r с центром в точке (a,b)? (x-a)*(x-a) +(y-b)*(y-b) < r*r
Уравнение ax2 + bx+c=0 не имеет действительных корней? b*b -4*a*c < 0
Точка (x,y) принадлежит первому или третьему квадранту? ((x >0) and (y > 0)) or ((x <0) and (y < 0))
Точка (x,y) принадлежит внешности единичного круга с центром в начале координат или его второй четверти? (x*x+y*y>1) || ((x*x+y*y<=1) && (x<0) && (y>0))
Целые числа a и b являются взаимопротивоположными? a == - b
Целые числа a и b являются взаимообратными? a * b = =1
Число a больше среднего арифметического чисел b, c, d? a > (b + c + d) / 3

Условия в графике

 Для определения, входит ли точка с заданными координатами в определенное множество на плоскости, как правило, нужно проверить одновременное выполнение нескольких неравенств. Вот пример:

Попадает ли точка (x, y) в квадрат со стороной 10 и центром в начале координат? Квадрат – это пересечение двух множеств, заданных двойными неравенствами:

 

Операция & в математике называется конъюнкцией. Если мы запишем два условия, соединяя их операцией &, это означает, что полученное «большое» условие будет истинным только если оба «маленьких» условия будут истинны. Конъюнкция требует одновременного выполнения условий. В алгебре конъюнкции соответствует система утверждений (уравнений или неравенств).

С помощью операции & описываются пересечения множеств, поскольку точка входит в пересечение множеств, если она входит в оба множества ОДНОВРЕМЕННО.

 

Попадает ли точка (x, y) в множество с двойной штриховкой? Это множество является пересечением круга с центром в точке (5, 0) и радиусом 5*Sqrt(2) и квадрата с центром в начале координат и стороной 5.

Как проверить, попадает ли точка в круг? Круг задается неравенством (x – 5)2 + y2 <= 50

 

if ((x – 5)* (x – 5) + y*y) <= 50) printf (“Yes”)

else                                              printf (“No”);

 

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

 

if ((-5 <= x) && (x <= 5) && (-5 <= y) && (y <= 5)) && ((x – 5)* (x – 5) + y*y) <= 50)) then

printf (“Yes”)

else printf (“No”);

 

Каждое условие заключается в скобки: (условие для квадрата) && (условие для круга).

Как записать условие для этой фигуры?

3.2.7 Использование операции | (ИЛИ).

 

Наравне с логическим «и» или конъюнкцией существует логическое «или», дизъюнкция, операция |. В отличие от операции &, эта операция обозначает выполнение хотя бы одного из условий. Выражение «(x < 3) || (y > 5)» читается как «x больше трех или y больше пяти» и является истинным в случае выполнения хотя бы одного из условий. В алгебре дизъюнкции соответствует совокупность утверждений (уравнений или неравенств).

Какой смысл имеет операция || применительно к множествам?

Если мы запишем условие для пересечения круга и квадрата, заменив & между ними на |, мы получим следующее условие: точка принадлежит квадрату или кругу.

 

if( ((-5 <= x) && (x <= 5) && (-5 <= y) && (y <= 5)) || (Sqr(x – 5) + Sqr(y) <= 50))

printf (“Yes”);

else printf (“No”);

 

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

 

Оператор-переключатель.

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

switch ( выражение )

{

case< константа_1 >:< операторы_1 >;

case< константа_2 >:< операторы_2 >;

...

case< константа_n >:< операторы_n >;

 [ default: < операторы >;]

}

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

Операторы, связанные с меткой default выполняются, если ни одна из констант в операторах case не равна значению выражения. Вариант default необязательно должен быть последним.

Если ни одна из констант не соответствует значению выражения и вариант default отсутствует, то не выполняется никаких действий.

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

break – оператор завершения, прекращает выполнение ближайшего внешнего оператора switch, while, do или for.  

Пример 5. Если х является символом a, тораспечатать case А. Если х является символом b или символом с, тораспечатать case B or C, в остальных распечатать Not case А, B or C.

switch (x)

{

case’A’:printf(“case A\n”);

case’B’:

case’C’:printf(“case B or C\n”);

default: printf(“Not case А, B or C \n”);

}

Пример 6. Составить программу, выполняющую функции простейшего арифмометра



Поделиться:


Читайте также:




Последнее изменение этой страницы: 2020-12-09; просмотров: 182; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

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