Модераторы: 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   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

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


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

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

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

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


 




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


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

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