Работа с массивами на языке СИ

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

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

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

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

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

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

Задание 1

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

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

Внимание: пользоваться в этой контрольной функциями из модуля <string.h>запрещено!

Даны строки S1 и S2 (длина S2 не превосходит длину S1). Выяснить, верно ли, что среди символов строки S1 имеются всесимволы, входящие в строку S2 (не обязательно в порядке их следования в S2).

Листинг программы

#include<stdio.h>

#include <stdlib.h>

 // Прототип

bool Verification (char* s1, char* s2);

int main()

{

system («COLOR f0»);

char s1 [500], s2 [500]; // Буферадлястрок

printf («Enterstroku 1»); // Запрос на ввод строки 1

gets(s1); // Считываем строку

printf («Enterstroku 2»); // Запрос на ввод строки 2

gets(s2); // Считываем строку

bool R = Verification (s1, s2); // Проверяем наличие символов строки s2 в строке s1

if (R) // Если в первой строке имеются все символы второй то выводим соответствующее сообщение

{

printf («\nOk. Vsesimvolyimeyutsya.\n\n», s2);

} else { // Если не все символы имеются то выводим другое сообщение

printf («\nNO. V 1y stroke ne hvataetsimvolovdlyavtoroystroki.\n\n»);

}

system («pause»); //

return 0;

}

 // Функция проверяет хватитли символов в строке s1 для того что бы

 // написатьстроку s2

bool Verification (char* s1, char* s2)

{

 // Перебираем все символы второй строки

for (int i=0; s2 [i] && s2 [i]!='\n'; i++)

{

 // Подсчитываем количество символов во второй строке такихже как текущий

int n=0; // Количество символов во 2й строке такихже как текущий

for (int i2=0; s2 [i2] && s2 [i2]!='\n'; i2++)

{

 // Если во 2й строке нашли символ такойже как текущий

if (s2 [i2] == s2 [i]) n++; // то увеличиваем счетчик

}

int m=0; // Количество символов в 1й строке такихже как текущий во 2й

 // Подсчитываем количество символов в первой строке такихже как текущий во 2й

 // Перебираем все символы первой строки

for (int j2=0; s1 [j2] && s1 [j2]!='\n'; j2++)

{

 // Если во 1й строке нашли символ такойже как текущий во второй

if (s1 [j2] == s2 [i]) m++; // то увеличиваем счетчик

}

 // Определенных символов во второй строке больше чем в первой возвращаем лож

if (n>m) return false;

}

 // Перебраны все символы 2й строки и в 1й строке соответствующих символов нужное количество

returntrue; // возвращаем истину

Тестирование программы

Запускаем программу двойным щелчком мыши по ярлыку «V3K2Z2».

Программа запускается без ошибок и сбоев.

Программа просит ввести первую строку. Вводим первую строку.

После ввода первой строки и нажатия Enterпрограмма просит ввести вторую строку. Вводим вторую строку.

После ввода второй строки и нажатия Enterпрограмма выдает ответ что «Все символы во второй строке имеются». Программа работает без сбоев и ошибок.

Задание 2

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

При обработке текста необходимо учитывать дополнительные требования и условия в соответствии с вариантом.

Выводить лишь те строки, для которых ответ утвердительный. Перед каждой строкой записывать номер строки в исходном тексте.

Листинг программы

#include<stdio.h>

#include <stdlib.h>

 // Прототипы

bool Verification (char* s1, char* s2);

void Files (char* f1, char* f2, char* s);

int main()

{

system («COLORf0»);

 // Буфера для имен файлов и подстроки символы которой должны быть в строках файлов

char f1 [500], f2 [500], s[500];

printf («Enter 1 file name»); // Запроснаимени 1 гофайла

gets(f1); // Считываем строку

printf («Enter 2 filename»); // Запрос на имени 2 го файла

gets(f2); // Считываем строку

printf («Interstring»); // Запрашиваем строку для которой будем икать символы

gets(s);

printf («\n»);

Files (f1, f2, s); // Обрабатываемфайлы

printf («\n\n»);

system («pause»); //

return 0;

}

 // Функция проверяет хватитли символов в строке s1 для того что бы

 // написатьстроку s2

bool Verification (char* s1, char* s2)

{

 // Перебираем все символы второй строки

for (int i=0; s2 [i] && s2 [i]!='\n'; i++)

{

 // Подсчитываем количество символов во второй строке такихже как текущий

int n=0; // Количество символов во 2й строке такихже как текущий

for (int i2=0; s2 [i2] && s2 [i2]!='\n'; i2++)

{

 // Если во 2й строке нашли символ такойже как текущий

if (s2 [i2] == s2 [i]) n++; // то увеличиваем счетчик

}

int m=0; // Количество символов в 1й строке такихже как текущий во 2й

 // Подсчитываем количество символов в первой строке такихже как текущий во 2й

 // Перебираем все символы первой строки

for (int j2=0; s1 [j2] && s1 [j2]!='\n'; j2++)

{

 // Если во 1й строке нашли символ такойже как текущий во второй

if (s1 [j2] == s2 [i]) m++; // то увеличиваем счетчик

}

 // Определенных символов во второй строке больше чем в первой возвращаем лож

if (n>m) return false;

}

 // Перебраны все символы 2й строки и в 1й строке соответствующих символов нужное количество

returntrue; // возвращаем истину

}

 // Функция проверяет все строки исходного файла на наличие символов для заданной строки стоки

 // и записывает достаточные строки в файл результат и выводит их на экран

void Files (char* f1, char* f2, char* s)

{

FILE* file1 = fopen (f1, «r»); // Открываем файл для чтения

FILE* file2 = fopen (f2, «w»); // Открываем файл для записи

char s1 [500]; // Считанная строка из файла

int n = 1; // Номер строки в исходном файле

 // Считываем по очереди все строки из файла

while (fgets(s1, 500, file1))

{

boolR = Verification (s1, s); // Проверяемналичиесимволовдлястрокиs

if (R) // Если в текужей строке есть символы для написания строки s то

{

fprintf (file2, «%d % s», n, s1); // Записываем достаточную строку в файл

printf («%d % s», n, s1); // Выводим достаточную строку на экран

}

n++; // Следующий номер исходной строки

}

fclose(file1); // Закрываем

fclose(file2); // файлы

}

Тестирование программы

Запускаем программу двойным щелчком мыши по ярлыку «V3K2Z2».

После запуска программа просит ввести имя первого текстового файла. Вводим название первого текстового файла «r.txt».

После ввода имени первого текстового файла и нажатия Enter программа просит ввести имя второго текстового файла. Вводим имя второго текстового файла «w.txt».

После ввода имени второго текстового файла и нажатия Enterпрограмма просит ввести номер строки из первого текстового файла. Вводим номер строки «11».

Мы видим, что 11 строка содержит текст «(Intheformaldefinition, each». При правильной работе программы она должна вывести на экран данную строку.

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

Программа успешно сохранила 11 строку во втором текстовом файле.

Задание 3

Иногда бывает с некоторой совокупностью однотипных данных удобно работать как с двумерным массивом, но количество элементов в разных его строках различно. Тогда этот массив можно организовать как рваный массив. В рамках выполнения данной контрольной работы необходимо написать программу построения в динамической памяти рваного массива в соответствии с заданием по вариантам. Кроме того, необходимо создать вспомогательную функцию, которая выводит массив на экран, получая указатель на него в списке аргументов. Вся дополнительная информация (количество строк, количество элементов в каждой строке) должна быть извлечена также по этому указателю.

С помощью этой функции вывести массив на экран. Для удобства отладки и проверки количество строк и столбцов, а также значение элемента массива должны лежать в пределах от 1 до 10. Это следует учитывать как при использовании датчика случайных чисел, таки при считывании с клавиатуры (при некорректном значении - ввод повторять). Следует иметь в виду, что при таких размерах массива (не более, чем 10Ч10) накладные расходы и трудоемкость организации рваных массивов, наверняка, превзойдут выигрыш; настоящий эффект достигается при больших массивах.

Листинг программы

 // библиотеки

#include<stdlib.h>

#include <stdio.h>

#include <limits>

#include <time.h>

 // Прототипы

voidPrintArray (double **p);

double ** ConstructArray();

voidDestructArray (double **p);

void main()

{

system («COLOR f0»); // Цвета

double** Array; // Рваныймассив

Array = ConstructArray(); // Создаеммассив

PrintArray(Array); // Отображаеммассив

DestructArray(Array); // Освобождаемпамятьмассива

system («pause»); // Пауза

}

double** ConstructArray()

{

double** Array;

srand (time(0)); // Дляслучайностичисла

intAmountRow = rand()%10+1; // Количество строк случайно

 // Резервируем память для вектора указателей и места для хранения количества указателей

Array = (double**) malloc (sizeof(double*) * AmountRow + sizeof(int));

*(int*) Array = AmountRow; // В минус первом элементе количество указателей

(*((int**)&Array))++; // Смещаем указатель на один элемент типа int

for (int a=0; a<AmountRow; a++) // Циклпострокам

{

intAmountElemetn = rand()%10+1; // Количество элементов случайно

 // Резервируем память для элементов строки и места для хранения количества элементов

Array[a] = (double*) malloc (sizeof(double) * AmountElemetn + sizeof(int));

*(int*) Array[a] = AmountElemetn; // В минус первом элементе количество элементов

(*((int**)&Array[a]))++; // Смещаем указатель на один элемент типа int

for (int b=0; b<AmountElemetn; b++) // Циклпоэлементам

{

 // Элемент случайный

Array[a] [b] = rand() *.943859;

}

}

returnArray; // Возвращаем указатель на массив

}

voidPrintArray (double** Array)

{

 // Число строк в минус первом элементе

intAmountRow = ((int*) Array) [-1];

for (int a=0; a<AmountRow; a++) // Циклпострокам

{

printf (» \n»); // Новая строчка

 // Число элементов в минус первом элементе массива

intAmountElemetn = ((int*) Array[a]) [-1];

for (int b=0; b<AmountElemetn; b++) // Циклпоэлементам

{

 // Выводэлементовстрок

printf («Row No % d Element No % d:%lf \n», a+1, b+1, Array[a] [b]);

}

}

}

voidDestructArray (double** Array)

{

 // Числостроквминуспервомэлементе

intAmountRow = ((int*) Array) [-1];

for (int a=0; a<AmountRow; a++) // Циклпострокам

{

(*((int**)&Array[a])) - ; // Смещаем указатель на один элемент типа int

free (Array[a]); // Освобождаем память строки

}

(*((int**)&Array)) - ; // Смещаем указатель на один элемент типа int

free(Array); // Освобождаем память вектора указателей

}

Тестирование программы

Запускаем программу двойным щелчком мыши по ярлыку «V3K4Z1»

программа листинг тестирование массив

После запуска программа выдает всю интересующую нас информацию в соответствии с заданием. Программа работает без сбоев и ошибок.

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


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

  • Выведение значения элементов массива, которые удовлетворяют неравенству. Подсчет количества отрицательных элементов массива. Изменение исходного массива. Тестирование программы. Проверка её работоспособности. Реакция программы на сообщение об ошибке.

    лабораторная работа [1,3 M], добавлен 23.11.2014

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

    контрольная работа [360,4 K], добавлен 13.06.2012

  • Особенности разработки программ на языке Turbo Pascal на примере программы обработки массива данных с построением диаграммы. Функции программы и основные требования к ней. Состав входных и выходных данных. Использование предметной области "Садовод".

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

  • Основные типы циклов программирования. Методы применения специальных функций break, continue и цикла while. Обработка массивов информации. Условия применения циклических алгоритмов на языке программирования С++. Инициализация одномерного массива.

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

  • Разработка программы для редактирования в оперативной памяти текстовых ASCII-файлов размером не более 40 килобайт, на языке программирования Pascal в среде разработки Turbo Pascal 6.0. Инструкция для пользователя. Листинг разработанной программы.

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

  • Встроенные типы данных, основные конструкции, структуры и применение языка Javа. Введение в интегрированную среду разработки Eclipse. Листинг программы, иллюстрирующей работу с одномерными массивами (создание массива). Спецификация класса Figure.

    методичка [1,4 M], добавлен 30.06.2009

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

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

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

    курсовая работа [494,5 K], добавлен 20.06.2012

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

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

  • Понятие и цель применения текстовых данных. Принцип кодирования азбуки Морзе. Основные методы языка высокого уровня C#. Алгоритм работы, листинг, тестирование программы для перевода текста в последовательность кодов азбуки Морзе. Руководство пользователя.

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

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