Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Введение в программирование на С.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
930.82 Кб
Скачать

Void print_file(file *);

char name1[]="int1.bin";

char name2[]="int2.bin";

char name3[]="int3.bin";

Void main(){

int x1,x2;

FILE *k1,*k2,*k3;

k1=fopen(name1,"rb");

if(!k1)

return;

k2=fopen(name2,"rb");

if(!k2)

return;

k3=fopen(name3,"w+b");

if(!k3)

return;

fread(&x1,sizeof(int),1,k1);

fread(&x2,sizeof(int),1,k2);

while(!feof(k1) && !feof(k2)){

if(x1<x2){

fwrite(&x1,sizeof(int),1,k3);

fread(&x1,sizeof(int),1,k1);

}

else{

fwrite(&x2,sizeof(int),1,k3);

fread(&x2,sizeof(int),1,k2);

}

}

If(feof(k1)){

while(!feof(k2)){

fwrite(&x2,sizeof(int),1,k3);

fread(&x2,sizeof(int),1,k2);

}

}

If(feof(k2)){

while(!feof(k1)){

fwrite(&x2,sizeof(int),1,k3);

fread(&x2,sizeof(int),1,k1);

}

}

print_file(k1);

print_file(k2);

print_file(k3);

fclose(k1);

fclose(k2);

fclose(k3);

}

Void print_file(file *k){

puts("\n");

int x;

fseek(k,0*sizeof(int),SEEK_SET);

fread(&x,sizeof(int),1,k);

while(!feof(k)){

printf("%d ",x);

fread(&x,sizeof(int),1,k);

}

}

3*. Программа, которая получает 2 файла в которых записаны числа, причем 1- ый файл отсортирован по возрастанию, а 2-ой по убыванию. Переписать данные в третий файл, так чтобы они были по возрастанию. Не использовать дополнительных файлов, массивов и т.д.

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

#include <stdlib.h>

int getElementAtPosition (int i, FILE *f);

void setFileElements (int pos , int element , FILE * f);

int getFileSize (FILE *f);

void print_file ();

void main(){

FILE * f = fopen ("111.bin" , "r+b");

if (f == NULL){

printf ("cannot open file");

exit (1);

}

int n = getFileSize (f);

int j;

for (int i=1; i < n; i++){

int elt = getElementAtPosition (i , f);

int jelt;

for (j=i-1; j >= 0 && (jelt = getElementAtPosition (j , f)) > elt; j--)

setFileElements (j+1 , jelt , f);

setFileElements (++j , elt , f);// поместить в позицию j+1 первый (текущий) элемент

}

fclose (f);

print_file ();

}

int getElementAtPosition (int i, FILE *f){

fseek (f , i * sizeof (int), SEEK_SET);

int buf;

fread (&buf , sizeof (int) , 1 , f);

return buf;

}

int getFileSize (FILE *f){

int count = 0;

fseek (f , SEEK_SET , 0);

int tmp;

while (!feof (f))

{

fread (&tmp , sizeof (int) , 1, f);

count++;

}

return count - 1;

}

void setFileElements (int pos , int element , FILE * f){

fseek (f , pos * sizeof (int) , SEEK_SET );

fwrite (&element ,sizeof (int) , 1 , f);

}

void print_file (){

FILE * f = fopen ("111.bin", "rb");

if (f == NULL){

printf ("cannot open file");

exit (1);

}

for (int i=0; ! feof (f); i++){

int x;

if ( ! fread (&x , sizeof (int) , 1 , f) ) break;

printf ("element # %d = %d\n" , i , x);

}

fclose (f);

}

Задачи:

  1. В файле записаны числа, причем первое число целое и показывает сколько вещественных чисел записана в файле. Написать программу, которая считывает первое число и динамически выделяет массив вещественных чисел, куда переписывает данные из файла. Найти максимальный элемент массива, а также отсортировать данный массив в возрастающем порядке.

  2. В файле записаны данные о студентах, причем первое число целое и показывает количество студентов в файле. Написать программу, которая считывает первое число и динамически выделяет массив структуры, куда переписывает данные из файла. Найти всех тех студентов, кто получил минимальный средний балл и отсортировать в алфавитном порядке по фамилии студентов.