Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [Borland C 3.1] Типизированные файлы


Автор: Lenysik89 6.5.2007, 20:54
Всем здрасте!
Это ведь тут тусуются ребята, которые зада4ки по программированию щелкают как орешки?=)))))))))))

В общем у меня 2 зада4ки..........Я вообще плохо разбираюсь в программировании, а с файлами полная засада......
Помогите плиз!!!...........Язык С, при4ем  просто С, без плюсиков=)))
И мне не нужно никаких наворотов, а то никто никогда не поверит, 4то я сама сделала=))))


1.    Компоненты типизированного файла – массивы, состоящие из 7 вещественных чисел. В новый типизированный файл записать все массивы из исходного файла, но без четвертых элементов.
2.    Компоненты типизированного файла – целые числа. Удалить из этого файла все нули, добавить в начало «-1», а в конец файла – значение, на 1 больше максимального в этом файле.
О4ень на вас надеюсь.........................

Добавлено @ 20:55
и еще.........компилятор Borland 3.1....................=)))


M
Kuvaldis
Язык указывать нужно и в названии темы... На будущее :)  

Автор: Lenysik89 6.5.2007, 23:41
Ну хотя бы скажите 4то мне делать..................

Автор: srd 7.5.2007, 05:51
Что такое "типизированные" файлы?

Автор: srd 7.5.2007, 09:08
Цитата(keenara @  7.5.2007,  15:06 Найти цитируемый пост)
Дорогуша, если ты сам не понимаешь даже условия то не надо парить мозги, иди читай учебник. 

Хамить не обязательно smile 

Вопрос заключался, собственно, в том, что понимается под типизированными файлами конкретно в этой задачи. Поскольку в Си (в отличие от Паскаля) нет специального типа "типизированный файл", то здесь это понятие можно трактовать по разному - то ли текстовый файл с символьными представлениями чисел, то ли бинарный файл.

Впрочем, теперь это не важно  smile  Я осознал, что тут мне не рады и ухожу

Автор: GIK 7.5.2007, 10:38
Цитата

Хамить не обязательно  

Обсолютно с тобой согласен srd smile
Вот накидал кое что. Если файл состоит из массивов которые разделены пробелами, а эллементы одного массива разделены запятыми. Примерно так должен выглядеть файл:
123,211,121,121,125 121,123,111,234,121 123,211,121,121,125
Вот так работает правильно если в файле должно быть 3 массива с трехзначными числами:
Код

#include<cstdio.h>
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<math.h>


struct itog{

  short it[5]; //Пять чисел в массиве

}itog_[12]={0}; //12 массивов в файле

int main(int argc, char* argv[])
{
  char ch='1';
  int i=0, j, y, e;
  int ran, n=0;
  int ran2[5]; //Не более 5-значного числа
  FILE *fil;


  fil=fopen("C://test/test.txt", "rb");
  if(!fil){printf("%s", "Not File"); return 1;};




 for(e=0; e<3; e++)
 {
    for(j=0; j<5; j++) //считываем массив из 5 чисел
    {

      for(i=0; i<3; i++)
      {
       ch=getc(fil);
       ran=ch-48;
       ran2[i]=ran; //Собираем i значное число


      }
      ran=0;
      for(y=0; i!=0; i--, y++)
      if(i-1!=0) 
      ran+=ran2[y]*pow(10, (i-1)); 
      else ran+=ran2[y]; //просто прибавляем последнее число
 
      /*
      пример для быстрого понимания вышеописанного алгоритма:
      к примеру число 123, посимвольно заносится в массив
      ran2[0]=1;
      ran2[1]=2;
      ran2[2]=3;
      ran+=ran2[1] * pow (10, (3-1)); // умножаем 1 на 100 и так далее

      */

      itog_[n].it[j]=ran;


      ch=getc(fil); //Считываем симов 44 или 32
      
    }

    n++;


  }


    for(i=0; i<n; i++){
     for(j=0; j<5; j++)
       printf("%d-", itog_[i].it[j]);
     printf("%c", '\n');

    }


  getch();
        return 0;
}

но по идее должно быть так, но почему-то выдает ошибку, может кто исправит?

Код

#include<cstdio.h>
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<math.h>


struct itog{

  short it[5]; //Пять чисел в массиве

}itog_[12]={0}; //12 массивов в файле

int main(int argc, char* argv[])
{
  char ch='1';
  int i=0, j, y, e;
  int ran, n=0;
  int ran2[5]; //Не более 5-значного числа
  FILE *fil;


  fil=fopen("C://test/test.txt", "rb");
  if(!fil){printf("%s", "Not File"); return 1;};


 while(!feof(fil))
 {
    for(j=0; j<5; j++) //считываем массив из 5 чисел
    {

      for(i=0; ch!=44 || ch!=32; i++)   //Пока не дойдем до ',' или пробела
      {
       ch=getc(fil);
       ran=ch-48;
       ran2[i]=ran; //Собираем i значное число


      }
      ran=0;
      for(y=0; i!=0; i--, y++)
      if(i-1!=0)
      ran+=ran2[y]*pow(10, (i-1)); 
      else ran+=ran2[y];

      itog_[n].it[j]=ran;
    }

    n++;
  }

    for(i=0; i<n; i++){
     for(j=0; j<5; j++)
       printf("%d-", itog_[i].it[j]);
     printf("%c", '\n');

    }
  getch();
        return 0;
}


Добавлено через 2 минуты и 17 секунд
Т.е. можно создавать массив из любых чисел, но глюк найти не могу, если кто знает отпишитесь люди smile

Автор: Lenysik89 7.5.2007, 11:30
Оказалось, 4то типизированные файлы - бинарные...=)))))))
А фу-ии можно использовать из fstream.h, как мне сказали fread и fwrite....

Добавлено через 31 секунду
Спасибо всем, кто у4авствует!!!
О4ень благодарна!!!!

Автор: srd 7.5.2007, 12:10
Задача 1
Код

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
    FILE *in = 0;
    FILE *out = 0;
    int skip;

    if (argc != 3)
    {
        printf("Usage: task1.exe input-file output-file\n");
        return 0;
    }

    if (!(in = fopen(argv[1], "r")))
    {
        printf("Cannot open %s\n", argv[1]);
        return -1;
    }

    if (!(out = fopen(argv[2], "w")))
    {
        fclose(in);
        printf("Cannot open %s\n", argv[2]);
        return -1;
    }

    skip = 1;
    while (!feof(in))
    {
        double v[3];

        /* Прочитали три элемента */
        if (fread(v, sizeof v, 1, in) != 1)
            break;

        /* Записали три элемента */
        if (fwrite(v, sizeof v, 1, out) != 1)
            break;

        /* Пропустили четвёртый элемент */
        if (skip) fseek(in, sizeof v[0], SEEK_CUR);
        skip = !skip;
    }

    fclose(in);
    fclose(out);

    return 0;
}


Задача 2.
1. Здесь исходим из предположения, что можно использовать промежуточный файл.
Код

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
    FILE *in = 0;
    FILE *out = 0;
    int max = -1;
    char *temp_name = 0;
    

    if (argc != 2)
    {
        printf("Usage: task2.exe file\n");
        return 0;
    }

    if (!(in = fopen(argv[1], "r")))
    {
        printf("Cannot open %s\n", argv[1]);
        return -1;
    }

    temp_name = tmpnam(0);

    if (!(out = fopen(temp_name, "w")))
    {
        fclose(in);
        printf("Cannot open %s\n", temp_name);
        return -1;
    }

    max = -1;
    fwrite(&max, sizeof max, 1, out);

    while (!feof(in))
    {
        int value;
        if (fread(&value, sizeof value, 1, in) == 1)
        {
            if (max < value) max = value;
            if (value) fwrite(&value, sizeof value, 1, out);
        }
    }

    ++max;
    fwrite(&max, sizeof max, 1, out);

    fclose(in);
    fclose(out);

    remove(argv[1]);
    rename(temp_name, argv[1]);

    return 0;
}



Автор: dizzy1984 7.5.2007, 12:43
Цитата(Lenysik89 @  6.5.2007,  20:54 Найти цитируемый пост)
Это ведь тут тусуются ребята, которые зада4ки по программированию щелкают как орешки?=)))))))))))

дА, эТо мЫ и ЕстЬ.

ПиРиСоИДинияЙусь к keenara, нИ стоИт МучиТь чИлаВека ВапроСами, кАгдА и Так вСио Пониатно.
Но Хамить и В сАмАм Деле Ни НадА.

нИ уХади, srd, пАстоЙ, пАрАдуЙ нАс сВаим РиШенийеМ.

Вот Майё

Код

#include <io.h>
#include <fcntl.h>
#include <time.h>
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>

#define ARRAYSIZE 7
#define ARRAYOFARRAYSIZE 3

typedef double SevenDoubleNumbers [ARRAYSIZE];

void CreateFileWithDoubleNumbers(char *szFileName)
{
    int  i, j;
    int hOut = open(szFileName, O_WRONLY | O_TRUNC | O_CREAT | O_BINARY);

    SevenDoubleNumbers Array[ARRAYOFARRAYSIZE];

    srand(time(NULL));

    for (i = 0; i < ARRAYOFARRAYSIZE; i++)
    {
        for (j = 0; j < ARRAYSIZE; j++)
        {
            Array[i][j] = rand() % 10000 + (double)(rand() % 1000) / 1000;
        };
    };


    write(hOut, Array, ARRAYOFARRAYSIZE * ARRAYSIZE * sizeof(double));

    close(hOut);
}

void DeleteEachFourthElement(char *szOldFileName, char *szNewFileName)
{
    SevenDoubleNumbers Array;

    int hIn  = open(szOldFileName, O_RDONLY | O_BINARY);
    int hOut = open(szNewFileName, O_WRONLY | O_BINARY | O_CREAT | O_TRUNC);

    int i;
    for (i = 0; i < ARRAYOFARRAYSIZE; i++)
    {
        read(hIn, Array, ARRAYSIZE * sizeof(double));
        write(hOut, Array, 3 * sizeof(double));
        write(hOut, ((double *)Array) + 4, (ARRAYSIZE - 4) * sizeof(double));
    }

    close(hIn);
    close(hOut);
};


void ReadFileWithDoubleNumbers(char *szFileName)
{
    double dNumber;
    int  hIn = open(szFileName, O_RDONLY | O_BINARY);

    while (!eof(hIn))
    {
        read(hIn, &dNumber, sizeof(double));
        printf("%0.3f ", dNumber);
    };
    printf("\n");
    close(hIn);
}


void CreateFileWithIntegerNumbers(char *szFileName)
{
    int hOut = open(szFileName, O_WRONLY | O_CREAT | O_BINARY | O_TRUNC);

    int nNum = 15;
    int nNumber;
    while (nNum--)
    {
        nNumber = rand() % 1024;
        if (nNumber > 1024 / 2)
        {
            nNumber = 0;
        }
        write(hOut, &nNumber, sizeof(int));
    }

    close(hOut);
}

void ReadFileWithIntegerNumbers(char *szFileName)
{
    int nNumber;

    int hIn = open(szFileName, O_RDONLY | O_BINARY);

    while (!eof(hIn))
    {
        read(hIn, &nNumber, sizeof(int));
        printf("%d ", nNumber);
    };
    printf("\n");

    close(hIn);
}

void ProcessFileWithIntegerNumbers(char *szOldFileName, char *szNewFileName)
{
    int hOut = open(szNewFileName, O_WRONLY | O_CREAT | O_TRUNC | O_BINARY);
    int hIn  = open(szOldFileName, O_RDONLY | O_BINARY);

    int nMax = -1;
    int nNumber;
    write(hOut, &nMax, sizeof(int));
    while (!eof(hIn))
    {
        read(hIn, &nNumber, sizeof(int));
        if (nMax < nNumber)
        {
            nMax = nNumber;
        }
        if (nNumber != 0)
        {
            write(hOut, &nNumber, sizeof(int));
        }
    }
    nMax++;
    write(hOut, &nMax, sizeof(int));

    close(hIn);
    close(hOut);
};


void main()
{
    clrscr();

    CreateFileWithDoubleNumbers("C:\\BC31\\BIN\\Test.XXX");
    ReadFileWithDoubleNumbers("C:\\BC31\\BIN\\Test.XXX");
    DeleteEachFourthElement("C:\\BC31\\BIN\\Test.XXX","C:\\BC31\\BIN\\Test2.XXX");
    ReadFileWithDoubleNumbers("C:\\BC31\\BIN\\Test2.XXX");


    CreateFileWithIntegerNumbers("C:\\BC31\\BIN\\Test.XXX");
    ReadFileWithIntegerNumbers("C:\\BC31\\BIN\\Test.XXX");
    ProcessFileWithIntegerNumbers("C:\\BC31\\BIN\\Test.XXX","C:\\BC31\\BIN\\Test2.XXX");
    ReadFileWithIntegerNumbers("C:\\BC31\\BIN\\Test2.XXX");
}


пИрИмиЕр иСпользоВанийЯ

цЫферКи 3-х массивоВ пА 7 вЕщеСтвеннЫйх Чисел
5547.253 3819.776 5385.565 3976.958 794.426 6656.157 5418.450 
580.113 7326.102 2 552.565 1510.186 5771.589 6996.140 999.183 
151.332 5772.245 1420.539 8248.398 3206.038 8139.958 9803.252

Это Же, но УжЕ по 6
5547.253 3819.776 5385.565 794.426 6656.157 5418.450 
580.113 7326.102 2552.565 5771.589 6996.140 999.183 
151.332 5772.245 1420.539 3206.038 8139.958 9803.252

а ётО цЫферки из 2-го зАдАниЙя
249 0 466 0 368 376 203 0 0 38 414 186 0 10 167
цЫферКи аПОслЯ
-1 249 466 368 376 203 38 414 186 10 167 467


Цитата(Lenysik89 @  6.5.2007,  20:54 Найти цитируемый пост)
И мне не нужно никаких наворотов, а то никто никогда не поверит, 4то я сама сделала=))))

пАниМаишЬ, эТа вАпрос пАчти ФилАсовСкий. СпрашИвай, АтвечУ
аФФтар гАрАнтИрУЕт


M
Alexeis
Модератор: пишите по человечески. Такой текст трудно читать.

Автор: GIK 7.5.2007, 14:23
Народ, как там на счет моего исключения, в чем глюк?

Автор: apook 7.5.2007, 15:55
Код

#include<stdio.h>

#include<fcntl.h>
#include<io.h>
#include<sys\stat.h> 

#include<errno.h>
#include<time.h>


#include<stdlib.h> 
#include<conio.h> 


#define N 10
#define M 7


int creatf( char namef[] )
{
int Handl;

Handl=creatnew( namef, 0 );

if( Handl==-1 )
{
    switch( errno )
    {
        case ENOENT:
            printf( "Error: Path or file name not found.\n" );
        break;
        case EMFILE:
            printf( "Error: Too many open files.\n" );
        break;
        case EACCES: 
            printf( "Error: Permission denied\n" );
        break;
        case EBADF:
            printf( "Error: Incorrect descriptor\n" );
        break;
        case EEXIST:
            return 1; //Файл уже существует!
        default: 
            printf( "Error create file\n" );    
        break;
        }
    return( 0 );
    }

close( Handl );
return( creatf(namef) );
}

// заполнение бинарного файла матрицей N*M(10*7)
void f_filled( int handle )
{
int i, j, ze=0;
randomize();

lseek( handle, 0L, SEEK_SET );
for( i=0; i<10; i++ )
    for( j=0; j<7; j++ )
    {
        ze=random( 10 );

        write( handle, &ze, sizeof(int) ); // запись
        }
return;
}

//вывод содержимого бинарного файла
void f_print( int handle, int n, int m, int q )
{
int i, j, c=0, g=0, fla=0;
lseek( handle, 0L, SEEK_SET );
for( i=0; i<n; i++ )
{
    for( j=0; j<m; j++, g++ )
    {
        if( g==q )
        {
            fla=1;
            break;
            } 
        read( handle, &c, sizeof(int) ); // чтение
        printf( "%d ", c ); 
        }
    printf( "\n" );
    if( fla==1 ) break;
    }
return;
}

// создание второго бинарного файла, чтение данных из первого и внесение модифицимрованных
// данных во второй файл. Вывод содержимого второго файла.
void f_write_2( int handle )
{
int i, j, c=0, handle_2;

if( creatf(".\\2__Dummy.fil") )
    handle_2=open( ".\\2__Dummy.fil", O_RDWR | O_BINARY | O_TRUNC );
else exit( 1 );

lseek( handle_2, 0L, SEEK_SET );
lseek( handle, 0L, SEEK_SET );

for( i=0; i<N; i++ )
    for( j=0; j<M; j++ )
    {   // чтение запись 
        read( handle, &c, sizeof(int) ); 
        if( j!=3 ) write( handle_2, &c, sizeof(int) );
        }
f_print( handle_2, N, M-1, N*(M-1) );
close( handle_2 );
return;
}


// Модификация первого файла и вывод его на экран
void f_modify( int handle )
{
int i, j, c=0, matrix[ N ][ M ], E, q=0;

lseek( handle, 0L, SEEK_SET );
for( i=0; i<N; i++ )
    for( j=0; j<M; j++ )
    { 
        read( handle, &c, sizeof(int) ); 
        matrix[ i ][ j ]=c;
        }

chsize( handle, 0 ); //файл обнулим

//Узнаем махимальный элемент
E=matrix[ 0 ][ 0 ];
for( i=0; i<N; i++ )
    for( j=0; j<M; j++ )
        if( matrix[ i ][ j ]>E )
            E=matrix[ i ][ j ];

matrix[ 0 ][ 0 ]=-1;
matrix[ N-1 ][ M-1 ]=E+1;

//файл заполняем заного
lseek( handle, 0L, SEEK_SET );
for( i=0; i<N; i++ )
    for( j=0; j<M; j++ )
        if( matrix[ i ][ j ]!=0 )
        { 
            write( handle, &matrix[ i ][ j ], sizeof(int) );
            ++q;
            }
//вывод измененного содержимого первого файла
f_print( handle, N, M, q );

return;
}




void main()
{
int i, j, handle;

if( creatf(".\\Dummy.fil") )
    handle=open( ".\\Dummy.fil", O_RDWR | O_BINARY | O_TRUNC );
else exit( 1 );

//заполняем бинарный файл
f_filled( handle );
//выводим его содержимое
clrscr();
printf( "Contents of Binary file \"Dummy.fil\"\n" );
f_print( handle, N, M, N*M );
printf( "Press any key to continue...\n" );
getch();

printf( "Contents of Binary file \"2__Dummy.fil\"\n" );
f_write_2( handle );
printf( "Press any key to continue...\n" );
getch();

printf( "Contents of modified Binary file \"Dummy.fil\"\n" );
f_modify( handle );
printf( "Press any key to continue...\n" );
getch();

//закрыть файл
close( handle );
return;
}


Автор: Lenysik89 7.5.2007, 17:45
Большое всем спасибо4ки!!!!!!!!!!!!!! smile  smile  smile 

Автор: Lenysik89 7.5.2007, 20:06
2srd    
погодите-ка...........а где же там имена файлов, 4то мы открывали?
И куда мы записываем? Не поняла!!!=((((((((((((((

Добавлено через 7 минут и 26 секунд
dizzy1984, 

хелп ми..........я стала пробовать, а там такое.............=(((((((((((((

Автор: Lenysik89 7.5.2007, 20:28
ну я с ума сойду с этого программирования.....=(((((((

Добавлено через 2 минуты и 6 секунд
srd у меня к тебе вопросики..=)))

Автор: dizzy1984 7.5.2007, 20:50
Цитата(Lenysik89 @  7.5.2007,  20:06 Найти цитируемый пост)
елп ми..........я стала пробовать, а там такое.............=(((((((((((((

НисМатрЯ на То чтО эТа фрАзА дАйОт оЧень мАлА инФармАцИИ я прИдпалажУ, чтО нужНа в крАце оПисать рАботУ прАгрАммЫ.
Код

CreateFileWithDoubleNumbers("C:\\BC31\\BIN\\Test.XXX");    

сАздАйОм ФайЛ с несКальКими пИрИменнымИ тиПа Double. кАнкретнА тУт их бУДет дВадцАть Адна.
Код

ReadFileWithDoubleNumbers("C:\\BC31\\BIN\\Test.XXX");    

ВыВодим цЫферки, тоЧнее Читаем ВсЕ зАпиСи тИпа Double. пАкАзыВаЙем ФайЛ дО прИАбрАзАвАниЙя
Код

DeleteEachFourthElement("C:\\BC31\\BIN\\Test.XXX","C:\\BC31\\BIN\\Test2.XXX");

Пишем в нОвыЙ Файл Без 4-х элЕментОв.
Код

ReadFileWithDoubleNumbers("C:\\BC31\\BIN\\Test2.XXX");    

пАкАзЫваЙем.
И верНа бЕз 4-х

Код

CreateFileWithIntegerNumbers("C:\\BC31\\BIN\\Test.XXX");

аНалАгИчНа. Файл с ЦелЫми ЧислаМи. вСиво 15.
Код

ReadFileWithIntegerNumbers("C:\\BC31\\BIN\\Test.XXX");    

пАкАзыВаИм ДО
Код

ProcessFileWithIntegerNumbers("C:\\BC31\\BIN\\Test.XXX","C:\\BC31\\BIN\\Test2.XXX");    

мАдИфИкАциЙЯ
Код

ReadFileWithIntegerNumbers("C:\\BC31\\BIN\\Test2.XXX");

пАкАзЫвайЕм АпослЯ

Lenysik89, зАдАвАй, крАсАвиЦа, кАнкретныЙе вАпросы

Автор: Lenysik89 7.5.2007, 22:28
вот теперь все стало на свои места=)))))
Данке шон!!!=))))))) smile 

А со второй как?.............

Автор: dizzy1984 8.5.2007, 07:37
ПиервАйиЯ зАдАчА
Код

CreateFileWithDoubleNumbers("C:\\BC31\\BIN\\Test.XXX");    
ReadFileWithDoubleNumbers("C:\\BC31\\BIN\\Test.XXX");    
DeleteEachFourthElement("C:\\BC31\\BIN\\Test.XXX","C:\\BC31\\BIN\\Test2.XXX");    
ReadFileWithDoubleNumbers("C:\\BC31\\BIN\\Test2.XXX"); 


вТарАйЯ зАдАчА
Код

CreateFileWithIntegerNumbers("C:\\BC31\\BIN\\Test.XXX");    
ReadFileWithIntegerNumbers("C:\\BC31\\BIN\\Test.XXX");    
ProcessFileWithIntegerNumbers("C:\\BC31\\BIN\\Test.XXX","C:\\BC31\\BIN\\Test2.XXX");    
ReadFileWithIntegerNumbers("C:\\BC31\\BIN\\Test2.XXX");

Автор: Lenysik89 9.5.2007, 16:17
Прикольно!!!!
Так все здорово написано!!!!!!!!
Я просто в шоке!!!!!!!!!!=)))))
Блин, надА бы также нау4иться!!!!!!
А вот еще тока один вопросик.......=)))
Я попыталась сделать так, 4тобы выводились на4альные массивы каждый на новой стро4ке, но 4то-то как-то не вышло=(( Куда воткнуть этот    \n  ????
=))))))))))))

Автор: dizzy1984 9.5.2007, 21:04
Цитата(Lenysik89 @  9.5.2007,  16:17 Найти цитируемый пост)
Блин, надА бы также нау4иться!!!!!!

Та Да, уЧицА гРаматнА ПиСать и гАвАрить.

Цитата(Lenysik89 @  9.5.2007,  16:17 Найти цитируемый пост)
А вот еще тока один вопросик.......=)))

длЯ тИбя кРасАвиЦа, хОть сТО.


Цитата(Lenysik89 @  9.5.2007,  16:17 Найти цитируемый пост)
Куда воткнуть этот    \n

КудА чтО вАткнУть - посТайяннайя прАблема прАгрАммИстА.

нУ воТ тАк МожнА
Код

void ReadFileWithDoubleNumbers(char *szFileName, int nGroupSize)
{
    double dNumber;
    int  hIn = open(szFileName, O_RDONLY | O_BINARY);
    int i = 0;
    while (!eof(hIn))
    {
        read(hIn, &dNumber, sizeof(double));
        printf("%0.3f ", dNumber);
        if (++i % nGroupSize == 0)
        {
            printf("\n");
        }
    };
    printf("\n");
    close(hIn);
}


и тАк пАтОм
Код

ReadFileWithDoubleNumbers("C:\\Test.XXX", 7);
DeleteEachFourthElement("C:\\Test.XXX","C:\\Test2.XXX");
ReadFileWithDoubleNumbers("C:\\Test2.XXX", 6);


 smile 
ОдИн умнЫй ЧилАвек скАзал ЧтО ЕслИ чилАвек грАмАтнА пишИт и нИ делает Ашибок, он стАнит хАрошиМ прАгрАммиСтАм. Вот Йя и стАрайусь.
всПомнИл! Это пИсал в "Голуб. Веревка достаточной длины, чтобы выстрелить себе в ногу."

Автор: Lenysik89 9.5.2007, 21:09
Спасибо4ки огромная!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Автор: Lenysik89 10.5.2007, 22:03
Вот 4ерт!=((((((((((

Добавлено через 1 минуту и 45 секунд
4ерт!!!!!!!!!!!
Препод гад!!!!!!
Я даже во всем разобралась!!!!!
Со 2-й зада4ей-то нормуль, пришлось немного переделать, я смогла....
А вот первую сказал переделать 4ерез стандартные ф-ии, fprintf,fopen,fwrite.............
И еще нельзя как двумерный массив рассматривать..............
Я всю пару ковырялась......когда оформила 4ерез эти стандартные ф-ии прога перестала работать!!!!!!!!1((((((((((((((((((((((((((((((((((
 smile 

Автор: dizzy1984 11.5.2007, 05:40
Код

#include <time.h>
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>

#define ARRAYSIZE 21
#define SUBARRAYSIZE 7

void CreateFileWithDoubleNumbers(char *szFileName)
{
    int  i;
    FILE *pOut = fopen(szFileName, "w+b");

    double dNumber;

    srand(time(NULL));

    for (i = 0; i < ARRAYSIZE; i++)
    {
        dNumber = rand() % 10000 + (double)(rand() % 1000) / 1000;
        fwrite(&dNumber, sizeof(double), 1, pOut);
    };

    fclose(pOut);
}

void DeleteEachFourthElement(char *szOldFileName, char *szNewFileName)
{
    double dNumber;

    FILE *pIn  = fopen(szOldFileName, "rb");
    FILE *pOut = fopen(szNewFileName, "w+b");

    int i;
    for (i = 0; i < ARRAYSIZE; i++)
    {
        fread(&dNumber, sizeof(double), 1, pIn);
        if (i == 3 || (i-3) % SUBARRAYSIZE == 0)
        {
            continue;
        }
        fwrite(&dNumber, sizeof(double), 1, pOut);
    }

    fclose(pIn);
    fclose(pOut);
};


void ReadFileWithDoubleNumbers(char *szFileName, int nSize)
{
    double dNumber;
    FILE  *pIn = fopen(szFileName, "rb");

    int i;
    for (i = 0; i < nSize; i++)
    {
        fread(&dNumber, sizeof(double), 1, pIn);
        printf("%0.3f ", dNumber);
    };
    printf("\n");
    fclose(pIn);
}


void main()
{
    clrscr();

    CreateFileWithDoubleNumbers("C:\\BC31\\BIN\\Test.XXX");
    ReadFileWithDoubleNumbers("C:\\BC31\\BIN\\Test.XXX", ARRAYSIZE);
    DeleteEachFourthElement("C:\\BC31\\BIN\\Test.XXX","C:\\BC31\\BIN\\Test2.XXX");
    ReadFileWithDoubleNumbers("C:\\BC31\\BIN\\Test2.XXX", ARRAYSIZE - 3);
}


Цитата

и eof не должно быть=((((( т.к. файл типизированный=(((

То, что файл типизированный не ведет к необходимости отсутствия eof.
Это зависит от того знаем мы количество элементов или нет.
Предположу что это и и мелось в виду.

Цитата

И еще нельзя как двумерный массив рассматривать..............

Еще краше.
В условии было сказано про двуменрные массивы.
Логически красиво решенная проблема обычно читается близко к техническому заданию.

Кстати свой вариант могли и привести.
Его можно было бы переделать.

Я не все требования понял, поэтому программа вышла местами странная.

Автор: Lenysik89 11.5.2007, 12:04
Ты - супер!!!
Спасибо4ки огромное!!!!!!!!!!!!!!! smile 
 smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)