Модераторы: Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [C++] Типизированный файл 
:(
    Опции темы
Cveto4ka
Дата 14.5.2007, 00:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 13.5.2007

Репутация: 1
Всего: 1



на самом деле мне ещё две задачки надо. Если есть время посмотрите плиз.Ведь для происсионалов это ведь раз плюнуть smile 
3.    Компоненты типизированного файла – массивы, состоящие из 9 вещественных чисел. Вывести на экран сумму пятых элементов всех массивов.
4.    Компоненты типизированного файла – целые числа. Удалить из этого файла все числа, являющиеся степенью числа «2».

PM MAIL   Вверх
Cveto4ka
Дата 14.5.2007, 00:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 13.5.2007

Репутация: 1
Всего: 1



С типизированными файлам нужно раотать так же как с обычными?
PM MAIL   Вверх
zkv
Дата 14.5.2007, 01:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Участник Клуба
Сообщений: 2133
Регистрация: 23.7.2006
Где: Санкт-Петербург

Репутация: 21
Всего: 92



Цитата(Cveto4ka @  14.5.2007,  00:40 Найти цитируемый пост)
С типизированными файлам нужно раотать так же как с обычными? 


Cveto4ka, в Си/С++ нет понятия "типизированные файлы", есть бинарные файлы, если речь о них, то ответ - нет
PM MAIL   Вверх
zkv
Дата 14.5.2007, 01:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Участник Клуба
Сообщений: 2133
Регистрация: 23.7.2006
Где: Санкт-Петербург

Репутация: 21
Всего: 92



Цитата(Cveto4ka @  14.5.2007,  00:18 Найти цитируемый пост)
3.    Компоненты типизированного файла – массивы, состоящие из 9 вещественных чисел. Вывести на экран сумму пятых элементов всех массивов.

Код

#include <stdio.h>

const unsigned     g_uMaxSize = 100;

int main( )
{
    FILE *fIn = fopen( "input.dat", "rb" );
    if( !fIn )
        return 10;

    float f9Array[g_uMaxSize][9];

    unsigned uSize = 0; 
    unsigned uRet = 0;
    while( !feof(fIn) )
    {
        uRet = fread( &f9Array[ uSize ], 
                    sizeof(float), 
                    sizeof( f9Array[0])/sizeof(float), 
                    fIn );
        if( uRet ==  sizeof( f9Array[0])/sizeof(float) )
            ++uSize;
    }
    fclose( fIn );

    float fSum = 0.0;
    for( unsigned i = 0; i < uSize; ++i )
    {
        fSum += f9Array[i][4];
    }

    printf("\nSum is: %g", fSum );
 
    printf("\nPress <Enter> to continue...");
    getc( stdin );
    return 0;
}


Цитата(Cveto4ka @  14.5.2007,  00:18 Найти цитируемый пост)
4.    Компоненты типизированного файла – целые числа. Удалить из этого файла все числа, являющиеся степенью числа «2».

Код

#include <stdio.h>

const unsigned     g_uMaxSize = 100;

bool IsPowOf2( int iVal );

int main( )
{
    FILE *fInOut = fopen( "input.dat", "rb" );
    if( !fInOut )
        return 10;

    int iArray[g_uMaxSize];

    unsigned uSize = 0; 
    unsigned uRet = 0;
    while( !feof(fInOut) )
    {
        uRet = fread( &iArray[ uSize ], 
                    sizeof(int), 
                    1, 
                    fInOut );
        if( uRet ==  1 && IsPowOf2( iArray[ uSize ] ) )
        {
            ++uSize;
        }
    }
    fclose( fInOut );

    //output.dat поменять на input.dat
    fInOut = fopen( "output.dat", "wb" );
    uRet = fwrite( iArray, 
                    sizeof(int), 
                    uSize, 
                    fInOut );
    fclose( fInOut );

    ///////////////////////////тестирование нужно убрать
    fInOut = fopen( "output.dat", "rb" );
    int iTest;
    while( !feof(fInOut) )
    {
        uRet = fread( &iTest, 
                    sizeof(int), 
                    1, 
                    fInOut );
        if( uRet ==  1  )
        {
            printf("%d ", iTest );
        }
    }
    fclose( fInOut );
    ///////////////////////////конец тестирования

    printf("\nPress <Enter> to continue...");
    getc( stdin );
    return 0;
}

bool IsPowOf2( int iVal )
{
    if( iVal <= 0 )
        return false;
    while( iVal != 1 )
    {
        //проверяем установлен правый бит или нет
        if( iVal & 1 )
            return false;
        // сдвиг вправо на 1, те делим на 2 
        iVal >>= 1;
    }
    return true;
}


для создания файлов ввода (input.dat) используйте:
Код

#include <stdio.h>

int main( )
{
    FILE *fIn = fopen( "input.dat", "wb" );
    if( !fIn )
        return 10;

    //раскомментировать для второй задачи
    //int f9Array[][9] = { {1,2,3,4,5,6,7,8,9}, {11,12,13,14,15,16,17,18,19} };

    //раскомментировать для первой задачи
    //float f9Array[][9] = { {1,2,3,4,5,6,7,8,9}, {11,12,13,14,15,16,17,18,19} };

    unsigned uSize = 0; 

    fwrite( f9Array, 1, 
            sizeof( f9Array ), fIn );

    fclose( fIn );

    printf("\nPress <Enter> to continue...");
    getc( stdin );
    return 0;
}


на ошибки проверки сами поставите, вы умеете  smile 

Это сообщение отредактировал(а) zkv - 14.5.2007, 01:40
PM MAIL   Вверх
Alexeis
Дата 15.5.2007, 10:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 23
Всего: 459



Модератор: тема выделена из %5BC++] Матрица в файле


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Cveto4ka
Дата 16.5.2007, 20:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 13.5.2007

Репутация: 1
Всего: 1



Ребята,посмотрите пожалуйста в чём ошибка?

Задание:

Компоненты типизированного файла – целые числа. Удалить из этого файла все числа, являющиеся степенью числа «2».

Вот мой код:

Код

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

#define INP "input.txt"
#define COUNT 20
#define NL (printf("\n"))

void main(void)
{

 FILE *f;
 int n,i,j,k,a[10];

 randomize();

 clrscr();
 f=fopen(INP,"wb");

 for(i=0;i<COUNT;i++)
 {
  a[i]=random(10)+1;
  printf("%d ",a[i]);
 }


 fwrite(a,sizeof(float)*COUNT,1,f);


 fclose(f);


 NL;

 f=fopen(INP,"rb");


 fread(a,sizeof(float)*COUNT,1,f);


 for(i=0,k=0;i<COUNT-k;i++)
 {
  do
  {
   j++;
   if(fabs(pow(j,2)-a[i])<1e-5)
   {
    k++;
    for(n=i;n<COUNT-k;n++)
    {
     a[n]=a[n+1];
    }
   }
  }
  while(pow(j,2)>=a[i]);
 }


 for(i=0;i<COUNT-k;i++)
 {
  printf("%d ",a[i]);
 }

 getch();
 fclose(f);
}



M
Alexeis
Модератор: используйте подсветку кода http://forum.vingrad.ru/index.php?show_typ...howtopic=126445


Это сообщение отредактировал(а) Alexeis - 16.5.2007, 20:20
PM MAIL   Вверх
zkv
Дата 16.5.2007, 20:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Участник Клуба
Сообщений: 2133
Регистрация: 23.7.2006
Где: Санкт-Петербург

Репутация: 21
Всего: 92



Cveto4ka, сказала бы, что именно у тебя не получается, а чем мой вариант определения степени двойки не нравится?
PM MAIL   Вверх
Cveto4ka
Дата 16.5.2007, 20:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 13.5.2007

Репутация: 1
Всего: 1



он хорош, но у меня не работает должным образом. Не могли бы вы мой код посмотреть на наличие ошибок. Он работает но немного криво smile 

PM MAIL   Вверх
Dov
Дата 16.5.2007, 22:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


аСинизатор
***


Профиль
Группа: Завсегдатай
Сообщений: 1721
Регистрация: 10.5.2003
Где: Эрец-Исраэль

Репутация: 50
Всего: 88



Цитата(Cveto4ka @  16.5.2007,  20:30 Найти цитируемый пост)
 Он работает но немного криво

Это даже не смешно.  smile 

Cveto4ka, твой цикл определения числа, имеющего степень двойки, я не понял. Пришлось написать свой. Остальное, вроде, подправил, как смог.  smile 
Код

void main(void)
{    
    FILE *f;
    int   i, j = 0, a[COUNT];
    
    randomize();
    
    clrscr();
    f = fopen(INP, "wb");
    
    for(i = 0; i < COUNT; i++)
    {
        a[i] = random(10) + 1;
        printf("%3d", a[i]);
    }    
    fwrite(a, sizeof(int), COUNT, f);    
    fclose(f);    
    
    f = fopen(INP, "rb");    
    fread(a, sizeof(int), COUNT, f);    
    fclose(f);    
    
    for(i = 0; i < COUNT; i++)
    {
        if((a[i] < 2) || (a[i] & (a[i] - 1)))
            a[j++] = a[i];
    }

    f = fopen(INP, "wb");
    fwrite(a, sizeof(int), j, f);    
    fclose(f);
    
    NL;    
    for(i = 0; i < j; i++)
    {
        printf("%3d", a[i]);
    }
    NL;    
    
    getch();
}



--------------------
Тут вечности запах томительный,
И свежие фрукты дешевые, 
А климат у нас – изумительный, 
И только соседи – #уевые. 
                           Игорь Губерман.
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.1384 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.