Строки и структуры

Вывод на дисплей фамилий работников, чей стаж работы в организации превышает значение, введенное с клавиатуры. Ввод с клавиатуры данных в массив, состоящий из 10 структур типа WORKER. Описание структур с именем ZNAK и WORKER, содержащей заданные поля.

Рубрика Программирование, компьютеры и кибернетика
Вид лабораторная работа
Язык русский
Дата добавления 31.01.2017
Размер файла 582,1 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

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

Размещено на http://www.allbest.ru//

Размещено на http://www.allbest.ru//

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

Тема: Строки и структуры

Задача №1

строка данные клавиатура поле

Постановка задачи

Описать структуру с именем WORKER, содержащую следующие поля:

Фамилия и инициалы работника;

Название занимаемой должности;

Год поступления на работу.

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

Ввод с клавиатуры данных в массив, состоящий из 10 структур типа WORKER; записи должны быть размещены по алфавиту;

Вывод на дисплей фамилий работников, чей стаж работы в организации превышает значение, введенное с клавиатуры;

Если таких работников нет, вывести на дисплей соответствующее сообщение.

Анализ

Для решения этой задачи сперва опишу структуру WORKER, где фамилия, инициалы и должность относятся к символьному типу char, а год поступления на службу - целочисленный int. С помощью цикла с параметром задам значение полям. Также содам переменную счетчик f, начальное значение которого равняется 0. Этот счетчик пригодится в конце программы, для вывода сообщении об отсутствии необходимых нам работников.

После того, как создана структура WORKER можно начать сортировку поля с фамилиями по алфавиту. Для этого начну исследовать структуру с помощью вложенных циклов, первый будет по переменной i, а второй по переменной j, начальное значение которой на единицу больше i. Это нужно для того, что бы проверять поле фамилия сразу по двум соседним элементам. Благодаря функцииstrcmp сравниваются две строки, результат окажется положительным, если первая фамилия больше (позже по алфавиту) второй. Если условие выполнено, то опишу переменную alf с типом WORKER. С помощью функции strcpy, которая копируют байты второй строки в первую, перемещу значение всех полей, изменяющихся по переменной i, в только что созданную переменную alfтипа структуры WORKER. После, перемещу значение всех полей, изменяющихся по переменной j в поля переменной i, а из переменной alfв переменную j. Это поможет отсортировать список фамилий в алфавитном порядке, то есть от меньшего к большему. После выполнения этой процедуры выводится отсортированный список, а с клавиатуры вводится значение стажа. Циклом по переменной i изучается структура по полю год поступления на работу, из текущего 2014 года вычитается значение года поступления работника и, если значение превышает введенный стаж, то выводится фамилия работника, а счетчику f присваивается значение 1. После проверки цикл закрывается, и проверяется счетчик, если его значение не равно единице, то выводится сообщение, что работников, чей стаж превышает количество лет, введенное с клавиатуры, нет.

Спецификация

Наименование переменной

Обозначения в алгоритме

Обозначения в программе

Статус

Тип

1

объединение элементов

WORKER

WORKER

входящая

структура

2

поле фамилия

familia

familia

входящая

WORKER символьный

3

поле инициалы

inicialy

inicialy

входящая

WORKER символьный

4

поле должность

dolzhnost

dolzhnost

входящая

WORKER символьный

5

поле год поступления

godpost

godpost

входящая

WORKER целый

6

стаж

g

g

входящая

целый

7

массив элементов

a

a

входящая

WORKER

8

номер элемента

i

i

промежуточная

целый

9

номер элемента

j

j

промежуточная

целый

10

счетчик

f

f

промежуточная

целый

11

буферная переменная для сортировки

alf

alf

промежуточная

WORKER

Алгоритм решения задачи в виде блок-схемы

Текст программы

#include"stdafx.h"

#include"string.h"

#include"iostream"

usingnamespacestd;

void main()

{

struct WORKER

{

intgodpost;

charfamilia[20], inicialy[10], dolzhnost[20];

};

WORKER a[10];

inti, g, f=0, j;

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

cin>>a[i].familia>>a[i].inicialy>>a[i].dolzhnost>>a[i].godpost;

// сортируем по фамилиям

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

for ( j = i + 1; j <10; j++)

{

if(strcmp(a[i].familia, a[j].familia) > 0)

{

WORKER alf;

strcpy(alf.inicialy, a[i].inicialy);

strcpy(alf.familia, a[i].familia);

strcpy(alf.dolzhnost, a[i].dolzhnost);

alf.godpost = a[i].godpost;

strcpy(a[i].inicialy , a[j].inicialy);

strcpy(a[i].familia, a[j].familia);

strcpy(a[i].dolzhnost , a[j].dolzhnost);

a[i].godpost = a[j].godpost;

strcpy(a[j].inicialy , alf.inicialy);

strcpy(a[j].familia, alf.familia);

strcpy(a[j].dolzhnost , alf.dolzhnost);

a[j].godpost = alf.godpost;

}

}

for( i = 0; i < 10; i++) // выводим отсортированный список

{

cout<< a[i].familia<<" "<< a[i].inicialy<<" "<< a[i].dolzhnost<<" "<< a[i].godpost<<endl;

}

cout<<"Vvedite stag, now 2014 god: ";

cin>>g;

cout<<"rabotniki, chey stag prevyshaet "<<g<<" let: "<<endl;

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

if (2014-a[i].godpost>g)

{

cout<<a[i].familia<<endl;

f=1;

}

if (!f) cout<<"takihrabotnikov net"<<endl;

system("pause");

}

Тестовый результат

Задача №2

Постановка задачи

Описать структуру с именем ZNAK, содержащую следующие поля:

Фамилия, имя;

Знак Зодиака;

Дата рождения (массив из трех чисел).

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

Ввод с клавиатуры данных в массив, состоящий из 8 элементов типа ZNAK; записи должны быть упорядочены по датам рождения;

Вывод на экран информации о людях, родившихся под знаком, название которого введено с клавиатуры;

Если таких нет, выдать на дисплей соответствующее сообщение.

Анализ

Для начала описывается структура ZNAK, в которой поля фамилия, имя и знак Зодиака относятся к символьному типу, а массив дата рождения к целочисленному. Используя цикл с параметром по переменной i, производится ввод значений полей. После ввода задается нулевое значение счетчику f, он пригодится для вывода сообщения об отсутствии в структуре элементов, удовлетворяющих условию поиска. С помощью двух вложенных циклов, первый по переменной i, а второй по переменной j, начнется исследование структуры сразу по двум элементам, так как начальное значение jна единицу больше i. Условием поиска является дата рождения, для того, чтобы сортировка происходила в правильном порядке, а именно, значение года рождения было приоритетнее месяца и дня. Первым условием будет значение дня рождения, если день первого элемента больше второго, то описывается переменнаяsortс типом структуры ZNAK. Перемещается значение всех элементов, изменяющихся по переменной i, в ново созданную переменную sort. Затем элементы, меняющиеся по переменной j, сохраняются в массив по переменной i. После этого из переменной sort все сохраняется в массив по переменной j. Благодаря этому отсортируется список элементов по дню рождения, если повторить эту процедуру еще два раза, только условием поставить месяц, а затем год рождения, то элементы поля дата рождения будут упорядочены в порядке возрастания. Вложенные циклы закрываются. Создается цикл с параметром по переменной i для вывода отсортированного списка элементов. После вывода вводится знак Зодиака для сравнения. Новым циклом с параметром исследуется структура, условием для проверки является соответствие введенного с клавиатуры знака Зодиака значению в поле структуры. Если они совпадают, то производится вывод полей фамилия, имя, знак Зодиака и дата рождения. Счетчику f присваивается значение единицы. После того, как цикл пройден, проверяется, не равен ли счетчик f нулю, если так, то выводится сообщение, что таких элементов нет.

Спецификация

Наименование переменной

Обозначения в алгоритме

Обозначения в программе

Статус

Тип

1

объединение элементов

ZNAK

ZNAK

входящая

структура

2

поле фамилия

surname

surname

входящая

ZNAK символьный

3

поле имя

name

name

входящая

ZNAK символьный

4

поле знак Зодиака

zodiac

zodiac

входящая

ZNAKсимвольный

5

поле массив дат рождения

dr

dr

входящая

ZNAK целый

6

знак для поиска

z

z

входящая

символьный

7

массив элементов

a

a

входящая

ZNAK

8

номер элемента

i

i

промежуточная

целый

9

номер элемента

j

j

промежуточная

целый

10

счетчик

f

f

промежуточная

целый

11

буферная переменная для сортировки

sort

sort

промежуточная

ZNAK

Алгоритм решения задачи в виде блок-схемы

Текст программы

#include"stdafx.h"

#include"string.h"

#include"iostream"

usingnamespacestd;

int main ()

{

struct ZNAK

{

char surname[15], name[10], zodiac[10];

intdr[3];

};

ZNAK a[8];

inti, f=0, j;

constint n=20;

char z[n];

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

cin>>a[i].surname>>a[i].name>>a[i].zodiac>>a[i].dr[0]>>a[i].dr[1]>>a[i].dr[2];

//сортировка по др

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

for(j=i+1;j<8;j++)

{

if(a[i].dr[0]>a[j].dr[0])

{

ZNAK sort;

strcpy(sort.surname, a[i].surname);

strcpy(sort.name, a[i].name);

strcpy(sort.zodiac, a[i].zodiac);

sort.dr[0]=a[i].dr[0];

sort.dr[1]=a[i].dr[1];

sort.dr[2]=a[i].dr[2];

strcpy(a[i].surname, a[j].surname);

strcpy(a[i].name, a[j].name);

strcpy(a[i].zodiac, a[j].zodiac);

a[i].dr[0]=a[j].dr[0];

a[i].dr[1]=a[j].dr[1];

a[i].dr[2]=a[j].dr[2];

strcpy(a[j].surname, sort.surname);

strcpy(a[j].name, sort.name);

strcpy(a[j].zodiac, sort.zodiac);

a[j].dr[0]=sort.dr[0];

a[j].dr[1]=sort.dr[1];

a[j].dr[2]=sort.dr[2];

}

if(a[i].dr[1]>a[j].dr[1])

{

ZNAK sort;

strcpy(sort.surname, a[i].surname);

strcpy(sort.name, a[i].name);

strcpy(sort.zodiac, a[i].zodiac);

sort.dr[0]=a[i].dr[0];

sort.dr[1]=a[i].dr[1];

sort.dr[2]=a[i].dr[2];

strcpy(a[i].surname, a[j].surname);

strcpy(a[i].name, a[j].name);

strcpy(a[i].zodiac, a[j].zodiac);

a[i].dr[0]=a[j].dr[0];

a[i].dr[1]=a[j].dr[1];

a[i].dr[2]=a[j].dr[2];

strcpy(a[j].surname, sort.surname);

strcpy(a[j].name, sort.name);

strcpy(a[j].zodiac, sort.zodiac);

a[j].dr[0]=sort.dr[0];

a[j].dr[1]=sort.dr[1];

a[j].dr[2]=sort.dr[2];

}

if(a[i].dr[2]>a[j].dr[2])

{

ZNAK sort;

strcpy(sort.surname, a[i].surname);

strcpy(sort.name, a[i].name);

strcpy(sort.zodiac, a[i].zodiac);

sort.dr[0]=a[i].dr[0];

sort.dr[1]=a[i].dr[1];

sort.dr[2]=a[i].dr[2];

strcpy(a[i].surname, a[j].surname);

strcpy(a[i].name, a[j].name);

strcpy(a[i].zodiac, a[j].zodiac);

a[i].dr[0]=a[j].dr[0];

a[i].dr[1]=a[j].dr[1];

a[i].dr[2]=a[j].dr[2];

strcpy(a[j].surname, sort.surname);

strcpy(a[j].name, sort.name);

strcpy(a[j].zodiac, sort.zodiac);

a[j].dr[0]=sort.dr[0];

a[j].dr[1]=sort.dr[1];

a[j].dr[2]=sort.dr[2];

}

}

cout<<endl;

for(i = 0; i < 8; i++) // выводим отсортированный список

{

cout<< a[i].surname <<" "<< a[i].name <<" "<< a[i].zodiac<<" "<< a[i].dr[0] <<" "<< a[i].dr[1]<<" "<< a[i].dr[2]<<endl;

}

cout<<"Vvediteznak: "; cin>>z;

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

if(strcmp(z, a[i].zodiac)==0)

{

cout<<a[i].surname<<" "<<a[i].name<<" "<<a[i].zodiac<<" "<<a[i].dr[0]<<" "<<a[i].dr[1]<<" "<<a[i].dr[2]<<endl;

f=1;

}

if(!f) cout<<"takih net"<<endl;

cout<<endl;

system ("pause");

return 0;

}

Тестовый результат

Задача №3

Постановка задачи

Разработать базу данных «Магазин по продаже персональных компьютеров» (процессор, ОЗУ, ПЗУ, винчестер и т.п., стоимость). Вывести на экран данные о компьютерах, стоимость которых менее 6 тысяч рублей.

Анализ

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

Описывается структура magaz и поля. Создается массив типа структуры magaz, с помощью цикла с параметром по переменной i заполняются поля структуры. Перед этим переменной количество присваивается нулевое значение, k пригодится в конце программы, для проверки, были ли компьютеры, отвечающие условию поиска. После того, как поля структуры заполнены, цикл с параметром по переменной iисследует поля и выполняет поиск элементов соответствующих условию: цена меньше 6000, при обнаружении таковых счетчик количества увеличивается на единицу, и выводится вся информация об этом компьютере. По выходу из цикла условием проверяется, не равно ли количество нулю, если равно, то выводится сообщение, что компьютеров с ценой ниже 6000 нет.

Спецификация

Наименование переменной

Обозначения в алгоритме

Обозначения в программе

Статус

Тип

1

объединение элементов

magaz

magaz

входящая

структура

2

поле цена

tsena

tsena

входящая

magaz целый

3

поле ОЗУ

OZU

OZU

входящая

magaz целый

4

после жесткий диск

zhd

zhd

входящая

magaz целый

5

поле название

nazvanie

nazvanie

входящая

magaz символьный

6

поле тип процессора

protsessor

protsessor

входящая

magaz символьный

7

поле видеокарта

vkarta

vkarta

входящая

magaz символьный

8

массив элементов

a

a

входящая

magaz

9

номер элемента

i

i

промежуточная

целый

10

количество

k

k

промежуточная

целый

Алгоритм решения задачи в виде блок-схемы

Текст программы

#include"stdafx.h"

#include"iostream"

usingnamespacestd;

voidmain()

{

structmagaz

{

inttsena, OZU, zhd;

charnazvanie[10], protsessor[10], vkarta[10];

};

magaz a[5];

{

int i, k=0;

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

cin>>a[i].nazvanie>>a[i].protsessor>>a[i].vkarta>>a[i].OZU>>a[i].zhd>>a[i].tsena;

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

if (a[i].tsena<6000)

{

k++;

cout<<a[i].nazvanie<<" "<<a[i].protsessor<<" "<<a[i].vkarta<<" "<<a[i].OZU<<" "<<a[i].zhd<<"\t";

}

if (k==0) cout<<"takih PK net"<<endl;

}

system("pause");

}

Тестовый результат

Задача №4

Постановка задачи

Написать функции, которые шифруют-дешифруют текст, помещенный в файле, имя которого задается в качестве параметра, заменяя буквы цифрами в соответствии с содержащейся в файле cod.txt таблицей кодировки (значение кодов произвольные)

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

Вывести на экран исходный файл, закодированный и декодированный.

Анализ

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

Спецификация

Наименование переменной

Обозначения в алгоритме

Обозначения в программе

Статус

Тип

1

строковая константа

n

n

постоянная

целый

2

строка символов

z

z

входящая

символьный

3

массив элементов

f

f

входящая

целый

4

номер элемента

i

i

промежуточная

целый

5

длина строки

l

l

промежуточная

целый

Алгоритм решения задачи в виде блок-схемы

Текст программы

#include"stdafx.h"

#include"string.h"

#include"iostream"

usingnamespacestd;

int main ()

{

constint n=100;

inti, f[100], l;

char z[n];

cout<<"Vvedite text dlyashifrovki: "<<endl;

cin.getline(z,n);

l=strlen(z);

cout<<"Text v zashifrovannom vide: "<<endl;

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

{

f[i]=z[i];

cout<<f[i]<<" ";

}

cout<<endl;

cout<<"Text v rasshifrovannom vide: "<<endl;

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

{

z[i]=f[i];

cout<<z[i];

}

cout<<endl;

system ("pause");

return 0;

}

Тестовый результат

Размещено на Allbest.ru

...

Подобные документы

  • Понятие класса на языке Java. Ввод с клавиатуры данных в массив, состоящий из десяти объектов типа WORKER. Вывод на дисплей фамилий работников, чей стаж работы в организации превышает значение, введенное с клавиатуры. Оценка работы программы, ее код.

    курсовая работа [1,2 M], добавлен 20.04.2014

  • Разработка ввода с клавиатуры и вывода на экран монитора данных с помощью стандартных функций printf и scanf. Ввод количества материальных точек. Работа с линейным списком. Хранение содержимого списка в блоке ячеек памяти с последовательными адресами.

    курсовая работа [176,8 K], добавлен 18.01.2016

  • Описание записи, содержащей поля: расчётный счёт плательщика и получателя, перечисляемая сумма в рублях. Программа для ввода данных с клавиатуры в массив. Листинг исходного файла программы вывода информации на экран и распечатка снимков с экрана.

    контрольная работа [710,6 K], добавлен 20.01.2011

  • Функции ввода с клавиатуры и вывода на экран, алгоритм вывода чисел. Генерация звуковых сигналов в ПЭВМ. Принципы работы видеосистемы: адресация и режимы работы адаптера CGA, режим работы дисплея. Таблица векторов прерываний в работе клавиатуры.

    отчет по практике [700,4 K], добавлен 23.11.2010

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

    лабораторная работа [36,3 K], добавлен 03.03.2009

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

    реферат [14,5 K], добавлен 06.12.2011

  • Эволюция компьютерной клавиатуры: рождение, телетайп, первые клавиатуры, емкостная клавиатура. Виды клавиатур: АТРасширенная, жесткоконтактная, АТХ-клавиатуры, мультимедийные и Win-клавиатуры. Эргономика клавиатур. Защита от пользователя.

    реферат [22,1 K], добавлен 09.11.2007

  • Описание структурного шаблона с именем ZNAK, содержащего элементы NAME, ZODIAC, BDAY. Операции со структурами в языке Си. Подключение графической библиотеки программы. Указатель как переменная, содержащая адрес некоторого объекта в памяти компьютера.

    контрольная работа [342,9 K], добавлен 10.01.2012

  • Реализация программы, разработанной в среде Turbo C++. Обработка динамической структуры данных, содержащей сведения об авторах книг. Моделирование работы со структурой как с базой данных. Метод сортировки и описание работы пользовательских подпрограмм.

    курсовая работа [124,3 K], добавлен 23.12.2010

  • Изучение понятия и основных видов массивов. Ввод массива с клавиатуры и вывод на экран. Сортировка массивов. Метод простых обменов (пузырьковая сортировка). Сортировка простым выбором и простым включением. Решение задач с использованием массивов Паскаля.

    курсовая работа [82,1 K], добавлен 18.03.2013

  • Особенности работы с данными с MS Excel. Ввод данных в ячейку из раскрывающегося списка. Проверка содержимого ячеек при вводе с клавиатуры. Поиск ячеек со встроенной проверкой значений. Автоматическая обработка данных. Подведение промежуточных итогов.

    презентация [1,8 M], добавлен 16.10.2013

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

    лабораторная работа [32,6 K], добавлен 06.07.2009

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

    курсовая работа [1,9 M], добавлен 22.05.2013

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

    курсовая работа [336,2 K], добавлен 27.06.2015

  • Общие сведения об алгоритмах. Свойство и этапы построения алгоритма. Нисходящее проектирование программ. Основные алгоритмические структуры. Принципы структурной алгоритмизации. Массивы случайных чисел. Ввод исходных данных. Определение и вывод данных.

    методичка [435,3 K], добавлен 09.12.2014

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

    контрольная работа [290,6 K], добавлен 17.07.2012

  • Запись в массив листа Excel c именем "Эксперимент". Среднее арифметическое значение элементов массива. Вывод диалогового окна. Фрагмент программы, организующий считывание исходного массива в программу для обработки. Адрес ячейки электронной таблицы.

    контрольная работа [1,1 M], добавлен 16.08.2011

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

    презентация [57,8 K], добавлен 14.10.2013

  • Устройство, которое используется для ввода букв, символов и других данных в компьютер. Определение "клавиатура" и виды клавиатур. Ввод данных в электронное устройство. Алфавитно-цифровые, компьютерные, цифровые, проводные и беспроводные клавиатуры.

    презентация [369,4 K], добавлен 22.12.2012

  • Ввод данных в ячейку из раскрывающегося списка. Проверка содержимого ячеек при вводе данных с клавиатуры. Отмена проверки значения. Таблица после подведения промежуточных итогов. Консолидация данных и порядок ее выполнения, алгоритм и основные этапы.

    презентация [1,8 M], добавлен 29.09.2013

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.