. Нужно написать программу в С. Дан символьный файл. Получить новый файл состоящий из компонентов первого файла без участка от m-ой до n-ой компонентов
void removeSection(FILE *sourceFile, FILE *destinationFile, int m, int n) { // Получаем длину файла fseek(sourceFile, 0, SEEK_END); long fileSize = ftell(sourceFile); rewind(sourceFile);
// Проверяем корректность значений m и n if (m < 0 || n >= fileSize || m > n) { printf("Некорректные значения m и n\n"); return; }
// Создаем буфер для чтения и записи данных char buffer[1024]; long bytesRead = 0; long bytesToSkip = n - m + 1;
// Пропускаем участок между m и n while (bytesRead < fileSize) { if (bytesRead < m || bytesRead > n) { int bytesToRead = sizeof(buffer); if (bytesToRead > fileSize - bytesRead) { bytesToRead = fileSize - bytesRead; } int bytes = fread(buffer, sizeof(char), bytesToRead, sourceFile); if (bytes > 0) { fwrite(buffer, sizeof(char), bytes, destinationFile); bytesRead += bytes; } else { break; } } else { fseek(sourceFile, bytesToSkip, SEEK_CUR); bytesRead += bytesToSkip; } }
printf("Участок успешно удален из файла.\n"); }
int main() { // Открываем исходный файл FILE *sourceFile = fopen("input.txt", "r"); if (sourceFile == NULL) { printf("Не удалось открыть исходный файл.\n"); return 1; }
// Открываем новый файл для записи FILE *destinationFile = fopen("output.txt", "w"); if (destinationFile == NULL) { printf("Не удалось создать новый файл.\n"); return 1; }
int m = 2; // начальная позиция (индекс) int n = 5; // конечная позиция (индекс)
Растровое изображение представляет из себя: ✔ мозаику из очень мелких элементов — пикселей; сочетание примитивов (это про векторное изображение); палитру цветов.
Растровое графическое изображение формируется из: линий ✔ пикселей графических примитивов (это про векторное изображение)
В векторной графике изображения строятся из: пикселей (это про растровую графику); ✔ примитивов; рисунков.
Эффективно представляет изображения фотографического качества: векторная графика; ✔ растровая графика.
Относительно небольшой объём памяти занимают: ✔ векторные рисунки; (это как правило верно. Но если пытаться делать изображения фотографического качества в векторной графике, файлы будут получаться огромными) растровые изображения.
Могут быть легко масштабированы без потери качества: ✔ векторные рисунки; растровые изображения.
Растровое графическое изображение получается: ✔ в процессе сканирования (в остальных случаях - векторная) при работе с системами компьютерного черчения при создании рисунка в MS Word
Какой тип графического изображения вы будете использовать при редактировании цифровой фотографии? ✔ растровое изображение векторное изображение
Что можно отнести к достоинствам растровой графики по сравнению с векторной? Малый объём графических файлов. (это про векторную) ✔ Фотографическое качество изображения. Возможность просмотра изображения на экране графического дисплея. (это верно для любой компьютерной графики) Возможность масштабирования изображения без изменения его качества. (это про векторную)
Файлы, с какой графикой имеют наибольший размер? ✔ Растровой. Векторной. Трёхмерной. (обычно простенькая трехмерная графика составляется из примитивов и имеет небольшой размер. Но опять-таки, если ставить целью добиться максимальной естественности изображения, то здесь будет максимальный размер)
Изображения, какой графики состоят из массива точек (пикселей)? ✔ Растровой. Векторной Трёхмерной
Для хранения растрового изображения размером 64 на 64 пикселя отвели 512 байтов памяти. Каково максимально возможное число цветов в палитре изображения? Всего пикселей 64 * 64 = 2^12, на них отводится 512 байт = 2^9 байт = 2^12 бит. Тогда на 1 пиксель отводится всего 1 бит, и в палитре не больше 2^1 = 2 цветов.
В процессе преобразования растрового графического файла количество цветов уменьшилось с 512 до 8. Во сколько раз уменьшился информационный объем файла? 512 = 2^9, 8 = 2^3. В первом случае на 1 пиксель отводится 9 бит, во втором - 3 бита. Размер уменьшился в 3 раза.
void removeSection(FILE *sourceFile, FILE *destinationFile, int m, int n) {
// Получаем длину файла
fseek(sourceFile, 0, SEEK_END);
long fileSize = ftell(sourceFile);
rewind(sourceFile);
// Проверяем корректность значений m и n
if (m < 0 || n >= fileSize || m > n) {
printf("Некорректные значения m и n\n");
return;
}
// Создаем буфер для чтения и записи данных
char buffer[1024];
long bytesRead = 0;
long bytesToSkip = n - m + 1;
// Пропускаем участок между m и n
while (bytesRead < fileSize) {
if (bytesRead < m || bytesRead > n) {
int bytesToRead = sizeof(buffer);
if (bytesToRead > fileSize - bytesRead) {
bytesToRead = fileSize - bytesRead;
}
int bytes = fread(buffer, sizeof(char), bytesToRead, sourceFile);
if (bytes > 0) {
fwrite(buffer, sizeof(char), bytes, destinationFile);
bytesRead += bytes;
} else {
break;
}
} else {
fseek(sourceFile, bytesToSkip, SEEK_CUR);
bytesRead += bytesToSkip;
}
}
printf("Участок успешно удален из файла.\n");
}
int main() {
// Открываем исходный файл
FILE *sourceFile = fopen("input.txt", "r");
if (sourceFile == NULL) {
printf("Не удалось открыть исходный файл.\n");
return 1;
}
// Открываем новый файл для записи
FILE *destinationFile = fopen("output.txt", "w");
if (destinationFile == NULL) {
printf("Не удалось создать новый файл.\n");
return 1;
}
int m = 2; // начальная позиция (индекс)
int n = 5; // конечная позиция (индекс)
removeSection(sourceFile, destinationFile, m, n);
// Закрываем файлы
fclose(sourceFile);
fclose(destinationFile);
return 0;
}