ЛР ОАиП 2 семестр ФЗО 3 вариант
.docxВариант 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);
}