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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> матрица и ее ввод\вывод из фаила 
:(
    Опции темы
mego4el
  Дата 2.12.2010, 16:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Доброго дня ув. форумчане. Пожалуйста помогите исправить программу, делал в Visual Studio 2006, вылазит множество ошибок, я никак не могу понять что именно не правильно(.  smile  smile 

Задание таково: дано действительную квадратную матрицу порядка n. Получить новую матрицу путем замены элементов, сумма индексов которых четная на среднее геометрическое модулей элементов, находящихся на главной диагонали. Предусмотреть и сделать главное меню программы, ввод\вывод из\в фаил, вывод на экран, ввод с клавиатуры.

Код

#include <iostream>
#include <ctime> 
#include <cmath>
#include <stdio.h>
 
using std::cout;
using std::cin;
using std::endl;

int sr_geo(); //среднее геометрическое
void s_klav(); //ввод с клавиатуры
void mas_vyv(); //вывод на экран
int m_menu(); //меню программы
int iz_faila(); //ввод из фаила
int masv_file(); //вывод в фаил

int sr_geo(int **arr, int n)
{
        int sr_geo=0;
        float pr=1;
        for(int i=0; i<n; i++)
        {
                pr*=abs(arr[i][i]);
        }
        sr_geo = (int)exp(log((float)pr)/n);
        return sr_geo;
}
 
int main()
{
    char fv;
    if(m_menu())
    {
    cout<<"Resultat: \n";
    mas_vyv();
    cout<<"Vyvesti v fail? y/n \n";
    cin>>fv;
    if (fv=='y')
    masv_file();
    }
    system("pause");
return 0;
}

void s_klav()
{
         srand((unsigned)time(NULL));
         int n,i,j;
         int sr;
         int **arr;
         cout<<"Vvedite razmer massiva: ";
         cin>>n;
         arr = new int*[n];
         cout<<"Massiv: "<<endl;
         for(i=0; i<n; i++)
      {
                  arr[i] = new int[n];
                  for(j=0; j<n; j++)
                   {
                     arr[i][j]=rand()%9+1;
                     cout<<arr[i][j]<<"  ";
                        }
            cout<<endl;
      }
}

void mas_vyv()
{
         sr = sr_geo(arr,n); 
         cout<<endl;
         cout<<"Sformirovannaya matrica:"<<endl;
         for(i=0; i<n; i++)
         {
                 for(j=0; j<n; j++)
                 {
                         if((i+j)%2==0)
                         {
                                 arr[i][j]=sr;
                         }
                         cout<<arr[i][j]<<"  ";
                 }
              cout<<endl;
         }
     delete arr;
}

int m_menu()
{
    int cho;
    do
    {
      cout<<"1 - vvesti s klaviaturi\n2 - iz faila\n0 - vyhod\n";
      cin>>cho;
      switch(cho)
      {
      case 1:
          s_klav();
          return 1;
          break;
      case 2:
          if(iz_faila())
          return 1;
          else return 0;
          break;
      default: cout<<"vvedite pynkt menu \n";
      }
    }
    while (vyb!=0);
}

int iz_faila()
{
    FILE *f;
    char fname [80];
    cout<<"Vvedite polnoe nazvanie fayla: \n";
    gets(fname);
    f=fopen(fname,"rt");
    if(f)
    {
        while(!feof(f))
        {
            if(fgetc(f)=='\n')
                n++;
        }
        fseek(f,0,SEEK_SET);
        m = new float * [n];
        for (i=0;i<n;i++)
        {
            m[i]=new float [n];
        }
        for (i=0;i<n;i++)
        {
            for (j=0;j<n;j++)
                fscanf(f,"%f",&m[i][j]);
        }
        fclose(f);
        return 1;
    }
    else 
    {
        cout<<"Oshibka otkritiya!\n";
        return 0;
    }
}

int masv_file()
{
    FILE *f;
    char fname [80];
    cout<<"Vvedite polnoe nazvanie fayla: \n";
    gets(fname);
    f=fopen(fname,"wt");
    if(f)
    {
        for (i=0; i<n; i++)
        {
            for (j=0; j<n; j++)
            {
               fprintf(f,"%f ",m[i][j]);
            }
            fprintf(f,"\n");
        }
        fclose(f);
        return 1;
    }
    else 
    {
        cout<<"Oshibka otkritiya!\n";
        return 0;
    }
}



Это сообщение отредактировал(а) mego4el - 2.12.2010, 16:19
PM MAIL   Вверх
TupDub
Дата 2.12.2010, 17:08 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Привет! У тебя в коде слишком много ошибок!
Я немного отредакторовал твой код, вот результат. Думаю, дальше справишься.. Движешься в правильном направлении smile  Удачи!
Код

#include <iostream>
#include <ctime> 
#include <cmath>
#include <stdio.h>
#include <cstdlib>
  
using namespace std;

int sr_geo(); //среднее геометрическое
void s_klav(); //ввод с клавиатуры
void mas_vyv(); //вывод на экран
int m_menu(); //меню программы
int iz_faila(); //ввод из фаила
int masv_file(); //вывод в фаил
int **arr;

int Rw = 0;        //Размерность матрицы

int sr_geo(int **arr, int n)
{
    int sr_geo=0;
    float pr=1;
    for(int i=0; i<n; i++)
        pr*=abs(arr[i][i]);
    
    sr_geo = (int)exp(log((float)pr)/n);
        return sr_geo;
}
 
 
int main()
{
    char fv;
    if(m_menu())
    {
    cout<<"Resultat: \n";
    mas_vyv();
    
    cout<<"Vyvesti v fail? y/n \n";
    cin>>fv;
    
    if (fv=='y')
        masv_file();
    else printf("Exit \n");
    }
    
    system("pause");
return 0;
}


void s_klav()
{
    srand((unsigned)time(NULL));
    int n,i,j;
    int sr;

    cout<<"Vvedite razmer massiva: ";
    cin>>Rw;
    arr = new int*[Rw];
    cout<<"Massiv: "<<endl;
    
    for(i=0; i<Rw; i++)
    {
        arr[i] = new int[n];
        for(j=0; j < Rw; j++)
        {
            arr[i][j]=rand()%9+1;
            cout<<arr[i][j]<<"  ";
        }
            cout<<endl;
    }
}


void mas_vyv()
{
    int sr = sr_geo(arr,Rw); 
        cout<<endl;
        cout<<"Sformirovannaya matrica:"<<endl;
        for(int i=0; i < Rw; i++)
        {
            for(int j=0; j < Rw; j++)
            {
                    if((i+j)%2==0)
                    {
                            arr[i][j]=sr;
                    }
                    cout<<arr[i][j]<<"  ";
            }
            cout<<endl;
        }
            delete arr;
}


int m_menu()
{
    int cho;
    
    cout<<"1 - vvesti s klaviaturi\n2 - iz faila\n0 - vyhod\n";
    cin>>cho;
    switch(cho)
    {
    case 0:
        exit('Exit');
        break;
    case 1:
        s_klav();
        return 1;
        break;
    case 2:
        if(iz_faila())
        return 1;
        else return 0;
        break;
    
        default: cout<<"vvedite pynkt menu \n";
    }
}



int iz_faila()
{
    FILE *f;
    char fname [80];
    cout<<"Vvedite polnoe nazvanie fayla: \n";
//    gets(fname);
//    f=fopen(fname,"rt");
//    int n=0, m=0;
//    if(f)
//    {
//        while(!feof(f))
//        {
//            if(fgetc(f)=='\n')
//                n++;
//        }
//        fseek(f,0,SEEK_SET);
//        m = new float * [n];
//        for (i=0;i<n;i++)
//        {
//            m[i]=new float [n];
//        }
//        for (i=0;i<n;i++)
//        {
//            for (j=0;j<n;j++)
//                fscanf(f,"%f",&m[i][j]);
//        }
//        fclose(f);
//        return 1;
//    }
//    else 
//    {
//        cout<<"Oshibka otkritiya!\n";
//        return 0;
//    }
}

int masv_file()
{
//    char fname [80];
    cout<<"Vvedite polnoe nazvanie fayla: \n";
//    gets(fname);
    
    FILE *pFile = fopen("File.dat", "w+");
    if(pFile!=NULL)
    {
        for (int i=0; i < Rw; i++)
            for (int j=0; j < Rw; j++)
            {
                fprintf(pFile,"%d ", &arr[i][j]);
                printf(" %d ", &arr[i][j]);
            }
                fprintf(pFile,"\n");
        fclose(pFile);
            return 1;
    }
    else 
    {
        cout<<"Oshibka otkritiya!\n";
        return 0;
    }
}



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


Шустрый
*


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

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



спасибо огромное, но всеравно никак не получается сделать функцию "int iz_faila()", не получается сделать что бы считывало матрицу из фаила!(, помогите пожалуйста.(( третий день мучаюсь(  smile 
PM MAIL   Вверх
Annuta
Дата 4.12.2010, 23:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Напиши пожалуйста своб функцию iz_faila, как ты её реализовал ?
--------------------
Программист - это комбинация лени и логики !
PM MAIL   Вверх
mego4el
Дата 5.12.2010, 00:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата

Напиши пожалуйста своб функцию iz_faila, как ты её реализовал ? 


вот, подредактировал:

Код

int iz_faila()
{
    FILE *f;
    char fname [80];
    cout<<"Vvedite polnoe nazvanie fayla: \n";
    gets(fname);
    f=fopen(fname,"rt");
    int n, m;
    if(f)
    {
        fscanf(f,"%d",&n);
        m = new float * [n];
        for (i;i<n;i++)
        {
            m[i]=new float [n];
        }
        for (i;i<n;i++)
        {
            for (j;j<n;j++)
                fscanf(f,"%f",&m[i][j]);
        fclose(f);
    }
    else 
    {
        cout<<"Oshibka otkritiya!\n";
        return 0;
    }
}


вот.

Это сообщение отредактировал(а) mego4el - 5.12.2010, 01:55
PM MAIL   Вверх
Annuta
Дата 5.12.2010, 11:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



немного дописала твою функцию чтения
Код


int iz_faila()
{
    FILE *f;
    char FileName [256];
    printf ("Insert your full address: ");
    gets (FileName);
    printf ("File name %s\n", FileName);
  
    f=fopen(FileName,"r+");
    int nElements = 0, m=0;
    char ch;
     if(f!=NULL)
    {
        printf("File was open! \n");
        while ( ( ch = getc ( f ) ) != EOF )
        {
            if((ch != '\n') && (ch != ' ')) nElements++;    //Определяем размерность матрицы записанной в файл
                printf(" %c ", ch);            //Выводим
        }
        
        printf("\n Number = %d \n", nElements);
        fseek(f,0,SEEK_SET);
    
//        m = new float * [n];
//        for (i=0;i<n;i++)
//        {
//            m[i]=new float [n];
//        }
//        for (i=0;i<n;i++)
//        {
//            for (j=0;j<n;j++)
//                fscanf(f,"%f",&m[i][j]);
//        }
       fclose(f);

    }
    else 
    {
        cout<<"Oshibka otkritiya!\n";
        return 0;
    }
}



Думаю, дальше ты справишься smile 
--------------------
Программист - это комбинация лени и логики !
PM MAIL   Вверх
mego4el
  Дата 9.12.2010, 21:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



вот что в итоге получилось, но ничего не работает так как хотелось бы(, а в чем проблемы я не могу понять((, когда начинает считать матрицу введенную с клавиатуры, просто берет и вылетает, а ошибки как таковой я не нахожу(. пожалуйста помогите!

Код

#include <iostream>
#include <ctime> 
#include <cmath>
#include <stdio.h>
#include <cstdlib>
  
using namespace std;

int sr_geo(); //среднее геометрическое
void s_klav(); //ввод с клавиатуры
void mas_vyv(); //вывод на экран
int m_menu(); //меню программы
int iz_faila(); //ввод из фаила
int masv_file(); //вывод в фаил
int **arr;
int Rw = 0;        //Размерность матрицы

int sr_geo(int **arr, int n)
{
    int sr_geo=0;
    float pr=1;
    for(int i=0; i<n; i++)
        pr*=abs(arr[i][i]);
    
    sr_geo = (int)exp(log((float)pr)/n);
        return sr_geo;
}
 
int main()
{
    char fv;
    if(m_menu())
    {
    cout<<"Resultat: \n";
    mas_vyv();
    
    cout<<"Vyvesti v fail? y/n \n";
    cin>>fv;
    
    if (fv=='y')
        masv_file();
    else printf("Exit \n");
    }
    system("pause");
return 0;
}

void s_klav()
{
    srand((unsigned)time(NULL));
    int n,i,j;
    int sr;
    cout<<"Vvedite razmer massiva: ";
    cin>>Rw;
    arr = new int*[Rw];
    cout<<"Massiv: "<<endl;
    
    for(i=0; i<Rw; i++)
    {
        arr[i] = new int[n];
        for(j=0; j < Rw; j++)
        {
            arr[i][j]=rand()%9+1;
            cout<<arr[i][j]<<"  ";
        }
            cout<<endl;
    }
}

void mas_vyv()
{
    int sr = sr_geo(arr,Rw); 
        cout<<endl;
        cout<<"Sformirovannaya matrica:"<<endl;
        for(int i=0; i < Rw; i++)
        {
            for(int j=0; j < Rw; j++)
            {
                    if((i+j)%2==0)
                    {
                            arr[i][j]=sr;
                    }
                    cout<<arr[i][j]<<"  ";
            }
            cout<<endl;
        }
            delete arr;
}
int m_menu()
{
    int cho;
    
    cout<<"1 - vvesti s klaviaturi\n2 - iz faila\n0 - vyhod\n";
    cin>>cho;
    switch(cho)
    {
    case 0:
        exit('Exit');
        break;
    case 1:
        s_klav();
        return 1;
        break;
    case 2:
        if(iz_faila())
        return 1;
        else return 0;
        break;
    
        default: cout<<"vvedite pynkt menu \n";
    }
    return 1;
}

int iz_faila()
{
    FILE *f;
    char FileName [80];
    printf ("Insert your full address: ");
    gets (FileName);
    printf ("File name %s\n", FileName);
    f=fopen(FileName,"rt");
    int nElements = 0, m=0;
    char ch;
     if(f!=NULL)
    {
        printf("File was open! \n");
        while ( ( ch = getc ( f ) ) != EOF )
        {
            if((ch != '\n') && (ch != ' ')) nElements++;    //Определяем размерность матрицы записанной в файл
                printf(" %c ", ch);            //Выводим
        }
        
        printf("\n Number = %d \n", nElements);
        fseek(f,0,SEEK_SET);

/*      m = new float * [n];
        for (i=0;i<n;i++)
        {
            m[i]=new float [n];
        }
        for (i=0;i<n;i++)
        {
            for (j=0;j<n;j++)
                fscanf(f,"%f",&m[i][j]);
        }   */
       fclose(f);
       return 1;
    }
    else 
    {
        cout<<"Oshibka otkritiya!\n";
        return 0;
    }
}

int masv_file()
{
//    char fname [80];
    cout<<"Vvedite polnoe nazvanie fayla: \n";
//    gets(fname);
    
    FILE *pFile = fopen("File.txt", "w+");
    if(pFile!=NULL)
    {
        for (int i=0; i < Rw; i++)
            for (int j=0; j < Rw; j++)
            {
                fprintf(pFile,"%d ", arr[i][j]);
                printf(" %d ", arr[i][j]);
            }
                fprintf(pFile,"\n");
        fclose(pFile);
            return 1;
    }
    else 
    {
        cout<<"Oshibka otkritiya!\n";
        return 0;
    }
}

PM MAIL   Вверх
Dov
Дата 11.12.2010, 16:45 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(mego4el @  9.12.2010,  20:08 Найти цитируемый пост)
когда начинает считать матрицу введенную с клавиатуры, просто берет и вылетает, а ошибки как таковой я не нахожу

строка 60: 
Код
arr[i] = new int[n];

а чему здесь равно n?



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


Шустрый
*


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

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



Цитата

а чему здесь равно n?


не много не понял вопроса, а в чем дело?  smile 
PM MAIL   Вверх
Dov
Дата 12.12.2010, 00:57 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(mego4el @  11.12.2010,  23:04 Найти цитируемый пост)
не много не понял вопроса, а в чем дело?

А что тут понимать?  Я же не на иврите спрашиваю. Чему равно n в 60-й строке твоего кода? 
вот здесь:
Код
 arr[i] = new int[n];



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


Шустрый
*


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

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



Код

#include <iostream>
#include <ctime> 
#include <cmath>
#include <stdio.h>
#include <cstdlib>
  
using namespace std;
int sr_geo(); //среднее геометрическое
void s_klav(); //ввод с клавиатуры
void mas_vyv(); //вывод на экран
int m_menu(); //меню программы
int iz_faila(); //ввод из фаила
int masv_file(); //вывод в фаил
int **arr;
int Rw = 0;        //Размерность матрицы
int sr_geo(int **arr, int n)
{
    int sr_geo=0;
    float pr=1;
    for(int i=0; i<n; i++)
        pr*=abs(arr[i][i]);
    
    sr_geo = (int)exp(log((float)pr)/n);
        return sr_geo;
}
 
int main()
{
    char fv;
    if(m_menu())
    {
    cout<<"Resultat: \n";
    mas_vyv();
    
    cout<<"Vyvesti v fail? y/n \n";
    cin>>fv;
    
    if (fv=='y')
        masv_file();
    else printf("Exit \n");
    }
    system("pause");
return 0;
}
void s_klav()
{
    srand((unsigned)time(NULL));
    int n,i,j;
    int sr;
    cout<<"Vvedite razmer massiva: ";
    cin>>Rw;
    arr = new int*[Rw];
    cout<<"Massiv: "<<endl;
    
    for(i=0; i<Rw; i++)
    {
        arr[i] = new int[Rw];
        for(j=0; j < Rw; j++)
        {
            arr[i][j]=rand()%9+1;
            cout<<arr[i][j]<<"  ";
        }
            cout<<endl;
    }
}
void mas_vyv()
{
    int sr = sr_geo(arr,Rw); 
        cout<<endl;
        cout<<"Sformirovannaya matrica:"<<endl;
        for(int i=0; i < Rw; i++)
        {
            for(int j=0; j < Rw; j++)
            {
                    if((i+j)%2==0)
                    {
                            arr[i][j]=sr;
                    }
                    cout<<arr[i][j]<<"  ";
            }
            cout<<endl;
        }
            delete arr;
}
int m_menu()
{
    int cho;
    
    cout<<"1 - vvesti s klaviaturi\n2 - iz faila\n0 - vyhod\n";
    cin>>cho;
    switch(cho)
    {
    case 0:
        exit('Exit');
        break;
    case 1:
        s_klav();
        return 1;
        break;
    case 2:
        if(iz_faila())
        return 1;
        else return 0;
        break;
    
        default: cout<<"vvedite pynkt menu \n";
    }
    return 1;
}
int iz_faila()
{
    FILE *f;
    char FileName [80];
    printf ("Insert your full address: ");
    gets (FileName);
    printf ("File name %s\n", FileName);
    f=fopen(FileName,"rt");
    int nElements = 0, m=0;
    char ch;
     if(f!=NULL)
    {
        printf("File was open! \n");
        while ( ( ch = getc ( f ) ) != EOF )
        {
            if((ch != '\n') && (ch != ' ')) nElements++;    //Определяем размерность матрицы записанной в файл
                printf(" %c ", ch);            //Выводим
        }
        
        printf("\n Number = %d \n", nElements);
        fseek(f,0,SEEK_SET);
/*      m = new float * [n];
        for (i=0;i<n;i++)
        {
            m[i]=new float [n];
        }
        for (i=0;i<n;i++)
        {
            for (j=0;j<n;j++)
                fscanf(f,"%f",&m[i][j]);
        }   */
       fclose(f);
       return 1;
    }
    else 
    {
        cout<<"Oshibka otkritiya!\n";
        return 0;
    }
}
int masv_file()
{
//    char fname [80];
    cout<<"Vvedite polnoe nazvanie fayla: \n";
//    gets(fname);
    
    FILE *pFile = fopen("File.txt", "w+");
    if(pFile!=NULL)
    {
        for (int i=0; i < Rw; i++)
            for (int j=0; j < Rw; j++)
            {
                fprintf(pFile,"%d ", arr[i][j]);
                printf(" %d ", arr[i][j]);
            }
                fprintf(pFile,"\n");
        fclose(pFile);
            return 1;
    }
    else 
    {
        cout<<"Oshibka otkritiya!\n";
        return 0;
    }
}


спасибо большое, там надо было написать не n а Rw. вот поправил, а как теперь сделать что бы выводило далее в фаил?, просто теперь когда выскакивает "vyvesti v fayl?" и нужно ввести y или n, что бы подтвердить или отказаться, а оно просто пишет "нажмите любую клавишу для продолжения, и на этом программа завершается.
PM MAIL   Вверх
TupDub
Дата 12.12.2010, 23:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Ну, конечно! Если данные хранятся в виде двойного указателя, то значение получаем по ссылке.
Код

int masv_file()
{
//    char fname [80];
    cout<<"Vvedite polnoe nazvanie fayla: \n";
//    gets(fname);
    
    FILE *pFile = fopen("File.txt", "w+");
    if(pFile!=NULL)
    {
        for (int i=0; i < Rw; i++)
            for (int j=0; j < Rw; j++)
            {
                fprintf(pFile,"%d ", &arr[i][j]);
                printf(" %d ", &arr[i][j]);
            }
                fprintf(pFile,"\n");
        fclose(pFile);
            return 1;
    }
    else 
    {
        cout<<"Oshibka otkritiya!\n";
        return 0;
    }
}


Я уже жду вопроса, почему в файл пишутся не те цифры smile )) 
PM   Вверх
Dov
Дата 13.12.2010, 00:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



mego4el, ты удали 83 строку из твоего кода и сделай освобождение памяти, как положено. А ф-цию masv_file() измени чуток, ну хотя бы так:
Код
int masv_file()
{
//    char fname [80];
//    cout<<"Vvedite polnoe nazvanie fayla: \n";
//    gets(fname);
    
    FILE *pFile = fopen("File.txt", "w+");
    if(pFile != NULL)
    {
        for (int i=0; i < Rw; i++)
        {
            for (int j=0; j < Rw; j++)
            {
                fprintf(pFile,"%d ", arr[i][j]);
                printf(" %d ", arr[i][j]);
            }
        
            fprintf(pFile,"\n");
            puts("");
        }
        fclose(pFile);
            return 1;
    }
    else 
    {
        cout<<"Oshibka otkritiya!\n";
        exit(1);
    }
    return 1;

}



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


Шустрый
*


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

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



http://i021.radikal.ru/1012/5e/ef496d3aa1df.jpg

вот собственно в чем проблема, когда считает матрицу с клавиатуры, пишет мол "вывести в фаил? нажмите y/n", и сразу же "для продолжения нажмите любую клавишу". скажите где я прощелкал?, не могу найти ошибку(, и даже не могу проверить дальнейшую работоспособность программы(.

http://s015.radikal.ru/i330/1012/fc/015799135a87.jpg

а вот это выскакивает, когда выбираю пункт меню "2 - iz faila". Как исправить?((
PM MAIL   Вверх
mego4el
Дата 14.12.2010, 15:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Код

#include <iostream>
#include <ctime> 
#include <cmath>
#include <stdio.h>
#include <cstdlib>
  
using namespace std;
int sr_geo(); //ñðåäíåå ãåîìåòðè÷åñêîå
void s_klav(); //ââîä ñ êëàâèàòóðû
void mas_vyv(); //âûâîä íà ýêðàí
int m_menu(); //ìåíþ ïðîãðàììû
int iz_faila(); //ââîä èç ôàèëà
int masv_file(); //âûâîä â ôàèë
int **arr;
int Rw = 0;        //Ðàçìåðíîñòü ìàòðèöû
int sr_geo(int **arr, int n)
{
    int sr_geo=0;
    float pr=1;
    for(int i=0; i<n; i++)
        pr*=abs(arr[i][i]);
    
    sr_geo = (int)exp(log((float)pr)/n);
        return sr_geo;
}
 
int main()
{
    char fv;
    if(m_menu())
    {
    cout<<"Resultat: \n";
    mas_vyv();
    
cout<<"Vyvesti v fail? y/n \n";
   do 
   {
       cin>>fv;
    }while(fv!='y' && fv!='n');
    if (fv=='y')
        masv_file();
    else printf("Exit \n");
    }
    system("pause");
return 0;
}
void s_klav()
{
    srand((unsigned)time(NULL));
    int n,i,j;
    int sr;
    cout<<"Vvedite razmer massiva: ";
    cin>>Rw;
    arr = new int*[Rw];
    cout<<"Massiv: "<<endl;
    
    for(i=0; i<Rw; i++)
    {
        arr[i] = new int[Rw];
        for(j=0; j < Rw; j++)
        {
            arr[i][j]=rand()%9+1;
            cout<<arr[i][j]<<"  ";
        }
            cout<<endl;
    }
}
void mas_vyv()
{
    int sr = sr_geo(arr,Rw); 
        cout<<endl;
        cout<<"Sformirovannaya matrica:"<<endl;
        for(int i=0; i < Rw; i++)
        {
            for(int j=0; j < Rw; j++)
            {
                    if((i+j)%2==0)
                    {
                            arr[i][j]=sr;
                    }
                    cout<<arr[i][j]<<"  ";
            }
            cout<<endl;
        }
            delete arr;
}
int m_menu()
{
    int cho;
    
    cout<<"1 - vvesti s klaviaturi\n2 - iz faila\n0 - vyhod\n";
    cin>>cho;
    switch(cho)
    {
    case 0:
        exit('Exit');
        break;
    case 1:
        s_klav();
        return 1;
        break;
    case 2:
        return iz_faila();
        break;

        default: cout<<"vvedite pynkt menu \n";
    }
    return 1;
}
int iz_faila()
{
    FILE *f;
    char FileName [80];
    printf ("Insert your full address: ");
    gets (FileName);
    printf ("File name %s\n", FileName);
    f=fopen(FileName,"rt");
    int nElements = 0, m=0;
    char ch;
     if(f!=NULL)
    {
        printf("File was open! \n");
        while ( ( ch = getc ( f ) ) != EOF )
        {
            if((ch != '\n') && (ch != ' ')) nElements++;    //Îïðåäåëÿåì ðàçìåðíîñòü ìàòðèöû çàïèñàííîé â ôàéë
                printf(" %c ", ch);            //Âûâîäèì
        }
        
        printf("\n Number = %d \n", nElements);
        fseek(f,0,SEEK_SET);
/*      m = new float * [n];
        for (i=0;i<n;i++)
        {
            m[i]=new float [n];
        }
        for (i=0;i<n;i++)
        {
            for (j=0;j<n;j++)
                fscanf(f,"%f",&m[i][j]);
        }   */
       fclose(f);
       return 1;
    }
    else 
    {
        cout<<"Oshibka otkritiya!\n";
        return 0;
    }
}

int masv_file()
{
//    char fname [80];
//    cout<<"Vvedite polnoe nazvanie fayla: \n";
//    gets(fname);
    
    FILE *pFile = fopen("File.txt", "w+");
    if(pFile != NULL)
    {
        for (int i=0; i < Rw; i++)
        {
            for (int j=0; j < Rw; j++)
            {
                fprintf(pFile,"%d ", arr[i][j]);
                printf(" %d ", arr[i][j]);
            }
        
            fprintf(pFile,"\n");
            puts("");
        }
        fclose(pFile);
            return 1;
    }
    else 
    {
        cout<<"Oshibka otkritiya!\n";
        exit(1);
    }
    return 1;
}


спасибо немного подправил, теперь первая ошибка исчезла, но появилась другая, когда нажимаешь "y" то есть как бы соглашаешься вывести матрицу в фаил, то пишет "обнаружена ошибка, приложение будет остановлено, отправлить ли отчет на microsoft ....". а в проге пишет "press any key to continue".

а вторая ошибка осталась:

http://s015.radikal.ru/i330/1012/fc/015799135a87.jpg

а вот это выскакивает, когда выбираю пункт меню "2 - iz faila". Как исправить?(( 
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


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

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


 




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


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

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