Добрый день, пишу дескриптор массива, и возникла проблема, что когда я пытаюсь записать значение по адресу, то у меня после записывания это значение лежит во всех адресах, а это не верно, не могли бы указать, в чем лажанул. Двумерный массив :int ArrayMembers[5000][5000]; отвечает за хранения данных по адресу. вот код:
Код:
// descriptor.cpp: определяет точку входа для консольного приложения.
//
#include "stdafx.h"
#include "iostream"
#include "string"
using namespace std;
struct ArrayInformation{
string ArrayName;
int ArrayRazmer;
int ArrayLenth;
int *ArrayBorders;
int *ArrayFuctorial;
int NullAddres;
};
int ArrayMembers[5000][5000];
int LookErrors=0;
void ChekErrors(int NewAddres,int i,ArrayInformation *CreateArray){
//cout<<"\n i= "<<i;
if(NewAddres>=CreateArray->ArrayBorders[i*2]&&NewAddres<=CreateArray->ArrayBorders[i*2+1]){
LookErrors=0;
}else{
LookErrors=1;
}
}
ArrayInformation *GetArrayDesc(){
ArrayInformation *CreateArray=new ArrayInformation;
cout<<"\n ENTER ARRAY NAME: ";cin>>CreateArray->ArrayName;
cout<<"\n ENTER ARRAY DEMENSION: ";cin>>CreateArray->ArrayRazmer;
cout<<"\n ENTER SLOT LENTH: ";cin>>CreateArray->ArrayLenth;
CreateArray->ArrayBorders=new int[CreateArray->ArrayRazmer+1];
for(int i=0;i<CreateArray->ArrayRazmer;i++){
cout<<"\n First border :";cin>>CreateArray->ArrayBorders[i*2];
cout<<"\n Last border: ";cin>>CreateArray->ArrayBorders[i*2+1];
}
CreateArray->ArrayFuctorial=new int[CreateArray->ArrayRazmer+1];
CreateArray->ArrayFuctorial[0]=CreateArray->ArrayLenth;
for(int i=1;i<CreateArray->ArrayRazmer;i++){
CreateArray->ArrayFuctorial[i]=CreateArray->ArrayFuctorial[i-1]*(CreateArray->ArrayBorders[i*2+1]-CreateArray->ArrayBorders[i*2]+1);
}
CreateArray->NullAddres=0;
for(int i=0;i<CreateArray->ArrayRazmer;i++){
CreateArray->NullAddres-=CreateArray->ArrayFuctorial[i]*CreateArray->ArrayBorders[i*2];
}
return CreateArray;
}
void GetInformationAboutArray(ArrayInformation *CreateArray){
cout<<"\n Array NAME: "<<CreateArray->ArrayName;
cout<<"\n Array DEMENSION: "<<CreateArray->ArrayRazmer;
cout<<"\n Array SLOT LENTH: "<<CreateArray->ArrayLenth;
cout<<"\n ARRAY BORDERS: ";
for(int i=0;i<CreateArray->ArrayRazmer;i++){
cout<<"["<<CreateArray->ArrayBorders[i*2]<<".."<<CreateArray->ArrayBorders[i*2+1]<<"]";
}
for(int i=0;i<CreateArray->ArrayRazmer;i++){
cout<<"\n Array Fuctorial["<<i<<"]: "<<CreateArray->ArrayFuctorial[i];
}
cout<<"\n NULL ADDRES: "<<CreateArray->NullAddres;
}
void InitArrayMembers(){
for(int i=0;i<5000;i++){
for(int j=0;j<5000;j++){
ArrayMembers[i][j]=0;
}
}
}
void ReadArrayAddres(ArrayInformation *CreateArray){
int Addres=0,NewAddres=0;
Addres=CreateArray->NullAddres;
for(int i=0;i<CreateArray->ArrayRazmer;i++){
cout<<"\n ENTER ADDRES PARAMS: ";
cin>>NewAddres;
ChekErrors(NewAddres,i,CreateArray);
if(LookErrors==0){
Addres+=NewAddres*CreateArray->ArrayFuctorial[i];
}else{
cout<<"\n ERROR IN ENTER ADDRES ";
break;
}
}
if(LookErrors==0){
cout<<"\n ADDRES: "<<Addres;
cout<<"\n DATA: ";
for(int i=0;i<CreateArray->ArrayLenth;i++){
cout<<ArrayMembers[i][Addres];
}
}else{
cout<<"\n ";
}
}
void WriteArrayAddres(ArrayInformation *CreateArray){
int Addres=0,NewAddres=0;
Addres=CreateArray->NullAddres;
for(int i=0;i<CreateArray->ArrayRazmer;i++){
cout<<"\n ENTER ADDRES PARAMS: ";
cin>>NewAddres;
ChekErrors(NewAddres,i,CreateArray);
if(LookErrors==0){
Addres+=NewAddres*CreateArray->ArrayFuctorial[i];
}else{
cout<<"\n ERROR IN ENTER ADDRES ";
break;
}
}
if(LookErrors==0){
cout<<"\n ADDRES: "<<Addres;
cout<<"\n Enter DATA: ";
for(int i=0;i<CreateArray->ArrayLenth;i++){
cin>>ArrayMembers[i][Addres];
}
}else{
cout<<"\n ";
}
}
int _tmain(int argc, _TCHAR* argv[])
{
setlocale( LC_ALL,"Russian" );
int MenuKey=0;
ArrayInformation *CreateArray=GetArrayDesc();
//GetInformationAboutArray(CreateArray);
InitArrayMembers();
cout<<"\n ";
do{
cout<<"\n 1:Print Information 2:Read Addres 3:Write Addres 5:Exit ";
cout<<"\n ENTER COMMAND: ";cin>>MenuKey;
switch(MenuKey){
case 1: GetInformationAboutArray(CreateArray);break;
case 2: ReadArrayAddres(CreateArray);break;
case 3:WriteArrayAddres(CreateArray);break;
}
}while(MenuKey!=5);
cout<<"\n ";
system("pause");
return 0;
}