- •Лабораторные работы. Сборник задач.
- •Оглавление
- •Часть 1. Лаборатоные работы
- •Работа со структурами и объединениями …………………………………….91
- •3 Задача
- •4 Задача
- •5 Задача
- •6 Задача
- •Дополнительное условие:использование цикла с предусловием.
- •1 Задача
- •2 Задача
- •Дополнительное условие: программа написана без использования функции.
- •Дополнительное условие: программа написана с использованием функций.
- •3 Задача
- •Дополнительное условие: программа написана без использования функции.
- •Дополнительное условие: программа написана с использованием функции.
- •4 Задача
- •Дополнительное условие: программа написана без использования функции
- •Дополнительное условие: программа написана с использованием функции.
- •Самостоятельная работа
- •Лабораторная работа №3
- •Самостоятельная работа
- •1 Задача
- •2 Задача
- •1 Задача
- •2 Задача
- •3 Задача
- •Лабораторная работа №6
- •1 Задача
- •1 Задача
- •2 Задача
- •3 Задача
- •1 Задача
- •1 Задача
- •2 Задача
- •3 Задача
- •4 Задача
- •Синтаксический анализатор
- •Самостоятельная работа
- •1 Задача
- •2 Задача
- •3 Задача
- •Работа с каталогами
- •Самостоятельная работа
- •1 Задача
- •2 Задача
- •1 Задача
- •2 Задача
- •3 Задача
- •1 Задача
- •2 Задача
- •1 Задача Реализовать очередь, состоящую из целых чисел
- •Комментарий:
- •2 Задача
- •1 Задача
- •Идеально-сбалансированные деревья
- •1 Задача
- •2 Задача
- •1 Задача
- •2 Задача
- •3 Задача
- •1 Задача
- •2 Задача
- •3 Задача
- •1 Задача
- •1 Задача
- •1 Уровень сложности
- •2 Уровень сложности
- •3 Уровень сложности
- •1 Уровень сложности.
- •2 Уровень сложности
- •3 Уровень сложности
- •1 Уровень сложности
- •Работа с несколькими массивами
- •Преобразование массива
- •Изменение элементов массива
- •2 Уровень сложности Формирование массива и вывод его элементов
- •Анализ элементов массива
- •Преобразование массива
- •Изменение элементов массива
- •Удаление и вставка элементов
- •Серии целых чисел
- •3 Уровень сложности Множества точек на плоскости
- •1 Уровень сложности
- •2 Уровень сложности
- •3 Уровень сложности
- •1 Уровень сложности
- •2 Уровень сложности
- •3 Уровень сложности
- •1 Уровень сложности
- •2 Уровень сложности
- •3 Уровень сложности
- •Not простое_логическое
- •(Простое_логическое знак_операции простое_логическое)
- •Построить синтаксический анализатор для понятия предложение.
- •1 Уровень сложности
- •2 Уровень сложности
- •1 Уровень сложности
- •Примеры:
- •Двусвязные списки
- •1 Уровень сложности
- •2 Уровень сложности
- •3 Уровень сложности
2 Задача
Цель: закрепление на практике работы с функциями прямого доступа к файлу.
В бинарном файле находятся числа. Поменять местами первое отрицательное число с последним числом, находящимся в файле.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//функция для обмена первого отрицательного числа и последнего числа в файле
void swap(int l, int mas[]);
void swap(int l, int mas[])
{
FILE*infile;
// поиск первого отрицательного числа
for(int j=0;j<l;j++)
{
// если такое число найдено, запоминаем и само число и позицию, где оно находится
if (mas[j]<0)
{
buff=j;
first=mas[j];
break;
}
}
// открытие бинарного файла для чтения
if ((infile=fopen("t.txt","rb"))==NULL)
{
// ошибка и выход, если не получается
printf("Can't open file1\n");
return(0);
}
// вывод в консоль первого отрицательного числа printf("The first negativ symbol is:%d\n",first);
fseek(infile,-(1)*sizeof(int),SEEK_END);
// считывание первого отрицательного и последнего числав файле
fread(&last, sizeof(int), 1, infile);
// последний символ в файле
printf("The last symbol is:%d\n",last);
//
rewind(infile);
//
mas[buff]=last;
// открытие файла на запись в бинарном режиме
infile=fopen("t.txt","wb");
// вывод всех чисел без последнего
for(int m=0;m<l-1;m++)
{
fwrite(&mas[m],sizeof(int),1,infile);
printf("%d\n",mas[m]);
}
// вывод первого отрицательного в конце файла
fwrite(&first,sizeof(int),1,infile);
printf("%d\n",first);
// закрытие файла if (fclose(infile)!=0)
fprintf(" Cannot close file \n");
}
intmain()
{
// определение переменных
FILE *infile;
int first, last, buff, l;
intmas[200];
// открытие файла на запись в бинарном режиме
if ((infile=fopen("t.txt","wb"))==NULL)
{
// ошибка и выход, если не получилось
printf("Can't create file\n");
return(0);
}
// ввод количества чисел для ввода
printf("How many numbers would you like to put?\n");
scanf("%d",&l);
for(int k=0; k<l; k++)
{
// считывание числа с клавиатуры для записи
scanf("%d",&mas[k]);
// запись в файл
fwrite(&mas[k], sizeof(int), 1, infile);
}
// закрытие файла
if (fclose(infile)!=0)
fprintf(" Cannot close file \n");
swap(l, mas);
return1;
}
3 Задача
Цель: закрепление на практике работы в функцией fgetpos().
Программа разбора строки “my_name_is_Marina.I_live_in_Kharkov”
# include <stdio.h>
voidmain()
{
// описание переменных
FILE*stream;
// описание значения типа fpos_t, на которое указывает переменнаяpos
fpos_t pos;
char buffer[20]=" ";
if ((stream=fopen("fgetpos.cpp","rb"))==NULL)
// если невозможно открыть файл (проверка при открытии файла)
printf("Trouble opening file\n");
else
{
// считываем 10 символов с текущей позиции курсора
fread(buffer, sizeof(char),10,stream);
// выводим считанные символы в консоль
printf("%10s\n",buffer);
// запоминаем позицию курсора и выводим ошибку если не получилось запомнить
if (fgetpos(stream,&pos) != 0)
perror("fsetpos error");
else
// считываем еще 10 символов
fread(buffer, sizeof(char),10,stream);
// вывод номер позиции курсора в файле
printf("10 bytes at byte %ld \n",pos);
// вывод считанной строки
printf("string%10s\n",buffer);
}
// устанавливаем переменную позиции
pos= 20;
// устанавливаем позицию курсора в файл
if (fsetpos(stream,&pos)!=0)
// ошибка, если не получилось
perror ("fsetpos error");
// считываем 10 символов с новой позиции
fread(buffer, sizeof(char),10,stream);
// выводим номер позиции
printf("10bytesatbyte%ld\n",pos);
// и считанную строку
printf("string %10s\n",buffer);
// закрытие файла
if (fclose(stream)!=0)
fprintf(" Cannot close file \n");
}
Комментарий:
Функции fgetpos() иfsetpos() позволют работать с файлами очень больших размеров, что было невозможно при работе с функциямиfseek()и ftell() у которых, длина ограничивалась значение типаlong.
perror() - преобразует значение глобальной переменной в строку и записывает эту строку в поток ошибок.
Самостоятельная работа.
Изменить 1 задачу таким образом, чтобы обмен осуществлялся между максимальным и минимальным значениями (числа хранятся в бинарном файле).
Лабораторная работа №13