Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.12.2010, 16:17   #1
mego4el
Пользователь
 
Аватар для mego4el
 
Регистрация: 19.09.2010
Сообщений: 87
Вопрос матрица и ее ввод\вывод из фаила

Доброго дня ув. форумчане. Пожалуйста помогите исправить программу, делал в 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[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 вне форума Ответить с цитированием
Старый 03.12.2010, 21:41   #2
mego4el
Пользователь
 
Аватар для mego4el
 
Регистрация: 19.09.2010
Сообщений: 87
По умолчанию

немного подправил, пожалуйста помогите разобраться как доделать функцию "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[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;
    }
}
mego4el вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[C++] Ввод - вывод AquaticSoul Помощь студентам 0 18.04.2010 20:02
Ввод-Вывод Joker_35815 Помощь студентам 2 30.03.2010 19:22
Ввод-вывод Sparky Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 3 04.10.2009 13:15
Ввод и вывод Mihael-Vlz Паскаль, Turbo Pascal, PascalABC.NET 3 19.01.2009 18:00