Создание проекта и библиотеки пользовательских программ обработки текстовых файлов

Распознавание параметров командной строки и обработка данных. Выбор четырех вариантов обработки данных. Запрос номера обрабатываемого файла. Построение гистограммы распределения. Смешивание, выравнивание, поиск и статистика как типы обработки данных.

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

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

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

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

Контрольное домашнее задание по курсам «Компьютерный практикум», «Информатика», «Технологии и языки программирования»

«Создание проекта и библиотеки пользовательских программ обработки текстовых файлов»

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

Программа должна:

- обрабатывать два входных текстовых файла;

- не изменять данные в файлах;

- распознавать параметры командной строки и обрабатывать данные, в соответствии с ними;

- предоставлять пользователю возможность выбора четырёх (А, Б, В, Г) вариантов обработки данных (по вариантам);

- для пунктов Б, В, Г запрашивать номер обрабатываемого файла;

- для пункта Г строить гистограмму распределения;

- контролироваться пользователем посредством меню;

- обеспечивать возможность задать имена файлов;

- давать возможность пользователю вводить исходные данные в файлы;

- выводить результат на экран

2. Варианты типов обработки

А (смешивание)

Все чётные слова первого файла заменить на нечётные слова из второго файла

Б (выравнивание)

Установить красную строку размером N пробелов, если строка начинается с пробела

В (поиск)

Найти в файле слово по заданной центральной части, вывести слово и его позицию командный строка гистограмма данные

Г (статистика)

Подсчитать в файле общее количество и число разных пар слов

#include <stdio.h>

#include <malloc.h>

#include <stdlib.h>

struct _x; /создание структуры типа x(массив из указателей), таким образом мы сможем создать массив структур(массив из строк)

{

char *s;

}

void function1(struct a, struct b, int n, int m ); / функция, которая все чётные слова первого файла заменяет на нечётные слова из второго файла( делает это на уровне массива строк), а потом заносит это в третий файл, создаваемый в функции

int i, n,m;/ n - количество слов первого файла, m - количество слов второго файла

{

for( i = 0, i <min(m,n),i = i +2)/ цикл идёт пока не закончатся слова первого файла

{

a[i+1].s =b[i].s;

if (i = m) / (на тот случай, если во втором файле слов больше чем в первом, цикл остановится);

{break}

}

FILE *pTextFile = fopen("C:\\TextFileW.txt", "a+");/создание нового текстового файла для занесения в него данных

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

{

fprinf(p,"%s", a[i].s);

}

fclose("C:\\TextFileW.txt");/закрытие файла

}

void function2(FILE *f, int n); Устанавливает красную строку размером N пробелов

{

char prob[50]; /массив из пробелов, количество которых определяется входными данными

int i;

for ( i = 0; i < n ; i++) / цикл по занесению n - го количество пробелов в маасив пробелов

{

prob[i] = " _ " ;

}

fopen(*f , "rt");/открывается текстовый файл(который мы подаём в функцию)

void rewind(FILE f);/переводит курсор в начало текстового файла

fprintf(f,"%s", prob); /записывает в текстовый файл заданное количество пробелов

fclose(*f);/закрытие файла

}

void function3(_x a, char zentr)/ ищет слово по заданной центральной части

int e, i, pos, e1;

for (i=0; i <= n; i++)/ цикл идёт по всем словам заданного файла( точнее по массиву из строк, в который занесены все слова исходного файла

{

e= sscanf(a[i].s,"%[^zentr^],e1);

if(e=1)

{

printf("%s", a[i].s);

printf(i, %d", pos);

}

}

int function4(_x a, int n);/функция, которая считает в файле общее количество и число разных пар слов, подаётся структура и кол во слов этой структуры

int o, i, p, r,

for( i =0, i <=n, i++)/перебираем все слова

{

if(a[i] <> "0")

{

for (p=0, p<=n, p++);/для каждого слова опять перебираем все слова и если находим такое же слово на другой позиции в массиве то учитываем его (находим количество таких слов для каждого слова)

{

if(a[i].s = a[p].s && i !=p)/проверяем каждое слово на совпадение с исходным

{

a[i] = "0"если попадается совпадающее слово, то мы его обнуляем

o++;

}}}}

r = n - o;/ число разных слов

for i =0, i<r, i++;/ считаем сколько пар слов может образовать r - ое количество разных слов (t = ?(n - i) от

i = 0 , до n с шагом 1;

{

t = t + r - i;

}

return t

}

void main()

{

file *f

_x a; /создание структуры а типа х

int i, k, g, n, h, z, prob;

char word1, text, word, zentr;

a = (struct _x)*malloc(20.sizeof(struct _x));/ выделение памяти под структуру а (массива из строк)

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

{

a[i].s = (char *)(malloc(30));

}/

fopen("new1.txt", "rt");/открывается текстовый файл

fscanf(f, "%[]" , text);/строка из файла заносится в переменную text

fclose(*f);/закрытие файла

fopen("new2.txt",rt);

fscanf(f, "%[]" , text2);/строка из файла заносится в переменную text

fclose(*f);/закрытие файла

sscanf (text ,"%s" , word 1);/ из строики считывается первое слово(т.к. все остальные слова мы будем идентифицировать по стоящим перед ними пробелам, а перед первым словом пробела нет

k = strlen(word1);/узнаём длину первого слово(нужно для цикла, откуда начинать)

a[0].s = word1;/заносим первое слово файла в первый элемент массива структур

for i = k; i <=strlen(text); i ++;/начинаем цикл по заполнения массива структур словами текстового файла ( со второго слова)

{

/(для выделение слова используется следующий алгоритм: идём пошагово (i++) по строке - массиву символов, и проверяем на наличие пробелов , если встречается пробел, то проверяем, какой следующий симов, если не пробел , то начинается слово, которое мы заносим другим циклом(уже следующим циклом который заносит символы в строке (идёт до пробела) в переменную word, в последствии из этой переменной текст считывается в элемент массива строк) if(text[i]=" ")

{

if(text[i+1] ! = " ")

{

g =0;

whill (text[i +1] !=" ")

{

word[g] = text[i +1];

g++;

i++;

}

n++;

sscanf(word; "%s", a[n].s);

}

}

}/ то же самое делаем и для второго файла

struct _x b; /создание структуры b типа х

b = (struct _x)*malloc(20.sizeof(struct _x));/ выделение памяти под структуру b (массива из строк)

for (i = 0; i = 20; i++)

{

b[i].s = (char *)(malloc(30));

}

fopen("new2.txt" , "rt");/открывается текстовый файл

fscanf(f, "%[]" , text);/строка из файла заносится в переменную text

fclose(*f);/закрыие файла

fopen("new2.txt",rt);

fscanf(f, "%[]" , text2);/строка из файла заносится в переменную text

fclose(*f);/закрытие файла

sscanf (text ,"%s" , word 1)

for ( i = k; i <=strlen(text); i ++)

if(text[i]=" ")

{

if(text[i+1] ! = " ")

{

g =0;

whill (text[i +1] !=" ")

{

word[g] = text[i +1];

g++;

i++;

}

m++;

sscanf(word,"%s", b[m].s);

}

}

}

printf("введите номер пункта");

scanf("%d",& h);

if(h == 1);

{

function 1(a,b,n,m);

}

if(h==2);

{

printf("введите номер файла");

sscanf("%d",& z);

if(z==1)

{

printf("введите количество пробелов");

scanf("%d",&prob);

void function2(("new1".txt, prob);

}

if(z==2);

{

printf("введите количество пробелов");

scanf("%d", &prob);

void function2(("new2".txt, prob);

}

}

if(h==3)

{

printf("введите номер файла");

scanf("%d", &z);

if(z==1)

{

printf("введите центральную часть слова");

scanf("%s", &zentr);

function3(_x a ,zentr);

}

if((z==2)

{

printf("введите центральную часть слова");

scanf("%s", & zentr);

function3( _x b, zentr);

}

}

if(h==4)

{

printf("введите номер файла");

scanf("%d", &z);

if(z==1)

{

function3(_x a ,n);

}

if((z==2)

{

function3(_x b, m);

}

}

}

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


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

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