#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;
}
}
матрица и ее ввод\вывод из фаила
Задание таково: дано действительную квадратную матрицу порядка n. Получить новую матрицу путем замены элементов, сумма индексов которых четная на среднее геометрическое модулей элементов, находящихся на главной диагонали. Предусмотреть и сделать главное меню программы, ввод\вывод из\в фаил, вывод на экран, ввод с клавиатуры.
Код:
Код:
#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;
}
}
#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;
}
}
Код:
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]
}
{
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;
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);
}
#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);
}
показывали, как правильно удалять массивы. Бес толку...
cronya, кстати, тоже не совсем прав. Не хватает скобочек:
Топикстартеру уже
cronya, кстати, тоже не совсем прав. Не хватает скобочек:
Код:
for(int i=0; i < Rw; i++)
delete [highlight][][/highlight] arr;
delete []arr;
delete [highlight][][/highlight] arr;
delete []arr;
Цитата: koodeer
Топикстартеру уже показывали, как правильно удалять массивы. Бес толку...
cronya, кстати, тоже не совсем прав. Не хватает скобочек:
cronya, кстати, тоже не совсем прав. Не хватает скобочек:
Код:
for(int i=0; i < Rw; i++)
delete [highlight][][/highlight] arr;
delete []arr;
delete [highlight][][/highlight] arr;
delete []arr;
Хм, чего то видимо пропустил, спс за ремарку:) Ну это не синтаксическая ошибка, а лишь стандарт