русс | укр

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

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Какие из строк (//1 – //9) правильные?


Дата добавления: 2015-06-12; просмотров: 668; Нарушение авторских прав


11. Дан код:

union TU2 { struct { unsigned short lo;

unsigned short hi;

} w;

int k;

} N;

N.k=0´12345678; cout<<hex<<N<<endl;

cout<<hex<<N.lo<<endl; cout<<hex<<N.hi<<endl;

Что будет выведено? Варианты ответа:

1) 12345678, в следующей строке 1234 и ещё ниже 5678

2) 12345678, в следующей строке 5678 и ещё ниже 1234

3) Ошибка компиляции при объявлении объединения.

4) Ошибка компиляции в “командах” вывода.

12. Дан код:

struct tst { int l; float * coord; float per; } s1;

tst s2=s1; //1

tst *s2= new tst; //2

tst *s2=&s1; //3

tst &s2=s1 //4

tst &s2=*s1; //5

В каких вариантах правильно объявлена переменная ссылочного типа для структуры?

13. Дан код:

struct tb { unsigned b1:1; //1

unsigned *b2:1=&b1; //2

unsigned &b3:1=b1; //3

unsigned :5; //4

unsigned b4:1; }; //5

В каких строках (//1—//5) есть ошибки?

 

 

Лабораторная работа 6.

Тема. “Cтруктуры”.

Требования и общие указания к заданиям:

Одно и тоже задание выполнить двумя способами:

1) использовать статический массив в структуре и статический массив структур (см. пример 1). При этом количество структур (в примере количество студентов (n))и количество элементов массива в структуре (в примере количество оценок для одного студента (m) )— константы;

2) задание выполнить с помощью динамических массивов (пример 2). Для этого:

· в структуре объявить и создать динамический массив (в примере 2 Points);

· размерность этого массива включить в структуру в качестве одного из полей (в примере 2 переменная n);

· создать динамический массив структур (в примере 2 arrs);

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



 

Пример 1 (+).

Сформировать статический массив структур, каждый элемент которого содержит следующие три поля:

фамилия, имя отчество студента или школьника (вводим);

массив оценок фиксированной размерности, который также вводим;

средний балл (вычисляем).

Для каждого студента найти средний балл и рассортировать массив структур по этому полю.

const m=4;

// Количество оценок у одного студента.

struct tstr // Объявляем тип структуры.

{ char name[20] ; // Фамилия, имя , отчество.

int a[m] ; // Массив оценок .

float s ; // Средний балл.

} ;

// Ввод массива структур

void MyInp ( tstr x[], int,int );

// Вывод массива структур

void MyOut ( tstr x[], int );

// Сортировка массива структур

void MySort ( tstr x[], int );

/* Нахождение среднего значения в числовом массиве z (в целочисленном одномерном массиве, а не в массиве структур) */

float MyAver ( int z[], int );

int main()

{ const n=3;

/* Количество студентов, т.е. количество элементов массива структур. */

tstr ars[n]; // Статический массив структур (n — константа).

int i,j;

clrscr(); MyInp(ars,n,2);

/* Для каждого студента находим средний балл, т. е. для i-й структуры ars[i] вычисляем поле s. Для этого используем функцию MyAver.*/

for (i=0;i<n;i++)

ars[i].s=MyAver( ars[i].a,m);

cout<<" \n Before of sorting\n";

MyOut(ars,n); MySort(ars,n);

cout<<"\nAfter of sorting\n"; MyOut(ars,n);

getch(); return 0;

};

/* Ввод массива структур, т.е. фамилий и оценок всех (size) студентов. Ввод начинается со строки экрана с номером y0. */

void MyInp(tstr x[],int size, int y0)

{ int i,j, y,

coord1; // Номер позиции в строке

y=y0;

for (i=0;i<size;i++)

/* i – номер элемента массива структур (номер студента). */

{ gotoxy(2,y);

cout<<"Name ";

cin>> (x[i].name);

cout<<"Ocenki "<<endl;

y++;

for (j=0, coord1=8; j<m; j++,coord1+=3)

// j – номер оценки одного студента

// Цикл для ввода одной j - й оценки i – го студента с контролем ввода.

{ while(1)

{ gotoxy(coord1,y);

cin>>x[i].a[j];

if (x[i].a[j]>0 && x[i].a[j]<=10)

break;

else { gotoxy(coord1,y);

// “Стираем” неверно введённую оценку

cout<<" ";

}

}

}

y++;

}

};

/* Сортировка массива структур. Подробный анализ алгоритма смотри в 1-м семестре ([1]). */

void MySort ( tstr x[], int size)

{ int i,j,k,flag; tstr T;

k=size;

do { k--;

flag=0;

for (i=0; i<k; i++)

if (x[i].s < x[i+1].s)

{

/* Перестановка i- го и (i+1) – го элемента массива структур. */

T=x[i];

x[i]=x[i+1];

x[i+1]=T;

flag=1;

}

}

while (flag);

} ;

/* Вывод массива структур, т. е. выводим информацию обо всех студентах. */

void MyOut (tstr x[], int size)

{ int i,j,coord1; cout<< endl;

for (i=0;i<size;i++)

{ cout<<x[i].name<<" ";

for (j=0,coord1=25; j<m; j++, coord1+=3)

{ gotoxy(coord1,wherey());

cout<<x[i].a[j];

}

gotoxy(coord1,wherey());

textcolor(10);

cprintf("%5.2f",x[i].s);

cout<<endl;

}

cout<<endl;

} ;

float MyAver (int z[],int M)

{ float S=0; int j;

for (j=0; j<M; j++)

S+=z[j];

S/=M;

return S; };

Пример 2(+) (динамический массив структур и динамический массив в структуре).

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

/*Структурный тип для определения декартовых координат одной точки плоскости. */

struct Point1

{float x,y;

};

/*Структурный тип для определения одного многоугольника плоскости. */

struct ttr

{

char *type; // Строка для названия.

unsigned n; // Количество вершин.

/* Указатель на динамический массив структур,т. е. массив точек одного многоугольника. Каждая точка имеет две координаты. Поэтому используется вложенная структура Point1, содержащая эти две координаты. */

Point1 *Points;

float per; // Периметр многоугольника.

};

/* Функция вычисляет периметр одного многоугольника, имеющего size вершин. В неё передаём указатель на динамический массив структур, т.е. массив точек одного многоугольника. Каждый элемент этого массива имеет тип Point1, т. е. содержит два числа (две координаты точки). */

float MyPer(Point1 *P, int size)

{ float Len=0;

/*В цикле находим сумму длин сторон, соединяющей 0-ю точку с 1 – й, 1-ю со 2 – й и т.д., (size-2) – ю точку с (size-1) – й. */

for(int j=0; j<size-1; j++)

Len+= sqrt((P[j].x-P[j+1].x)*(P[j].x-P[j+1].x)+

(P[j].y-P[j+1].y)*(P[j].y-P[j+1].y) );

/* Вне цикла добавляем длину стороны, соединяющей 0-ю точку с (size-1) – й точкой. */

return Len+sqrt((P[0].x-P[size-1].x)*(P[0].x-P[size-1].x)+

(P[0].y-P[size-1].y)*(P[0].y-P[size-1].y) );;

}

/* Функция получает поля одной структуры типа ttr, т. е. информацию об одном многоугольнике, кроме периметра. Периметр будет найден вызовом из main функции MyPer. Так как структура является результатом функции, то в качестве параметра объявлен указатель на неё.*/

void MyDef (ttr *Str, int size)

{ cout<<endl;

char t[40];

/* t — вспомогательная строка для названия многоугольника. В зависимости от количества вершин (size) формируем русско-латинское название многоугольника. При этом предусмотрены четыре варианта. */

switch (size)

{case 3: strcpy(t,"Triangle"); break;

case 4: strcpy(t,"Chetirexygolnic");break;

case 5: strcpy(t,"Pjatyygolnic"); break;

default: strcpy(t,"Other");

}

/* Динамически создаём строку type, длина которой берётся из вспомогательной строки t. Используем операцию “->”(стрелка), потому что Str — указатель на структуру, а не потому, что type и Points — указатели. */

Str->type=new char [strlen(t)];

strcpy(Str->type, t);

/* Создаём динамический массив структур внутри структуры Str. То есть определяем массив точек одного многоугольника размером size. */

Str->Points=new Point1[size];

for (int i=0; i<size; i++)

{ Str->Points[i].x= float(random (5)-2);

Str->Points[i].y= float(random (5)-2);

}

/* Использовали операцию “->”, потому что Str — указатель, а операция “.”, потому что Points[i] — это не указатель, а i – й элемент вложенного динамического массива структур. Указателем является Points, в котором хранится адрес начала этого массива.*/

}

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

void MyShow (ttr *Str, int size)

{Str->n=size;

cout<<"\n m="<< Str->n<<" ";

for (int i=0; i<size; i++)

printf(" x=%4.1f y=%4.1f", Str->Points[i].x, Str->Points[i].y);

printf("\n type %s",Str->type);

printf(" perimetr %10.2f",Str->per );

}

int main()

{ int m=3; // Количество вершин многоугольника.

clrscr();

/* Объявляем и создаём указатель на одну структуру типа ttr, в котором будет храниться информация об одном многоугольнике. */

ttr *S; S=new ttr;

MyDef ( S, m);

/* Так как в функциях MyDef и MyShow в качестве формального параметра используется указатель на структуру (ttr *Str), то в качестве фактического параметра передаём указатель на структуру такого же типа. Так как объявлен указатель (ttr*S;), а не просто структура (ttr S;), то при вызове функции в скобках записали просто S. */

S->per=MyPer(S->Points, m);

/* Так как в функции MyPer в качестве формального параметра используется указатель на структуру типа Point1 (Point1 *P), то в качестве фактического параметра передаём указатель на структуру такого же типа. После выполнения функции MyDef в структуре, адрес которой в S, будет создан динамический массив Points. Адрес начала этого массива S->Points и передаём в функцию. */

MyShow(S, m);

/* Вывели сформированную с помощью функций MyDef и MyPer структуру, адрес которой в S.*/

int n=4,i;

/*Создаём динамичечский массив структур типа ttr размерности n, то есть n m - угольников. */

ttr *arrs=new ttr[n];

for(i=0;i<n;i++)

{ cout<<"\n i="<<i<< " m=";

cin>>m;

/* Так как в функциях MyDef и MyShow в качестве формального параметра используется указатель на структуру (ttr *Str), и так как эти функции работают с одной структурой, то в качестве фактического параметра передаём адрес i – го элемента динамического массива. Так как arrs[i] не является адресом, то при вызове функции используем операцию “&” (взятие адреса). */

MyDef ( &arrs[i], m);

/* В функцию MyPer передаём адрес динамического массива точек размерности m для i-го многоугольника, созданный вфункции MyDef. */

arrs[i].per=MyPer(arrs[i].Points, m);

MyShow(&arrs[i],m);

}

getch(); return 0;

}

 

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

A. Задачи первого простого уровня.

1. Сформировать массив структур, каждый элемент которого содержит следующие три поля:

фамилия, имя отчество студента (вводим);

массив оценок в десятибалльной системе (вводим);

признак.

Для каждого студента получить одно из следующих значений признака: 5 –отличник (только 9 и (или) 10), 4 – хорошист (нет оценок, меньше 6, но не все 9 или 10, а есть 6 и (или) 7 и (или) 8), 3 – троечник (нет оценок, меньше 4, но есть 4 и (или) 5), 2 – неуспеваю­щий (есть 1 и (или) 2 и (или) 3). Рассортировать массив структур по убыванию полученного признака.

2. Сформировать массив структур, каждый элемент которого содержит следующие че­тыре поля:

курс (вводим);

фамилия, имя отчество (вводим);

массив оценок в десятибалльной системе (вводим);

признак.

Для каждого студента получить одно из следующих значений признака: 5 –отличник (только 9 и (или) 10), 4 – хорошист (нет оценок, меньше 6, но не все 9 или 10, а есть 6 и (или) 7 и (или) 8), 3 – троечник (нет оценок, меньше 4, но есть 4 и (или) 5), 2 – неуспеваю­щий (есть 1 и (или) 2 и (или) 3). Рассорти­ровать массив структур по курсам.

3. Сформировать массив структур, каждый элемент которого содержит следующие пять полей:

группа (вводим);

фамилия, имя отчество (вводим);

массив оценок в десятибалльной системе (вводим);

материальное положение (вводим, например, 0 — плохое, 1 — обычное, среднее).

Рассортировать массив структур по группам.

4. Сформировать массив структур, каждый элемент которого содержит следующие поля:

координаты вершин треугольника на плоскости (вводим);

периметр треугольника;

Для каждого треугольника определить периметр. Рассортировать массив структур по периметру.

5. Сформировать массив структур, каждый элемент которого содержит следующие поля:

координаты вершин треугольника на плоскости (вводим).

площадь треугольника;

Для каждого треугольника определить площадь. Рассортировать массив структур по площади.

6. Сформировать массив структур, каждый элемент которого содержит следующие поля:

координаты вершин четырёхугольника на плоскости (вводим).

признак четырёхугольника, который принимает одно из следующих значений: 1 – если четырёхугольник находится полностью в первой четверти, 2 – во второй, 3 – в третьей, 4 – в четвёртой четверти, 5 – для всех остальных.

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

7. Сформировать массив структур, каждый элемент которого содержит следующие поля:

координаты вершин четырёхугольника на плоскости (вводим);

площадь многоугольника.

Для каждого четырёхугольника определить площадь. Рассортировать массив структур по площади.

8. Сформировать массив структур, каждый элемент которого содержит следующие поля:

координаты вершин четырёхугольника на плоскости (вводим);

периметр четырёхугольника.

Для каждого четырёхугольника определить периметр. Рассортировать массив структур по периметру.

9. Сформировать массив структур, каждый элемент которого содержит следующие поля:

координаты вершин отрезка в 3-хмерном пространстве (вводим);

длина отрезка.

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

10. Сформировать массив структур, каждый элемент которого содержит следующие поля:

координаты центра круга на плоскости (вводим);

радиус круга (вводим);

площадь круга.

Для каждого круга определить площадь. Рассортировать массив структур по длине.

11. Сформировать массив структур, каждый элемент которого содержит следующие поля:

шифр подразделения, содержащий не более трёх символов (вводим);

фамилия, имя отчество (вводим);

год рождения (вводим);

Для заданного подразделения, шифр которого вводим, рассортировать сотрудников по возрасту.

 

B. Задачи второго среднего уровня.

1. Сформировать массив структур, каждый элемент которого содержит следующие три поля:

фамилия, имя отчество (вводим);

массив оценок в десятибалльной системе (вводим);

признак.

Для каждого студента получить одно из следующих значений признака: 5 –отличник (только 9 и (или) 10), 4 – хорошист (нет оценок, меньше 6, но не все 9 или 10, а есть 6 и (или) 7 и (или) 8), 3 – троечник (нет оценок, меньше 4, но есть 4 и (или) 5), 2 – неуспеваю­щий (есть 1 и (или) 2 и (или) 3). Рассортировать массив структур по этому полученному признаку. Для одинакового признака сортировать по среднему баллу.

2. Сформировать массив структур, каждый элемент которого содержит следующие че­тыре поля:

курс (вводим);

фамилия, имя отчество (вводим);

массив оценок в десятибалльной системе (вводим);

признак.

Для каждого студента получить одно из следующих значений признака: 5 –отличник (только 9 и (или) 10), 4 – хорошист (нет оценок, меньше 6, но не все 9 или 10, а есть 6 и (или) 7 и (или) 8), 3 – троечник (нет оценок, меньше 4, но есть 4 и (или) 5), 2 – неуспеваю­щий (есть 1 и (или) 2 и (или) 3). Рассорти­ровать массив структур по курсам, внутри курса – по этому полученному признаку.

3. Сформировать массив структур, каждый элемент которого содержит следующие пять полей:

курс (вводим);

фамилия, имя отчество (вводим);

массив оценок в десятибалльной системе (вводим);

материальное положение (вводим, например, 0 — плохое, 1 — обычное, среднее).

размер стипендии.

Для каждого студента определить размер стипендии, выбрав самостоятельно критерий. Рассортировать массив структур по курсам, внутри курса – по полученной сти­пендии.

4. Сформировать массив структур, каждый элемент которого содержит следующие поля:

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

тип треугольника (прямоугольный, остроугольный, тупоугольный);

периметр треугольника;

Для каждого треугольника определить тип и периметр. Рассортировать массив структур сначала по типу, а затем по периметру.

5. Сформировать массив структур, каждый элемент которого содержит следующие поля:

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

тип треугольника (равнобедренный, разносторонний, равносторонний);

площадь треугольника;

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

6. Сформировать массив структур, каждый элемент которого содержит следующие поля:

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

признак многоугольника, который принимает одно из следующих значений: 1 – если многоугольник находится полностью в первой четверти, 2 – во второй, 3 – в третьей, 4 – в четвёртой четверти, 5 – для всех остальных.

Для каждого многоугольника определить этот признак и рассортировать по нему массив структур.

7. Сформировать массив структур, каждый элемент которого содержит следующие поля:

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

площадь многоугольника.

Для каждого многоугольника определить площадь. Рассортировать массив структур следующим образом. В начале массива должны находиться многоугольники 1-й четверти по возрастанию найденной площади, а затем — остальные многоугольники в нерассортированном виде, то есть в том же порядке, что и в исходном массиве.

8. Сформировать массив структур, каждый элемент которого содержит следующие поля:

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

периметр многоугольника;

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

9. Сформировать массив структур, каждый элемент которого содержит следующие поля:

координаты вершин отрезка в 3-хмерном пространстве (вводим). Использовать пред­варительно объявленную структуру, содержащую координаты одной точки 3-хмерного пространства;

длина отрезка.

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

10. Сформировать массив структур, каждый элемент которого содержит следующие поля:

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

радиус круга (вводим);

площадь круга;

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

11. Сформировать массив структур, каждый элемент которого содержит следующие поля:

шифр подразделения, содержащий не более трёх символов (вводим);

фамилия, имя отчество (вводим);

год рождения (вводим);

образование, например, 0 – неоконченное базовое, 1 – базовое, 2 – общее среднее и т. д. (вводим);

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

12. Сформировать массив структур, каждый элемент которого содержит следующие поля:

шифр подразделения, содержащий не более трёх символов (вводим);

план выпуска продукции по кварталам одного года в виде массива (вводим);

фактическое выполнение плана по кварталам одного года в виде массива (вводим);

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

 



<== предыдущая лекция | следующая лекция ==>
Перечисления | Лабораторная работа 7.


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 3.532 сек.