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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.12.2010, 22:57   #1
CodeNOT
Форумчанин
 
Аватар для CodeNOT
 
Регистрация: 08.11.2010
Сообщений: 593
По умолчанию Дескриптор массива

Добрый день, пишу дескриптор массива, и возникла проблема, что когда я пытаюсь записать значение по адресу, то у меня после записывания это значение лежит во всех адресах, а это не верно, не могли бы указать, в чем лажанул. Двумерный массив :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;
}
CodeNOT вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
OpenProcess не возвращает дескриптор :(((( exclu$ive Win Api 4 20.01.2014 07:46
Получить дескриптор дочернего окна Crudelis Win Api 1 15.10.2010 21:45
дескриптор jar Legion8081 Общие вопросы по Java, Java SE, Kotlin 1 12.07.2010 02:10
Дескриптор окна DeFace Win Api 10 11.10.2009 16:52
Из за чего пишет неверный дескриптор AquaKlaster Общие вопросы Delphi 9 12.09.2009 16:23