Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
23
Добавлен:
23.06.2014
Размер:
143.87 Кб
Скачать

Министерство образования

Российской Федерации

ТОМСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

СИСТЕМ УПРАВЛЕНИЯ И РАДИОЭЛЕКТРОНИКИ (ТУСУР)

Кафедра автоматизированных систем управления (АСУ)

Контрольная работа

по дисциплине «Информатика»

(автор учебного пособия: А.И. Муравьев)

вариант №19

2002

Задание:

  1. Составьте ответы по контрольным вопросам, заданным в методических указаниях.

  2. Перевести числа 19 и 1919 в двоичный и шестнадцатеричный вид.

  3. Составить программу, в которой с помощью оператора while подсчитать сумму ряда до тех пор, пока член ряда не будет меньше 0.005.

  4. Составить программу, в которой с помощью оператора while организовать цикл в котором значения параметра t менялись от 0.5 до 5 с шагом h=0.1. Вывести на экран значения t и функции

    для t3

    для t3

  5. Составить программу, в которой с помощью оператора FOR подсчитать сумму ряда

  6. Составить программу, в которой с помощью оператора REPEAT протабулировать функцию y=sin(x) в диапазоне параметра от 0 до 6 с шагом 0.3

  7. Составить программу, в которой составить массив C[1…100] из псевдослучайных символов из диапазона CHR(65)-CHR(90) и определить какие символы встречаются в этом массиве два, три и четыре раза.

  8. Составить программу, в которой сформировать двумерный целочисленный массив A[1…30,1…30] из случайных целых чисел и определить количество элементов массива, значения которых больше 20.

Решение:

1.

- Присваивать значения друг другу можно для переменных типов:

целый-целый;

вещественный-вещественный;

и производных от них. Для иных преобразований необходимо воспользоваться функциями типа ORD(), Chr() или Round(). За что я и не люблю PASCAL (и не говорите, что я просто не умею его готовить). В C++ все гораздо проще, существует два типа преобразования: неявный и явный, например:

int a;

float b;

b=a; //неявное преобразование типа переменной

b=(float)a //явное преобразование типа переменной

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

- Символьный тип в Pascal отличается от строкового тем, что всегда занимает только один байт в памяти компьютера (искл. – Unicode). Количество памяти, занимаемой строковым типом зависит от длины строки в байтах. В С++ есть еще одно отличие: все строки оканчиваются нулевым байтом.

- Диапазоны допустимых значений:

Shortint -128 .. 127 1 байт

Integer -32768 .. 32767 2 байта

Longint -2147483648 .. 2147483647 4 байта

Byte0 .. 255 1 байт

Word0 .. 65535 2 байта

Real 2.9e-39 .. 1.7e+38 6 байт

ingle 1.5e-45 .. 3.4e+38 4 байт

Double 5.0e-324 .. 1.7e+308 8 байт

Extended 3.4e-4932 .. 1.1e+4932 10 байт

Comp -9.2e+18 .. 9.2e+18 9 байт

- С типом Boolean можно использовать логические операторы not, and, or, xor. Тип Boolean возвращают операции отношения и логические операции.

- Перечисляемые типы данных объявляются следующим образом:

Type Space = (x,y,z)

- Максимальное число элементов перечисляемого типа – 256.

- Пример диапазонного типа:

Type Day=1…31

- В качестве элементов ограниченного типа использовать вещественные числа нельзя.

- Максимальная длина строки по умолчанию – 255. Эта же длина является максимальной для строки. В C++ такого ограничения нет, если объявить строку «в куче», то ограничением длины строки будет только количество доступной памяти.

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

1. not

2. * / div mod

3. and shl shr

4. + - or xor

5. = <> < >

6. <= >= in

Операции с одинаковым приоритетом выполняются по порядку.

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

1. not

2. and

3. or xor

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

- В данной программе Z,Y,A,B переменные типа Boolean, при выполнении строки IF Z THEN Y:=A=B произойдет следующее: если Z=TRUE и A=B, то Y=TRUE, если же Z=FALSE, то при любых значениях A и B Y=FALSE.

- В качестве параметров цикла FOR TO..DO можно использовать переменные только целых типов. А не слабо в PASCAL`е организовать цикл из C++: for(float f=0;f<100;f+=0.01)?

- Отличие циклов WHILE…DO от REPEAT…UNTIL в том, что тело цикла REPEAT…UNTIL будет выполнено хотя бы один раз, даже если условие для выхода из него будет всегда TRUE.

- Допускается изменять параметр цикла в WHILE…DO и REPEAT…UNTIL, запрещается в FOR.

- Массив – структурированный тип для резервирования в памяти места под некоторое количество однородных элементов.

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

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

-Структура программы Pascal:

[PROGRAM <имя программы>]

[CONST описания констант]

[TYPE описание пользовательских типов]

[VAR описание переменных]

begin

тело программы

end.

Структура программ C и C++:

int main ()

{

тело программы

}

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

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

2. 1910=1316=100112

191910=77F16=111011111112

3. Так, как было получено разрешение Веретенникова М.В. и Сафьяновой Е.Н. использовать для написания программ язык C++, это и все остальные решения заданий будут на C++.

#include <iostream.h>

#include <conio.h>

//-------------------------------------------------------------------

int main()

{

double i=3;

double sum=0;

double y=0;

do

{

y=(i+5)/(i*i+10); // вычисляем значение очередного члена ряда

sum=sum+y; // находим сумму членов ряда

i++;

}

while (y>=0.005); // если y0.005 то выходим из цикла

cout<<sum; // выводим сумму членов ряда на экран

getch(); // ждем нажатия любой клавиши перед выходом

}

4.

#include <iostream.h>

#include <conio.h>

//-------------------------------------------------------------------

int main()

{

float t=0.5;

float y=0;

while (t<=5) // вычисляем y пока t<=5

{

if (t<=3) y=1/t; // если t<=3 присвоить y=1/t

else y=cos(t-3); // иначе y=cos(t-3)

cout <<”t=”<<t<<" y="<<y<<"\n"; // выводим t и y на экран

t+=0.1;

}

getch(); // ждем нажатия любой клавиши перед выходом

}

5.

#include <iostream.h>

#include <conio.h>

//-------------------------------------------------------------------

int main()

{

double y=0;

for (int i=1;i<=100;i++) // организуем цикл от 1 до 100

y=y+(1/(i*i)+i+1); // вычисляем y

cout<<y; // выводим y на экран

getch();

}

6. Аналогом Паскалевского REPEAT…UNTIL в С++ является DO…WHILE. Так что будем использовать эту конструкцию:

#include <iostream.h>

#include <conio.h>

//-------------------------------------------------------------------

int main()

{

double y=0;

double x=0;

do

{

y=sin(x); // вычисляем значение функции y

cout<<y<<"\n"; // выводим y на экран

x=x+0.3; // увеличиваем x на значение h=0.3

}

while (x<=6); // повторяем пока x<=6

getch();

}

Кстати, на С++ это же можно было сделать гораздо проще:

for (double x=0;x<=6;x+=0.3)

y=sin(x);

7.

#include <iostream.h>

#include <conio.h>

//-------------------------------------------------------------------

int main()

{

randomize(); // инициализируем генератор случайных чисел

unsigned char C[100];

int chr[25]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};

/* объявляем массив, в котором будем хранить число вхождения символов в массив C*/

for (int f=0;f<100;f++) // организуем цикл от 1 до 100

{

C[f]=rand()%25+65; // заполняем массив С случайными числами в //диапазоне 65…90. А вот это то, за что я люблю С++ - неявное преобразование типов( из int в unsigned char)

chr[C[f]-65]++; // подсчитываем число вхождений символов в //массив С и заносим в массив char

}

cout << "These symbols are found in sequence in two, three and four copies:"<<"\n";

/* по-русски это звучит так: «Эти символы найдены в последовательности в двух, трех и четырех экземплярах»*/

for (int f=0;f<25;f++) // организуем цикл от 1 до 25

if (chr[f]>1 && chr[f]<5) /* если количество вхождений лежит в диапазоне 2…4 то выводим символ на экран в следующей строке*/

cout <<(unsigned char)(f+65)<<"-"<<chr[f]<<"\n";

getch(); // ждём`с…

}

8.

#include <iostream.h>

#include <conio.h>

//-------------------------------------------------------------------

int main()

{

randomize(); // инициализируем генератор случайных чисел

int A[30][30];

int sum=0;

for (int i=0;i<30;i++) // организуем цикл от 1 до 30 (строки)

{

for (int j=0;j<30;j++) // организуем цикл от 1 до 30 (столбцы)

{

A[i][j]=rand()%100; // заполняем массив случайными числами

if (A[i][j]>20) sum++; /* подсчитываем количество элементов массива, больших 20 */

}

}

cout <<"Number of elements larger that 20: "<<sum;// выводим на экран

getch(); // ждем…

}

Список использованных источников

  1. Бьерн Страуструп Язык программирования С++.-М,1999

  2. Грызлов В.И., Грызлова Т.П. Турбо Паскаль 7.0.- М,1998

  3. Е.Н. Сафьянова Основы алгоритмизации и программирование.- Томск, 2000

  4. А.И. Муравьев Информатика.- Томск,2000