МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ
ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННО БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ
НОВОСИБИРСКИЙ ГОСУДАРСТВЕННЫЙ
ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ
Учебный Центр Информационных Технологий «Информатика»
Лабораторная работа №3
«Разнотипные переменные. Динамический и статический способы создания переменных» по дисциплине «Информатика и программирование 2 часть»
Направление подготовки: 230105 - «Программное обеспечение вычислительной техники и автоматизированных систем»
Выполнил слушатель:
Вариант: №3
Дата сдачи: 11.06.2016
Преподаватель:
Новосибирск, 2016г.
1. Цель
Познакомиться с разнотипными переменными и способами их создания.
2. Вариант задания
Разработать две функции, одна из которых вводит с клавиатуры набор данных в произвольной последовательности и размещает в памяти в переменном формате. Другая функция читает эти данные и выводит на экран. Программа запрашивает и размещает в памяти несколько наборов данных при помощи первой функции, а затем читает их и выводит на экран при помощи второй. Размещение данных производить в статическом массиве байтов фиксированной размерности с контролем его переполнения.
Вариант №3. Последовательность строк символов. Каждая строка предваряется байтом - счетчиком символов. Ограничение последовательности - счетчик со значением 0.
3. Анализ задачи и алгоритм
1) Анализ задачи
Входные данные: пользователь вводит строки символов
Результат: введенные строки символов помещают в последовательность строк и размещаются в памяти в переменном формате.
Метод решения: реализуем две функции для работы с последовательностью строк символов, первая функция будет введенные строки символов размещает в последовательности и контролировать ее переполнения, а вторая все строки символов, помещенные в последовательность.
2) Алгоритм решения задачи
Первая функция, которая помещает введенную строку символов в последовательность, сначала находит конец последовательности (символов конца последовательности), затем считывает введенную строку пользователем. Если это пустая строка, то ввод данных в последовательность прекращается. Если строка символов превышает оставшееся свободное место в последовательности, то пользователю выводится сообщение об этом и предлагается ввести новую строку символов. Если введенную строку возможно поместить в последовательность, то сначала записывается размер строки, затем сама строка, а в конец ставится символ конца последовательности 0.
Вторая функция, которая реализует вывод последовательности строк символов на экран, сначала считывает длину строки. Если длина строки равна нулю, то вывод прекращается. А если длина строки символов не равна нулю, то полученная строка символов выводится на экран. Далее считывается следующая длина строка и так до тех пор, пока не встретиться символ конца последовательности 0.
4. Описание программной реализации
1) Используемые переменные
#define N 100 – размер последовательности;
char arr[N] – последовательность, в которую записываются строки;
char buf[1000] – буфер, в который записывается введенная строка;
int lenStr – длина строки символов;
int i – индекс для обхода строки символов;
int pos – текущая позиция в последовательности;
int nom – номер строки в последовательности;
2) Используемые функции (процедуры)
void InputSequence(char arr[])
Аргументы процедуры:
char arr[] – последовательность строк символов;
Принцип работы: введенные пользователем строки символов записываются в последовательность при условии, если в последовательности есть место для записи этой строки.
void ShowSequence(char arr[])
Аргументыпроцедуры:
char arr[] – последовательность строк символов;
Принцип работы: вывод на экран всех записанных строк символов в указанной последовательности
5. Пример работы программы
При запуске программы пользователю предлагается ввести строки символов, которые помещаются в последовательность, а потом выводятся на экран
Тест №1
В данном случае ввели 4 строки символов, для выхода ввели пустую строку, в итоге в последовательность были записаны все строки, которые ввели.
Тест №2
В данном случае демонстрируется контроль переполнения последовательности строк символов и пользователю предлагается ввести строку короче
Тест №3
В данном случае демонстрируется ввод строк символов в последовательность и контроль переполнения последовательности.
6. Выводы
В ходе выполнения лабораторной работы были рассмотрены основные принципы работы с разнотипными переменными, способы их создания.
В разработанном консольном приложении определили две функции для работы с последовательностью строк символов, в которой записывается длина строки и сама строка. Первая функция осуществляет запись строк символом в последовательность строк и контроль ее переполнения. Вторая функция осуществляет вывод всех строк символов, записанных в данной последовательности.
В результате получили консольное приложение, которое позволяет записывать строки символов в произвольном формате в последовательность и выводить на экран все записанные строки.
Приложение 1. Исходный код
#include <stdio.h>
#include <string.h>
#include <Windows.h>
#define N 100
void InputSequence(char arr[]) {
int lenStr, i, pos;
char buf[1000];
printf("----------Ввод последовательности строк символов----------\n");
printf("*Для выхода введите пустую строку\n");
for(i = 0; i < N; i++)
if (arr[i] == 0) {
pos = i;
break;
}
while(1) {
if ((N - pos) <= 2) {
printf("Последовательность текстовых строк полностью заполнена!\n");
return;
}
printf("Введите строку символов:");
fflush(stdin);
gets_s(buf, 1000);
lenStr = strlen(buf);
if(lenStr == 0)
return;
if(lenStr > 255) {
printf("Нельзя записать в одну строку больше 255 символом!\n");
continue;
}
if((N - pos - 2) < lenStr) {
printf("Нельзя записать строку из %d символом!\n
Для записи доступно - %d байт\n", lenStr, (N - pos - 2));
continue;
}
arr[pos++] = lenStr;
for(i = 0; i < lenStr; i++)
arr[pos++] = buf[i];
arr[pos] = 0;
printf("Введенная строка успешно записана в последовательность\n");
}
}
void ShowSequence(char arr[]) {
int lenStr, i, pos, nom;
printf("----------Вывод последовательности текстовых строк----------\n");
pos = 0;
nom = 0;
while(1) {
lenStr = arr[pos++];
if(lenStr == 0) break;
printf("[%d] ", nom++);
for(i = 0; i < lenStr; i++)
printf("%c", arr[pos++]);
printf("\n");
}
}
void main() {
char arr[N] = {0};
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
InputSequence(arr);
printf("\n");
ShowSequence(arr);
getchar();
}
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.