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

Поиск:

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


Новичок



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

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



Люди добрые! Помогите несчастной! Очень прошу...
Задачку сделать срочно надо, а я сама ничего не понимаю=) 


В текстовом файле хранится вещественная матрица 27х5. Заменить в ней все отрицательные числа нулями. Учесть: высота экрана 25 строк.



Буду очень признательна моему герою))




PM MAIL   Вверх
MAKCim
Дата 13.5.2007, 14:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

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



Для домашних заданий, курсовых, существует "Центр Помощи".

Тема перенесена! 


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

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


Новичок



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

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



Как мне матрицу из файла открыть, чтобы с ней потом работать?
PM MAIL   Вверх
Voldemar2004
Дата 13.5.2007, 15:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1650
Регистрация: 25.12.2004

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



Читай из файла, да записывай элементы в статический/динамический массив. Задача очень простая. smile 


--------------------
i_i 
(';') 
(V)

user posted image
PM MAIL   Вверх
Cveto4ka
Дата 13.5.2007, 16:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Можно пояснить? Подскажите хоть как начать))
PM MAIL   Вверх
zkv
Дата 13.5.2007, 16:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


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

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



Цитата(Cveto4ka @  13.5.2007,  16:20 Найти цитируемый пост)
Подскажите хоть как начать)) 

Код

#include <fstream>

#define M 27
#define N 5

int main( int argc, char *argv[] )
{
  float fMatrix[M][N];
  //чтение матрицы из файла
  std::ifstream fIn("input.txt");
  for( int i = 0; i < M; ++i )
    for( int j = 0; j < N; ++j )
       fIn>>fMatrix[i][j];
  fIn.close();
/*
А вот тут надо выполнить задание ;-)
*/
  //вывод матрицы в файл
  std::ofstream fOut("output.txt");
  for( int i = 0; i < M; ++i )
    for( int j = 0; j < N; ++j )
       fOut<<fMatrix[i][j];
  fOut.close();
}

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


Новичок



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

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



Ясно. Это всё замечательно)))) Только мне нужно всё через стандартные библиотеки сделать: conio , stdlib и т.п. Всё равно ОГРОМНОЕ списибки. Жду мужской помощи..... smile 

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


Новичок



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

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



Ну вот написала, да толко он не выводит ничего. Подскаите в чём ошибка.Очень прошу)))
Код

#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>
#include <alloc.h>
#define M 25
#define N  5

int main()
{
clrscr();
int i=0,j=0;
int *s;
char *matrix;
float mas[M][N];
char *ch;
FILE *f1;
 if ((f1=fopen("Matrix.txt","r" ))==NULL)
  {
   printf("\n File open error");
  }
 else
  {
   printf ("File is open:\n"); }


  while (!feof)

    {for(i=0;i<M;i++)
     for(j=0;j<N;j++)
     ch=fgets(f1)    // Вот здесь 5 ошибок выдает
     mas[i][j]=atof(ch);
    }


  for (i=0;i<M;i++)
  for (j=0;j<N;j++)
  if (mas[i][j]<0)  mas[i][j]=0;

  fclose(f1);
  if ((f1=fopen("Matrix.txt","w" ))==NULL)
  {
   printf("\n File open error");
  }
 else
  {
   printf ("File is open:\n"); }
   for (i=0;i<M;i++)
   for (j=0;j<N;j++)

   fprintf(f1,"%f",mas[i][j]);




  getch();
  return 0;
  }

Если знаете в чём дело черканите. smile 

Это сообщение отредактировал(а) Guedda - 13.5.2007, 21:19
PM MAIL   Вверх
Anikmar
Дата 13.5.2007, 21:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

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



ch=fgets(f1)

Вы хелп по этой функции смотрели?
У нее вызов совсем другой.

Я уж не говорю, что точка с запятой пропущена.

fgets считывает строку символов из файла в указанный буфер. У вас буфера нет - просто указатель на строку. Вы это сами писали или откуда-то взяли?

Форма вызова функции такая:
char *fgets(char *s, int n, FILE *stream);

Добавлено через 2 минуты и 24 секунды
char *ch;
Замените на 
char ch[100];

Строка в файле должна быть не более 99 символов

ch=fgets(f1)

Замените на

fgets(ch,100,f1);
PM MAIL ICQ   Вверх
zkv
Дата 13.5.2007, 22:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


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

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



Код

#include <stdio.h>

const unsigned g_uMWidth  = 5;
const unsigned g_uMHeight = 27;
const unsigned g_uDispHeight = 25;

void Error( const char *pcMessage );
void Wait();

int main( int argc, char *argv[] )
{
    FILE *fIn = fopen( "input.txt", "r" );
    if( !fIn )
    {
        Error( "Unable to open input file" );
        return 10;
    }

    float fMatrix[g_uMHeight][g_uMWidth];
    float fTemp = 0.0;

    printf("\nInitial Matrix:\n");
    for( unsigned i = 0; i < g_uMHeight; ++i )
    {
        if( i != 0 && i % (g_uDispHeight-2) == 0 )
            Wait();
        for( unsigned j = 0; j < g_uMWidth; ++j )
        {
            if( fscanf( fIn, "%f", &fTemp ) != 1 )
            {
                Error( "Wrong data in input file" );    
                return 20;
            }
            printf( "\t%g", fTemp );
            
            fMatrix[i][j] = (fTemp < 0) ? 0 : fTemp;
        }
        printf("\n");
    }

    if( fclose( fIn ) )
    {
        printf("Warning: Unable to close input file");
    }
    Wait();
    printf("\n\nResult Matrix:\n");
    for( unsigned i = 0; i < g_uMHeight; ++i )
    {
        if( i != 0 && i % (g_uDispHeight-2) == 0 )
            Wait();
        for( unsigned j = 0; j < g_uMWidth; ++j )
        {
            printf( "\t%g", fMatrix[i][j] );
        }
        printf("\n");
    }

    Wait();
    return 0;
}

void Error( const char *pcMessage )
{
    printf( "\nError: %s", pcMessage );
    int iNum = _fcloseall();
    if( iNum )
        printf( "\n%d files have closed", iNum );
    Wait();
}

void Wait()
{
    printf("Press <Enter> to continue...");
    getc( stdin );
}


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


Новичок



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

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



Слишком сложно для меня. Мре бы попроще как-нибудь smile

Добавлено @ 23:04
ну вот
6 ошибок выдаёт(
Код

#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>
#include <alloc.h>
#define M 25
#define N  5

int main()
{
clrscr();
int i=0,j=0;
int *s;
char *matrix;
float mas[M][N];
char *ch[100];// указатель здесь нужен?
FILE *f1;
 if ((f1=fopen("Matrix.txt","r" ))==NULL)
  {
   printf("\n File open error");
  }
 else
  {
   printf ("File is open:\n"); }


  while (!feof)

    {for(i=0;i<M;i++)
     for(j=0;j<N;j++)
     ch=fgetc(ch,100,f1);//
     mas[i][j]=atof(ch);// и вот с этим проблемы :wacko 
    }


  for (i=0;i<M;i++)
  for (j=0;j<N;j++)
  if (mas[i][j]<0)  mas[i][j]=0;

  fclose(f1);
  if ((f1=fopen("Matrix.txt","w" ))==NULL)
  {
   printf("\n File open error");
  }
 else
  {
   printf ("File is open:\n"); }
   for (i=0;i<M;i++)
   for (j=0;j<N;j++)

   fprintf(f1,"%f",mas[i][j]);




  getch();
  return 0;
  }



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



****


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

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



Цитата(Cveto4ka @  13.5.2007,  22:56 Найти цитируемый пост)
Мре бы попроще как-нибудь

Enjoy smile
Код

#include <stdio.h>

int main( )
{
    FILE *fIn = fopen( "input.txt", "r" );
 
    float fMatrix[27][5];
    float fTemp = 0.0;
    printf("\nInitial Matrix:\n");
    for( unsigned i = 0; i < 27; ++i )
    {
        for( unsigned j = 0; j < 5; ++j )
        {
            fscanf( fIn, "%f", &fTemp ) ;
            
            printf( "\t%g", fTemp );
            
            if(fTemp < 0) 
                   fMatrix[i][j] = 0;
            else 
                fMatrix[i][j] = fTemp;
        }
        printf("\n");
    }
  fclose( fIn ) ;

    printf("\n\nResult Matrix:\n");
    for( unsigned i = 0; i < 27; ++i )
    {
         for( unsigned j = 0; j < 5; ++j )
        {
            printf( "\t%g", fMatrix[i][j] );
        }
        printf("\n");
    }
 
    printf("Press <Enter> to continue...");
    getc( stdin );
    return 0;
}


Cveto4ka, уверяю, ничего сложного в моем коде нет, а вот вы сейчас чувствую наворотите smile Я  уже боюсь глядеть в ваш код smile Что именно непонятно в моем коде?

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


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

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



Цитата(Anikmar @  13.5.2007,  21:58 Найти цитируемый пост)
char *ch;
Замените на 
char ch[100];

Я же вам без звездочки написал! Зачем вы создаете массив из 100 указателей?
Цитата(Cveto4ka @  13.5.2007,  22:56 Найти цитируемый пост)
char *ch[100];// указатель здесь нужен?


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


Новичок



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

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



Он не знает что такое g_uMheight и g_MWiddth, затем Code has not effect и Multiple declaration for" i".Ухххх...
PM MAIL   Вверх
zkv
Дата 13.5.2007, 23:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


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

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



Цитата(Cveto4ka @  13.5.2007,  23:12 Найти цитируемый пост)
Multiple declaration for" i".Ухххх... 

Компилятор надо указывать, они разные бывают знаете ли smile
Код

#include <stdio.h>
int main( )
{
    FILE *fIn = fopen( "input.txt", "r" );
 
    float fMatrix[27][5];
    unsigned i, j;
    float fTemp = 0.0;
    printf("\nInitial Matrix:\n");
    for( i = 0; i < 27; ++i )
    {
        for( j = 0; j < 5; ++j )
        {
            fscanf( fIn, "%f", &fTemp ) ;
            
            printf( "\t%g", fTemp );
            
            if(fTemp < 0) 
                   fMatrix[i][j] = 0;
            else 
                fMatrix[i][j] = fTemp;
        }
        printf("\n");
    }
  fclose( fIn ) ;
    printf("\n\nResult Matrix:\n");
    for( i = 0; i < 27; ++i )
    {
         for( j = 0; j < 5; ++j )
        {
            printf( "\t%g", fMatrix[i][j] );
        }
        printf("\n");
    }
 
    printf("Press <Enter> to continue...");
    getc( stdin );
    return 0;
}

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


Новичок



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

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



 ch=fgetc(ch,100,f1)- Вот где вся проблема, все ошибки здесь 
PM MAIL   Вверх
Anikmar
Дата 13.5.2007, 23:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

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



zkv, У вас коды практически одинаковые. Но вы забыли записать в файл.
У Cveto4ka есть нюанс - входной и выходной файл совпадают. так что сходные данные перезапишутся.

Если соединить 2 кода - получится что-то близкое к нужному.
 smile 
PM MAIL ICQ   Вверх
Cveto4ka
Дата 13.5.2007, 23:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



ch=fgetc(ch,100,f1)- Вот где вся проблема, все ошибки здесь. А где его поставить надо?

Добавлено через 57 секунд
Как эти коды соединить?
PM MAIL   Вверх
Anikmar
Дата 13.5.2007, 23:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

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



Цитата(Cveto4ka @  13.5.2007,  23:17 Найти цитируемый пост)
 ch=fgetc(ch,100,f1)- Вот где вся проблема, все ошибки здесь. А где его поставить надо? 

Он правильно стоит. Какие ошибки компилятор выдает?
PM MAIL ICQ   Вверх
zkv
Дата 13.5.2007, 23:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


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

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



Цитата(Anikmar @  13.5.2007,  23:17 Найти цитируемый пост)
Но вы забыли записать в файл.

ничего я не забывал, не было ничего сказано про файл  smile 

было только:
Цитата(Cveto4ka @  13.5.2007,  13:08 Найти цитируемый пост)
Учесть: высота экрана 25 строк.

так что первый мой вариант соответствует всем требованиям  

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


Новичок



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

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



Теперь одни нули выводит.   smile 

PM MAIL   Вверх
Anikmar
Дата 13.5.2007, 23:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

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



Цитата(Cveto4ka @  13.5.2007,  23:23 Найти цитируемый пост)
Теперь одни нули выводит.    

А исходный файл у вас создан? Там все в порядке?
PM MAIL ICQ   Вверх
Cveto4ka
Дата 13.5.2007, 23:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Нет, что-то не работает. не пойму в чём дело. Минуточку...
Ой дура я!!! Всё отлично работает. Не знаю как вас отблагодарить)) smile  smile

Добавлено через 56 секунд
Ребята всем огромное спасибо. Век благодарна буду smile 
PM MAIL   Вверх
Dov
Дата 13.5.2007, 23:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(Cveto4ka @  13.5.2007,  23:28 Найти цитируемый пост)
Не знаю как вас отблагодарить)

Уже.  smile 



--------------------
Тут вечности запах томительный,
И свежие фрукты дешевые, 
А климат у нас – изумительный, 
И только соседи – #уевые. 
                           Игорь Губерман.
PM   Вверх
Alexeis
Дата 15.5.2007, 10:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


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

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




M
Alexeis
Модератор: Пожалуйста, один топик - один вопрос.

Тема разделена, новая тема  в "[C++] Типизированный файл"


Это сообщение отредактировал(а) Alexeis - 14.6.2007, 20:09


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

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

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

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


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

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

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

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


 




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


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

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