Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

матрица и ее ввод\вывод из фаила

35K
02 декабря 2010 года
life4fun
64 / / 15.11.2010
Доброго дня ув. форумчане. Пожалуйста помогите исправить программу, делал в Visual Studio 2006, вылазит множество ошибок, я никак не могу понять что именно не правильно(. :(:(

Задание таково: дано действительную квадратную матрицу порядка 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);
        }
        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 = new int[n];
                  for(j=0; j<n; j++)
                   {
                     arr[j]=rand()%9+1;
                     cout<<arr[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[j]=sr;
                         }
                         cout<<arr[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=new float [n];
        }
        for (i=0;i<n;i++)
        {
            for (j=0;j<n;j++)
                fscanf(f,"%f",&m[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[j]);
            }
            fprintf(f,"\n");
        }
        fclose(f);
        return 1;
    }
    else
    {
        cout<<"Oshibka otkritiya!\n";
        return 0;
    }
}
35K
03 декабря 2010 года
life4fun
64 / / 15.11.2010
вот подправил остальные, вроде бы теперь не выдает так много ошибок, но никак не получается сделать функцию "int iz_faila()", не получается сделать что бы считывало матрицу из фаила!(, помогите пожалуйста.

Код:
#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);
   
    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 = new int[n];
        for(j=0; j < Rw; j++)
        {
            arr[j]=rand()%9+1;
            cout<<arr[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[j]=sr;
                    }
                    cout<<arr[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=new float [n];
//        }
//        for (i=0;i<n;i++)
//        {
//            for (j=0;j<n;j++)
//                fscanf(f,"%f",&m[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[j]);
                printf(" %d ", &arr[j]);
            }
                fprintf(pFile,"\n");
        fclose(pFile);
            return 1;
    }
    else
    {
        cout<<"Oshibka otkritiya!\n";
        return 0;
    }
}
392
05 декабря 2010 года
cronya
421 / / 03.01.2009
Код:
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[j]=sr;
                    }
                    cout<<arr[j]<<"  ";
            }
            cout<<endl;
        }
[COLOR="Red"]            delete arr;[/COLOR]
}
Тут ваще то удаление не так делается
 
Код:
for(int i=0; i < Rw; i++)
      delete arr;
delete []arr;

Пример работы с файлом
Код:
#include<iostream>
#include<ctime>
using namespace std;
void print_into_file();
int print_from_file();
void save_to_file(int *arr, int size);
int main(int argc, char* argv[])
{
    srand((unsigned)time(NULL));
    print_into_file();
    print_from_file();
    cout<<endl;
    system("pause");
    return 0;
}
void print_into_file()
{
    int size=rand()%4+2;
    FILE *buf=fopen("Dat.txt","w");
    int *arr=new int[size];
    for(int idx=0;idx<size;idx++)
        arr[idx]=rand()%10;
    for(int idx=0;idx<size;idx++)
        fprintf(buf,"%d ",arr[idx]);
    delete []arr;
    fclose(buf);
}
int print_from_file()
{
    FILE *buf;
    buf=fopen("Dat.txt","r");
    int count=0;
    if(!buf)
    {
        cout<<"No such file\n";
        return 0;
    }
    else
    {
        while(!feof(buf))
        {
            count++;
        }
        rewind(buf);
        int *arr=new int[count-1];
        int idx=0;
        fscanf(buf,"%d",&arr[idx]);
        while(!feof(buf))
        {
            idx++;
            fscanf(buf,"%d",&arr[idx]);
        }
        for(idx=0;idx<count-1;idx++)
            cout<<arr[idx]<<"\t";
        save_to_file(arr,count);
        fclose(buf);
        delete []arr;
        return 1;
    }
}
void save_to_file(int *arr, int size)
{
    FILE *out=fopen("new.txt","w");
    for(int idx=0;idx<size-1;idx++)
        fprintf(out,"%d ",arr[idx]);
    fclose(out);
}
297
06 декабря 2010 года
koodeer
1.2K / / 02.05.2009
Топикстартеру уже показывали, как правильно удалять массивы. Бес толку...
cronya, кстати, тоже не совсем прав. Не хватает скобочек:
 
Код:
for(int i=0; i < Rw; i++)
      delete [highlight][][/highlight] arr;
delete []arr;
392
06 декабря 2010 года
cronya
421 / / 03.01.2009
Цитата: koodeer
Топикстартеру уже показывали, как правильно удалять массивы. Бес толку...
cronya, кстати, тоже не совсем прав. Не хватает скобочек:
 
Код:
for(int i=0; i < Rw; i++)
      delete [highlight][][/highlight] arr;
delete []arr;



Хм, чего то видимо пропустил, спс за ремарку:) Ну это не синтаксическая ошибка, а лишь стандарт

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог