Объявление переменных. Типы данных

Полетаев Д.И.

Полетаев И.А.

Технологии программирования

Задание для контрольной работы.

Задание

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

Исходные данные

Две функции выбираются согласно номеру варианта из таблицы заданий. Диапазон аргумента (Х) запрашивается у пользователя во время выполнения программы.

Функциональность

Для заданных исходных данных программа должна выполнять следующие действия:

  • вывод на экран таблицы значений функций;
  • запись в файл в текстовом формате таблицы значений функций;
  • вывод на экран графика первой функции;
  • вывод на экран графика второй функции.

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

4. Требования к оформлению таблицы

4.1. Расчет производится для двадцати одного значения аргумента, аргумент изменяется равномерно. Крайние значения должны совпадать с границами интервала, введенными пользователем.

4.2. Таблица должна содержать 3 столбца: значение первого аргумента, значения первой функции при данном значении аргумента, значения второй функции при данном значении аргумента.

4.3. Выше таблицы должны быть выведены функции в виде “f1(x) = …”. Таблица должна иметь «шапку».

4.4. Если при каком-либо значении аргумента невозможно вычислить значение функции, в столбце значения функции ставится прочерк.

5. Требования к оформлению графика

5.1. График строится по 21-му значению аргумента. Требования к аргументу аналогичны п. 4.1.

5.2. График выводится в текстовом или графическом режиме на усмотрение разработчика.

5.3. График должен иметь координатные оси. На каждой оси должно быть подписано не менее трех значений.

5.4. Если при каком-либо значении аргумента невозможно вычислить значение функции, данная точка на экран не выводится.

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

Требования к тексту программы

6.1. Программа выполняется на языке С или С++ в любой удобной Вам среде разработки.

6.2. Программа должна состоять из нескольких функций.

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

Содержание отчета

· Задание.

· Краткое описание структуры программы.

· Блок-схему обобщенного алгоритма функционирования.

· Текст программы с комментариями.




Варианты заданий

Последние две цифры номера зач. книжки Функции
00, 20, 40, 60, 80 Объявление переменных. Типы данных - student2.ru
01, 21, 41, 61, 81 Объявление переменных. Типы данных - student2.ru
02, 22, 42, 62, 82 Объявление переменных. Типы данных - student2.ru
03, 23, 43, 63, 83 Объявление переменных. Типы данных - student2.ru
04, 24, 44, 64, 84 Объявление переменных. Типы данных - student2.ru
05, 25, 45, 65, 85 Объявление переменных. Типы данных - student2.ru
06, 26, 46, 66, 86 Объявление переменных. Типы данных - student2.ru
07, 27, 47, 67, 87 Объявление переменных. Типы данных - student2.ru
08, 28, 48, 68, 88 Объявление переменных. Типы данных - student2.ru
09, 29, 49, 69, 89 Объявление переменных. Типы данных - student2.ru
10, 30, 50, 70, 90 Объявление переменных. Типы данных - student2.ru
11, 31, 51, 71, 91 Объявление переменных. Типы данных - student2.ru
12, 32, 52, 72, 92 Объявление переменных. Типы данных - student2.ru
13, 33, 53, 73, 93 Объявление переменных. Типы данных - student2.ru
14, 34, 54, 74, 94 Объявление переменных. Типы данных - student2.ru
15, 35, 55, 75, 95 Объявление переменных. Типы данных - student2.ru
16, 36, 56 ,76 ,96 Объявление переменных. Типы данных - student2.ru
17, 37, 57, 77, 97 Объявление переменных. Типы данных - student2.ru
18, 38, 58, 78, 98 Объявление переменных. Типы данных - student2.ru
19, 39, 59, 79, 99 Объявление переменных. Типы данных - student2.ru

Краткая справка по языкам «С», «С++»

Алфавит

В алфавит языков С, С++ входят:

- прописные и строчные буквы латинского алфавита;

- арабские цифры;

- специальные знаки: “ { } , | [ ] ( ) + - / % \ ; ‘ : ? < = > _ ! & # ~ ^ . *

Некоторые среды разработки, например, Ms Visual Studio 2008, позволяют использовать национальные шрифты, например, кириллицу.

Из символов алфавита формируются следующие лексемы языка.

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

языках С, С++ чувствительны к регистру букв, в отличие, например, от ЯВУ Pascal.

Особым видом идентификаторов являются ключевые (служебные) слова – они зарезервированы для специального использования и не могут быть переопределены.

2. Константы.

3. Знаки операций.

4. Разделители.

Операторы заканчиваются символом «;».

Существуют две формы записи комментариев: однострочные комментарии начинаются составным символом «//», многострочные заключаются между символами «/*» и «*/»;

Примеры:

// Комментарий должен уместиться до конца строки

/*

а между этими символами можно писать многострочные комментарии

*/

В качестве операторных скобок используются символы «{» и «}».

Простые типы данных

Существуют три категории простых типов: целые числа, вещественные числа и пустой тип. Стандарт на язык «С++» не определяет диапазоны каждого из типов, но определяет, какой из типов имеет больший диапазон (или точность для вещественных чисел), а какой – меньший. Типы данных будут перечислены от меньшего к большему.

В языке С++ введён дополнительно логический тип, отсутствующий в С.

Целые числа: char, short, int, long, long long.

Вещественные числа: float, double, long double.

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

Логический тип: bool. Принимает одно из двух значений: true или false.

Целочисленные типы данных могут быть как знаковыми, так и беззнаковыми. Для определения, является тип знаковым или беззнаковым, используются ключевые слова signed и unsigned соответственно, которые записываются перед идентификатором типа данного. Если явно не указано, является тип знаковым или беззнаковым, он считается знаковым. Однако, настройки компилятора могут переопределять это умолчание.

Пример.

int x; // тоже, что и signed int x;

unsigned longt t;

В таблице 1 приведены размеры памяти (в битах), занимаемой простыми типами данных в различных средах разработки.

Таблица 1.

  Borland C/C++ (16 bit) Ms Visual Studio 2008
char
short
int
long
long long
float
double
long double
bool

Константы

Целые константы задаются с помощью целых чисел без разделяющей точки и имеют тип int. Можно явно указать тип long или unsigned при помощи использования суффиксов соответственно «l», «L», «u», «U».

Пример: 123L, 43u, 53lu, 63UL

Константа с плавающей точкой может включать семь частей: целая часть, десятичная точка, дробная часть, символ экспоненты, показатель десятичной степени (со знаком или без), суффикс. При отсутствии суффикса константы имеют представление double, суффикс f или F соответствует float, суффикс l или L – long double.

В записях вещественных констант могут опускаться (не одновременно): или целая или дробная часть; или десятичная точка или признак экспоненты; суффикс.

Пример: 45. .6 4.6 1.25f 3.5e-4 5E+6L

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

Примеры:

enum {zero ,one, two, three} соответствует zero=0, one=1, two=2, three=3.

enum {one=1, two, three} соответствует one=1, two=2, three=3.

enum {ten=10, two=2, three} соответствует ten=10, two=2, three=3.

Символьные (литерные) константы – это один или два символа, заключённые в апострофы. Во время компиляции символьные константы заменяются их кодами. Для записи специальных символов используют эскейп-последовательности, которые состоят из двух-четырёх символов и начинаются с символа «обратный слеш». Например \n соответствует переводу строки (код 10), \r – возврат каретки (код 13), \t – табуляция (код 09) и т.д. Для записи некоторых символов также используются эскейп-последовательности: \\ – обратный слеш, \” – двойная кавычка, \’ – одинарная кавычка, \? – знак вопроса.

ВНИМАНИЕ Частой ошибкой является запись «\» вместо «\\», т.к. она не определяется компилятором.

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

Операции

Присваивание.

x=a;

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

A=x=9;

5+(x=4) → 9

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

Арифметические:

a+b; a-b; a*b; a/b– соответственно сложение, вычитание, умножение, деление.

a%b - остаток от деления

ВНИМАНИЕ при делении целочисленных операндов результат также целочисленный (например 5/2 даст 2)

a<<b, a>>b - сдвиги операнда а на b двоичных разрядов влево / вправо.

-a; +a – унарные минус и плюс.

a&b - поразрядное логическое И (например, 1001b & 1100b → 1000b)

a|b - поразрядное логическое ИЛИ

a^b - поразрядное логическое исключающее ИЛИ (XOR)

~x - логическое поразрядное отрицание

Инкремент и декремент

++x, --x - увеличивает или уменьшает x на 1, затем подставляет в выражение.

x++ ,x-- - подставляет x в выражение, а затем увеличивает/уменьшает на 1.

Пример (в каждом примере изначально x=3):

(++x)+6 → 10, (x++)+6 → 9

(в обоих случаях в результате x=4)

(++x) + (++x) → 9

(x++) + (x++) → 7

Операция ","

возвращает крайнее правое значение.

Пример (объявлены переменные x,x1,x2,x3):

x = (x1=4+6, x2=x1-2, x3=x2+7)

В результате: x1=10, x2=8, x3=15, x=15.

Операция "?:"

x?a:b - возвращает a, если х истинно, иначе возвращает b.

Пример:

(5>2?4:6) → 4, (8>3?5:9) → 9, 5+(7>3?5:2) → 10

Операция sizeof(тип_данных/имя_переменной).

Возвращает размер (в байтах), занимаемый данной переменной или типом данных.

sizeof(short) → 4

Операторы ветвления и цикла

if

if (условие) действие1;

else действие2;

Если условие истинно, выполняется действие1, иначе выполняется действие2. Секция else необязательна.

While

while (условие) действие;

Цикл с предусловием. Действие выполняется, пока условие истинно.

Есть также цикл с постусловием:

do действие while (условие);

For

Цикл for выглядит следующим образом и в общем случае не является циклом с заданным числом повторений (в отличие, например, от ЯВУ Pascal).

for (инициализация; условие_цикла; изменение_переменых) действие;

Например,

for (x=0;x<10;x++) a+=f(x);

Break

Оператор break используют для выхода из циклов for / while и ветвления switch. Для вложенных циклов выход осуществляется на один уровень.

Continue

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

for(int i=a, s=0; i<b; i++)

{

if (i%3==0) continue; //переходим к следующему значению i

s+=i;

}

Switch

Структура записи оператора switch следующая.

switch(переменная)

{

case значение1: набор_действий1; break;

case значение2: набор_действий2; break;

default: набор_действий_по_умолчанию;

}

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

Формально, секции «case …: » являются метками, на которые осуществляется переход при совпадении значений. Именно поэтому после перехода на метку выполняются все команды до конца секции switch-case либо до оператора break. Этим можно пользоваться для уменьшения дублирования кода. Например, пусть задано условие: если переменная x равна 0, то вызвать функцию f1(), а если равно 2, то вызвать f1() и f2().

switch(x)

{

case 2: f2(); //не используем break, т.к. требуется выполнение и следующей команды.

case 0: f1(); //не используем break, т.к. дошли до конца.

}

Функции

Объявляются следующим образом:

возвращаемый_тип имя_функции(список_формальных_параметров)

{

ТЕЛО ФУНКЦИИ

}

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

Для функции, которая не возвращает значения (процедура в Паскале), предусмотрен тип данных void.

Функции, возвращающие значение, должны обязательно содержать оператор "return возвращаемые_данные". На данном операторе происходит возврат из функции независимо от того, есть ли дальше другие операторы.

Для функций void можно использовать return без аргументов для явного выхода из функции в требуемом месте.

Пример.

int sum(int x, int y)

{

return x+y;

}

Описание функции обязательно должно быть раньше (выше) в тексте программы, чем любой её вызов. Функция может быть описана без реализации (упреждающее описание). В этом случае тело функции не записывают, а после описания её заголовка ставят «;». Также при упреждающем описании могут не указываться имена переменных.

Пример:

void myfunc(int, int);

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

void myfunc(int x, int y) {…}

Допустимо явно не указывать параметры функции, для этого используется многоточие в конце списка параметров. В этом случае компилятор контролирует только явно указанные аргументы. Никаких специальных средств по работе с неявно указанными параметрами функции языки «С» и «С++» не предоставляют, но известно, что переданные фактические параметры располагаются в памяти после явно указанных.

Языки «С» и «С++» разрешают использование рекурсии, то есть вызова функцией самой себя.

Пример (функция вычисления факториала):

long fact(int k)

{

if (k<0) return 0;

if (k==0) return 1;

return k*fact(k-1);

}

Язык «С++» предоставляет дополнительные возможности:

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

– параметры по умолчанию (С++);

– подставляемые (inline) функции (С++);

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

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

#include <имя_файла> - добавить в данное место содержимое файла, файл содержится в специальном каталоге подключаемых файлов;

#include "имя_файла" - тоже, но для файла из текущей папки.

Стандартные заголовочные файлы (аналоги библиотек в других ЯВУ):

stdio.h – стандартный ввод-вывод;

conio.h – консольный ввод-вывод;

string.h – работа со строками;

math.h – математические операции;

mem.h – функции работы с памятью;

limits.h – константы предельных значений;

dos.h – команды ОС Ms Dos.

#define идентификатор строка_замещения - заменяет все идентификаторы от директивы до конца файла на строку замещения.

#undef идентификатор - отменяет директиву define, после данной директивы замен не производится.

#if, #elif, #else, #endif – организуют ветвление.

#ifdef, #ifndef – далее следующий код будет откомпилирован только если определена / неопределенна макроподстановка.

Метки

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

Указатели

Переменные хранят данные и не позволяют их управлять размещением в памяти. Единственная доступная операция – взятие адреса (&).

Указатель на переменную хранит адрес размещения данного. Обратиться к данному можно через операцию разыменовывания указателя (*). Объявление указателя осуществляется символом «*» перед именем переменной. Пример:

int x;

int *t; // объявили указатель t на переменную типа int

t = &x; // присваиваем указателю адрес переменной x

*t = 4; // используя указатель, присваиваем x значение 4

Указатели и объекты одного типа могут быть объявлены вместе. Пример (см. предыдущий пример):

int x,*t=&x;

Приведение типов

В языке «C» простые типы данных автоматически приводятся к требуемому. Вещественные преобразуются к целым путём отсечения дробной части. Данные большего размера приводятся к данным меньшего размера отбрасыванием старших байт. Для более сложных типов данных, а также для указателей требуется явное преобразование типов. Операция преобразования типа имеет вид:

(новый_тип)переменная

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

Примеры приведены далее.

Массивы

Массивы являются набором однотипных данных, последовательно размещённых в памяти.

Одномерный массив можно объявить так:

тип_данного имя_массива[размер];

Например: int x[5];

Обращение к элементам массива происходит через операцию []. Минимальный индекс всегда ноль. Максимальный индекс – на единицу меньше размера массива.

ВНИМАНИЕ Автоматический контроль границ отсутствует.

Имя массива является указателем на начало массива. Операция x[i] тождественно равна *(x+i).

Возможно использование многомерных массивов.

int x[4][4][3];

x[0][0][0] = 5;

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

Примеры:

int x[3][2]={{1,2},{3,4},{5,6}}; //заданы и размеры массива, и инициализирующие значения

long y[] = {1,2,3,4}; // размер массива определяется фактическому по количеству значений (4)

char t[][4] = {{1,2,3,4},{5,6}}; // последняя размерность определяется по числу значений (2) и // элементы t[1][2] и t[1][3] не определены

Функции работы с памятью

(заголовочные файлы alloc.h, stdlib.h, mem.h)

void* malloc(unsigned s) – выделение памяти s байт.

void* calloc(unsigned n, unsigned m) – выделение n элементов по m байт.

void* realloc(void* ptr, unsigned ns) – перевыделение памяти.

void free(void* ptr) – освобождение памяти.

int memcmp(void* s1, void* s2, unsigned n) – сравнивает две области памяти.

void* memcpy(const void* dest, const void* src, unsigned n) – копирование области памяти n байт из src в dest.

void* memset(void *ptr, int c, unsigned n) – запись числа c в память начиная с ptr.

Консольные функции.

void clreol() – удаление символов от курсора до конца строки.

void clrscr() – очистка экрана.

int cprintf(char *format [,..,]) – вывод строки с учётом параметров консоли.

void gotoxy(int x, int y) – перемещение курсора в позицию (x,y) экрана.

void textbackground(int c) – цвет фона.

void textcolor(int c) – цвет шрифта.

void textmode(int m) – режим (C40, C80, C4350).

Строки.

Строкой является массив данных типа char. Используется строка с завершающим нулём, то есть признаком конца строки является символ с кодом «0».

Строки могут инициализироваться текстом, заключенным в двойные кавычки: строковой константой, – которая имеет тип const char*.

char t[] = “Hello, World”;

Функции работы со строками (библиотека string.h).

char *strcat(char *dest, char *src) – в dest помещается результат объединения dest и src, возвращает ссылку на dest (!!! в dest должно быть достаточно места для помещения результата)

char *strchr(char *str, int c) – поиск символа «c» в str, результат – ссылка на первый найденный символ или NULL, если символ не найден;

int strcmp(char *str1, char *str2) – посимвольное сравнение строк, возвращает -1, если str1<str2, +1 если str1>str2 и 0 если str1==str2;

char* strcpy(char *dest, char *src) – копирует src в dest, возвращает указатель на dest;

unsigned strlen(char *str)

char* strset(char *str, int c) , возвращает s.

char *strstr(const char *str, const char *substr)

Определены модификации некоторых функций, принимающие в качестве дополнительного аргумента длину строки. Данные функции начинаются с strn вместо str. Это функции strncat, strncmp, strncpy, strnset.

Пример:

char* strncat(char *dest, char *src, unsigned n) – то же, что strcat, но используются n символов src.

Указатель на функции

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

тип_функции (*имя_указателя) (спецификация параметров)

пример:

void qsort(void *base, size_t nelem, size_t width, int (*fcmp)(const void *p1, const void *p2);

вызов: fcmp(p1,p2);

функция сравнения чисел:

int comp(const void *p1, const void *p2)

{

return *(int*)p1 - *(int*)p2;

}

Работа с файлами.

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

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

FILE *fopen(const char *filename,const char *mode);

filename – абсолютное или относительное имя файла, mode – режим открытия и доступа.

Режимы:

"r" – открытие существующего файла только для чтения (файл должен существовать);

"w" – создание пустого файла для записи;

"a" – открытие существующего файла для записи данных в конец файла; создание файла, если файла с заданным именем не существует;

"r+" – открытие существующего файла для чтения и записи (файл должен существовать);

"w+" – создание нового файла для чтения и записи;

"a+" – тоже, что “a”, но с возможностью чтения;

Другие функции работы с файлами:

int fclose( FILE *stream ); // 0 в случае успеха

int _fcloseall( void ); //количество закрытых файлов

int fflush(FILE *stream);

int feof( FILE *stream);

int fgetc( FILE *stream);

int fgetpos( FILE *stream, fpos_t *pos);

int fputc(int c, FILE *stream);

int fseek( FILE *stream, long offset, int origin);

long ftell( FILE *stream);

Существуют стандартные файлы (потоки) (тип данных – FILE*):

stdin – стандартный поток ввода (по умолчанию – клавиатура);

stdout – стандартный поток вывода (по умолчанию – монитор в текстовом режиме);

stderr – стандартный поток ошибок;

stdaux – стандартный вспомогательный поток;

stdprn – стандартный принтер.

Данные потоки могут быть переопределены с использованием функции fopen.

Форматированный ввод-вывод

Для форматированного вывода в поток предназначена функция

fprintf(FILE* stream, const char* formatted_string, arguments, …)

Для подстановки значений переменных в строку вывода используют символы подстановки (спецификаторы формата), начинающиеся с символа «%»:

%[флаги][размер][.точность][модификатор_длины]тип_данного[1]

Флаги:

«-» – выравнивание результата по левому краю (по умолчанию – по правому относительно заданного количества выводимых символов);

«+» – результат всегда начинается со знака (+/-);

«#» – особая форма отображения результата.

Размер показывает сколько символов отводится для записи результата, может быть представлен в следующих форматах:

n – минимум n символов отводится для записи числа, недостающие символы заменяются пробелами;

0n – то же, но недостающие символы заменяются нулями;

* – список аргументов содержит размеры данных.

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

Модификатор длины может принимать одно из значений:

F – «длинный» указатель;

N – «короткий» указатель;

h – short int;

l – long int, double;

L – long double.

Тип данного может принимать одно из значений:

%d, %i – знаковое десятичное целое;

%u – беззнаковое десятичное целое;

%o – беззнаковое восьмеричное целое;

%x, %X – беззнаковое шестнадцатеричное целое;

%f – знаковое вещественное;

%e, %E – знаковое вещественное в экспоненциальной форме;

%g, %G – знаковое вещественное, форма зависит от числа, размера и точности;

%c – символ;

%s – строка;

%% – символ «%»;

%n, %p – указатель.

Аргументы, передаваемые в функцию, должны соответствовать количеству и типу спецификаторам формата.

Для форматированного ввода данных из потока используется функция

fscanf(FILE* stream, const char* formatted_string, arguments, …)

Строка также может содержать спецификаторы формата, при этом:

– при невозможности предобразования строки в число, число принимает значение ноль;

– строкой считается слово до разделителя (пробел, табуляция, перевод строки).

Для стандартных потоков определены аналогичные функции:

printf(const char* formatted_string, arguments, …)

scanf(const char* formatted_string, arguments, …)

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

Определены функции, использующие вместо потока строку:

sprintf(char *dest, const char* formatted_string, arguments, …)

sscanf(char *src, const char* formatted_string, arguments, …)

[1] Квадратные скобки не являются частью записи формата, а указывают на необязательность аргумента

Полетаев Д.И.

Полетаев И.А.

Технологии программирования

Задание для контрольной работы.

Задание

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

Исходные данные

Две функции выбираются согласно номеру варианта из таблицы заданий. Диапазон аргумента (Х) запрашивается у пользователя во время выполнения программы.

Функциональность

Для заданных исходных данных программа должна выполнять следующие действия:

  • вывод на экран таблицы значений функций;
  • запись в файл в текстовом формате таблицы значений функций;
  • вывод на экран графика первой функции;
  • вывод на экран графика второй функции.

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

4. Требования к оформлению таблицы

4.1. Расчет производится для двадцати одного значения аргумента, аргумент изменяется равномерно. Крайние значения должны совпадать с границами интервала, введенными пользователем.

4.2. Таблица должна содержать 3 столбца: значение первого аргумента, значения первой функции при данном значении аргумента, значения второй функции при данном значении аргумента.

4.3. Выше таблицы должны быть выведены функции в виде “f1(x) = …”. Таблица должна иметь «шапку».

4.4. Если при каком-либо значении аргумента невозможно вычислить значение функции, в столбце значения функции ставится прочерк.

5. Требования к оформлению графика

5.1. График строится по 21-му значению аргумента. Требования к аргументу аналогичны п. 4.1.

5.2. График выводится в текстовом или графическом режиме на усмотрение разработчика.

5.3. График должен иметь координатные оси. На каждой оси должно быть подписано не менее трех значений.

5.4. Если при каком-либо значении аргумента невозможно вычислить значение функции, данная точка на экран не выводится.

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

Требования к тексту программы

6.1. Программа выполняется на языке С или С++ в любой удобной Вам среде разработки.

6.2. Программа должна состоять из нескольких функций.

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

Содержание отчета

· Задание.

· Краткое описание структуры программы.

· Блок-схему обобщенного алгоритма функционирования.

· Текст программы с комментариями.

Варианты заданий

Последние две цифры номера зач. книжки Функции
00, 20, 40, 60, 80 Объявление переменных. Типы данных - student2.ru
01, 21, 41, 61, 81 Объявление переменных. Типы данных - student2.ru
02, 22, 42, 62, 82 Объявление переменных. Типы данных - student2.ru
03, 23, 43, 63, 83 Объявление переменных. Типы данных - student2.ru
04, 24, 44, 64, 84 Объявление переменных. Типы данных - student2.ru
05, 25, 45, 65, 85 Объявление переменных. Типы данных - student2.ru
06, 26, 46, 66, 86 Объявление переменных. Типы данных - student2.ru
07, 27, 47, 67, 87 Объявление переменных. Типы данных - student2.ru
08, 28, 48, 68, 88 Объявление переменных. Типы данных - student2.ru
09, 29, 49, 69, 89 Объявление переменных. Типы данных - student2.ru
10, 30, 50, 70, 90 Объявление переменных. Типы данных - student2.ru
11, 31, 51, 71, 91 Объявление переменных. Типы данных - student2.ru
12, 32, 52, 72, 92 Объявление переменных. Типы данных - student2.ru
13, 33, 53, 73, 93 Объявление переменных. Типы данных - student2.ru
14, 34, 54, 74, 94 Объявление переменных. Типы данных - student2.ru
15, 35, 55, 75, 95 Объявление переменных. Типы данных - student2.ru
16, 36, 56 ,76 ,96 Объявление переменных. Типы данных - student2.ru
17, 37, 57, 77, 97 Объявление переменных. Типы данных - student2.ru
18, 38, 58, 78, 98 Объявление переменных. Типы данных - student2.ru
19, 39, 59, 79, 99 Объявление переменных. Типы данных - student2.ru

Краткая справка по языкам «С», «С++»

Алфавит

В алфавит языков С, С++ входят:

- прописные и строчные буквы латинского алфавита;

- арабские цифры;

- специальные знаки: “ { } , | [ ] ( ) + - / % \ ; ‘ : ? < = > _ ! & # ~ ^ . *

Некоторые среды разработки, например, Ms Visual Studio 2008, позволяют использовать национальные шрифты, например, кириллицу.

Из символов алфавита формируются следующие лексемы языка.

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

языках С, С++ чувствительны к регистру букв, в отличие, например, от ЯВУ Pascal.

Особым видом идентификаторов являются ключевые (служебные) слова – они зарезервированы для специального использования и не могут быть переопределены.

2. Константы.

3. Знаки операций.

4. Разделители.

Операторы заканчиваются символом «;».

Существуют две формы записи комментариев: однострочные комментарии начинаются составным символом «//», многострочные заключаются между символами «/*» и «*/»;

Примеры:

// Комментарий должен уместиться до конца строки

/*

а между этими символами можно писать многострочные комментарии

*/

В качестве операторных скобок используются символы «{» и «}».

Объявление переменных. Типы данных

В языке Си среди простых типов присутствуют только числовые. Логический и символьный типы отсутствуют:

– в логических выражениях значению «ложь» соответствует ноль, значению «истина» – любое другое значение;

– символьные константы преобразуются компилятором в коды соответствующих символов;

– любое целое число может быть выведено как соответствующий ему символ.

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

<тип_данных> <имя_переменной>

int x; bool flag; char s;

Несколько переменных, имеющих один тип данных, могут быть объявлены вместе:

int a,b,c; //объявление трёх переменных типа int.

При объявлении переменным могут быть присвоены начальные значения:

int a=3, b=4, c; //Переменной «c» начальное значение не задано.

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

Простые типы данных

Существуют три категории простых типов: целые числа, вещественные числа и пустой тип. Стандарт на язык «С++» не определяет диапазоны каждого из типов, но определяет, какой из типов имеет больший диапазон (или точность для вещественных чисел), а какой – меньший. Типы данных будут перечислены от меньшего к большему.

В языке С++ введён дополнительно логический тип, отсутствующий в С.

Целые числа: char, short, int, long, long long.

Вещественные числа: float, double, long double.

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

Логический тип: bool. Принимает одно из двух значений: true или false.

Целочисленные типы данных могут быть как знаковыми, так и беззнаковыми. Для определения, является тип знаковым или беззнаковым, используются ключевые слова signed и unsigned соответственно, которые записываются перед идентификатором типа данного. Если явно не указано, является тип знаковым или беззнаковым, он считается знаковым. Однако, настройки компилятора могут переопределять это умолчание.

Пример.

int x; // тоже, что и signed int x;

unsigned longt t;

В таблице 1 приведены размеры памяти (в битах), занимаемой простыми типами данных в различных средах разработки.

Таблица 1.

  Borland C/C++ (16 bit) Ms Visual Studio 2008
char
short
int
long
long long
float
double
long double
bool

Наши рекомендации