Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

ЛР ОАиП 2 семестр ФЗО 3 вариант

.docx
Скачиваний:
5
Добавлен:
24.12.2018
Размер:
32.92 Кб
Скачать

Вариант 3

Тема: Файлы.

Задача 1. Найти количество гласных букв в текстовом файле (осуществить 2 возможности: чтение из созданного файла, создание нового файла, запись в него и чтение уже из этого файла).

Задача 2.

Компоненты файла f- целые двухзначные числа. Получить файл g, образованный из f включением только чисел больше к.

#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>

#include<stdlib.h>

#define VAR 3

int main()

{

#if VAR==1// Задача 1

FILE*file = fopen("test1.txt", "rt");

if (!(file = fopen("test1.txt", "rt")))

{

printf("Nevozmozno otkrit' fail");

return 0;

}

int k = 0;

char x;

printf("1\n");

while (!feof(file))

{

x = fgetc(file); // putchar(x);

printf("2\n");

if (x == 'a' || x == 'e' || x == 'i' || x == 'o' || x == 'u' || x == 'A' ||

x == 'E' || x == 'I' || x == 'O' || x == 'U')

k = k + 1;

printf("3\n");

}

printf("Kolichestvo glasnih bukv v faile %d\n", k);

fclose(file);

scanf("%d", k);

return 0;

#endif;

#if VAR==2

FILE*file1 = fopen("test2.txt", "wt");

if (!(file1 = fopen("test2.txt", "wt")))

{

printf("Nevozmozno otkrit' fail");

return 0;

}

fputs("ABcdeFG HIgkLMNoP\n", file1);

fclose(file1);

FILE*file2 = fopen("test2.txt", "rt");

if (!(file2 = fopen("test2.txt", "rt")))

{

printf("Nevozmozno otkrit' fail");

return 0;

}

int k = 0;

char x;

printf("1\n");

while (!feof(file2))

{

printf("11\n");

x = fgetc(file2); // putchar(x);

printf("2\n");

if (x == 'a' || x == 'e' || x == 'i' || x == 'o' || x == 'u' || x == 'A' ||

x == 'E' || x == 'I' || x == 'O' || x == 'U')

k = k + 1;

// else

// fseek(file2, 2, SEEK_CUR);

printf("3\n");

}

printf("Kolichestvo glasnih bukv v faile %d\n", k);

fclose(file2);

scanf("%d", k);

return 0;

#endif;

#if VAR==3// Задача 2

FILE*file1 = fopen("f.txt", "wt");

if (!(file1 = fopen("f.txt", "wt")))

{

printf("Nevozmozno otkrit' fail");

return 0;

}

fputs("12 34 56 78 93 54 85 98 65 45 25 12 36 58 96 45 12 56 36 78\n", file1);

fclose(file1);

FILE*file2 = fopen("f.txt", "rt");

if (!(file2 = fopen("f.txt", "rt")))

{

printf("Nevozmozno otkrit' fail");

return 0;

}

FILE*file3 = fopen("g.txt", "wt");

if (!(file3 = fopen("g.txt", "wt")))

{

printf("Nevozmozno otkrit' fail");

return 0;

}

int x;

int k=2;

printf("1\n");

while (!feof(file2))

// while (x!= EOF)

{

printf("11\n");

fscanf(file2, " %d", &x);

printf("2\n");

if (x > 48)

{

fprintf(file3, " %d\n", x);

}

printf("3\n");

}

fclose(file2);

fclose(file3);

scanf("%d", k);

return 0;

#endif;

}

Тема: Структуры.

3. Структура «Государство»: название, столица, численность населения, занимаемая площадь.

1. 1) Ввод массива структур;

2)Вывод на экран массива структур;

2. 1)Изменения заданной структуры;

2) Поиск в массиве структур по заданному параметру;

3. 1)Сортировка массива структур.

2)Поиск в массиве структур по заданному параметру;

4. 1) Удаление структуры из массива;

2)Поиск в массиве структур по частичному совпадению заданного параметра;

#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>

#include <stdlib.h>

#include <conio.h>

#include <string.h>

#include <malloc.h>

struct country //описание структуры

{

char c_name[32];

char capital[32];

int popul;

int area;

} state;

int sch = 0;

void func_srch_str(struct country * state, char * search, int len); // прототип функции поиска среди строк

void func_srch_int(struct country * state, int * search, int len); // прототип функции поиска среди чисел

void func_prnt_struct(struct country * state, int i); // прототип функции вывода на печать

int cmp_1(const void *a, const void *b); // прототип функции сортировки строк

int cmp_2(const void *a, const void *b); // прототип функции сортировки строк

void func_sort(struct country * state, int * search, int len);// прототип функции сортировки целых чисел

void vivod(struct country *state, int len); // прототип функции вывода

int del(struct country * state, int delet, int struc_count); //прототип функции удаления элемента массива структур

void change(struct country * state); //прототип функции изменения элемента массива структур

int main() {

system("chcp 1251 > nul");

int struc_count = 0, i, search_item, search_item_1, delet, size;

printf("Введите размер массива\n");

scanf("%d", &size);

country*state;

state = (country*)malloc(size * sizeof(country)); //выделение динамической памяти под массив структур

do {

printf(" Страна %d\n%-*s", struc_count + 1, 25, "Название:");

scanf("%s", &state[struc_count].c_name);

printf("%-*s", 25, "Столица:");

scanf("%s", &state[struc_count].capital);

printf("%-*s", 25, "Численность населения :");

scanf("%d", &state[struc_count].popul);

printf("%-*s", 25, "Площадь:");

scanf("%d", &state[struc_count].area);

++struc_count;

printf("1 - Продолжить, 0 - Выход) ?: ");

scanf("%d", &i);

}while (i);

// вывод значений

vivod(state, struc_count);

// Поиск

printf("\nПоиск по:\n1-Название, 2-Столица, 3 - Население, 4 - Площадь... ?: ");

scanf("%d", &search_item);

printf("Введите значение: ");

switch (search_item) {

case 1: func_srch_str(state, state[0].c_name, struc_count); break;

case 2: func_srch_str(state, state[0].capital, struc_count); break;

case 3: func_srch_int(state, &state[0].popul, struc_count); break;

case 4: func_srch_int(state, &state[0].area, struc_count); break;

};

// Сортировка

printf("\nСортировка по:\n1-Название, 2-Столица, 3 - Население, 4 - Площадь... ?: ");

scanf("%d", &search_item_1);

printf("Введите значение: ");

switch (search_item_1) {

case 1: qsort(state, struc_count, sizeof(struct country), cmp_1);

vivod(state, struc_count);

break;

case 2: qsort(state, struc_count, sizeof(struct country), cmp_2);

vivod(state, struc_count);

break;

case 3: func_sort(state, &state[0].popul, struc_count);

vivod(state, struc_count);

break;

case 4: func_sort(state, &state[0].area, struc_count);

vivod(state, struc_count);

break;

};

// Поиск

printf("\nПоиск по:\n1-Название, 2-Столица, 3 - Население, 4 - Площадь... ?: ");

scanf("%d", &search_item);

printf("Введите значение: ");

switch (search_item) {

case 1: func_srch_str(state, state[0].c_name, struc_count); break;

case 2: func_srch_str(state, state[0].capital, struc_count); break;

case 3: func_srch_int(state, &state[0].popul, struc_count); break;

case 4: func_srch_int(state, &state[0].area, struc_count); break;

};

// Удаление структуры из массива структур

printf("\nВведите номер удаляемого элемента:\n");

scanf("%d", &delet);

struc_count = del(state, delet, struc_count);

vivod(state, struc_count);

// Поиск

printf("\nПоиск по:\n1-Название, 2-Столица, 3 - Население, 4 - Площадь... ?: ");

scanf("%d", &search_item);

printf("Введите значение: ");

switch (search_item) {

case 1: func_srch_str(state, state[0].c_name, struc_count); break;

case 2: func_srch_str(state, state[0].capital, struc_count); break;

case 3: func_srch_int(state, &state[0].popul, struc_count); break;

case 4: func_srch_int(state, &state[0].area, struc_count); break;

};

//Изменения массива структур

change(state);

vivod(state, struc_count);

free(state);

system("pause");

return 1;

// Поиск

printf("\nПоиск по:\n1-Название, 2-Столица, 3 - Население, 4 - Площадь... ?: ");

scanf("%d", &search_item);

printf("Введите значение: ");

switch (search_item) {

case 1: func_srch_str(state, state[0].c_name, struc_count); break;

case 2: func_srch_str(state, state[0].capital, struc_count); break;

case 3: func_srch_int(state, &state[0].popul, struc_count); break;

case 4: func_srch_int(state, &state[0].area, struc_count); break;

};

}

void vivod(struct country *state, int struc_count) //Описание функции вывода массива структур

{

printf("\n");

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

{

printf(" Страна %d\n", i + 1);

printf("Название %s\n", state[i].c_name);

printf("Столица %s\n", state[i].capital);

printf("Население %d\n", state[i].popul);

printf("Площадь %d\n", state[i].area);

}

}

void func_srch_int(struct country * state, int * search, int len) { //Описание функции поиска по целому типу (по цифрам)

int val, mem_len;

mem_len = (sizeof(state->capital) + sizeof(state->c_name) + sizeof(state->popul) + sizeof(state->area)) / sizeof(int);

scanf("%d", &val);

for (int i = 0; i < len; ++i) {

if (val == *(search + (i * mem_len))) {

func_prnt_struct(state, i);

}

}

}

void func_srch_str(struct country * state, char * search, int len) { //Описание функции поиска по символьному типу (по названиям)

int mem_len;

char val[32];

mem_len = (sizeof(state->capital) + sizeof(state->c_name) + sizeof(state->popul) + sizeof(state->area));

scanf("%s", val);

for (int i = 0; i < len; ++i) {

if (!strcmp(val, (search + (i * mem_len)))) {

func_prnt_struct(state, i);

}

}

}

void func_prnt_struct(struct country * state, int i) { //Описание функции вывода отдельной строки структуры

printf("Страна: %s\n", state[i].c_name);

printf("Столица: %s\n", state[i].capital);

printf("Население: %d\n", state[i].popul);

printf("Площадь: %d\n", state[i].area);

}

int cmp_1(const void *a, const void *b) { //Описание функции сравнения названий государств

return strcmp(((struct country*)a)->c_name, ((struct country*)b)->c_name);

}

int cmp_2(const void *a, const void *b) { //Описание функции сравнения названий столиц

return strcmp(((struct country*)a)->capital, ((struct country*)b)->capital);

}

void func_sort(struct country * state, int * search, int len) { //Описание функции сортировки

int mem_len;

struct country buffer;

mem_len = (sizeof(state->capital) + sizeof(state->c_name) + sizeof(state->popul) + sizeof(state->area)) / sizeof(int);

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

for (int j = i; j < len; ++j)

{

if (state[i].popul > state[j].popul)

{

buffer = state[i];

state[i] = state[j];

state[j] = buffer;

}

}

}

int del(struct country * state, int delet, int struc_count) //Описание функции удаления

{

for (int i = (delet - 1); i < struc_count; ++i)

state[i] = state[i + 1];

return (struc_count = struc_count - 1);

}

void change(struct country * state) //Описание функции изменения

{

int c;// Номер записи, которую необходимо изменить

int per;

printf("\nВведите номер записи\n");

scanf("%d", &c);

do

{

printf("\nВведите:\n");

printf("1-для изменения названия государства\n");

printf("2-для изменения столицы государства\n");

printf("3-для изменения численности населения\n");

printf("4-для изменения площади государства\n");

printf("5-для прекращения\n");

scanf("%d", &per);

switch (per)

{

case 1: printf("\nВведите новое название государства\n");

scanf("%s", state[c - 1].c_name);

break;

case 2: printf("\nВведите новое название столицы\n");

scanf("%s", state[c - 1].capital);

break;

case 3: printf("\nВведите новую численность населения\n");

scanf("%d", &state[c - 1].popul);

break;

case 4: printf("\nВведите новую площадь государства\n");

scanf("%d", &state[c - 1].area);

break;

case 5: return;

}

} while (1);

}