Oppure

Loading
07/10/09 18:38
edo42
Ho un problema: un un array multidimensionale e devo assegnarli un valore; mi riesco forse a spiegare meglio con la riga di codice in cui ho il problema:
temparrayden[indexarray][indexden[indexarray] - 1] += input[indexenumerator];

temparrayden è il mio array multidimensionale; indexden è un array mono di interi in cui devo selezionare l'array che sto modificando. indexarray è il mio indice per selezionare uno tra i vari array e tutti i suoi corrispondenti input è una stringa dove è contenuto l'imput dell'utente, indexenumerator è un indice che mi serve per poter scegliere carattere per carattere la stringa. Quando compilo tutto ok ma quando eseguo g++ su mac mi dice:
unable to read unknown load command 0x80000022 ripetuto una ventina di volte e poi si ferma e segnala una pausa per eccesso di errori su quella linea. Potete risolvere il mio problema grazie.
aaa
07/10/09 19:22
NickoMaiden
temparrayden[indexarray][[b]indexden[indexarray] - 1][/b] += input[indexenumerator]; 


credo che l'errore sia li.
se gli dai un vettore [indexden[indexarray] - 1] forse va oltre la dimensione massima stabilita nella dichiarazione
cmq posta tutto il codice, magari l'errore è un altro
aaa
08/10/09 15:58
edo42
Il codice che interessa completo è questo:
//1.1.4.5 Modificate varie cose tra cui la prima parte di riorganizzazione e conversione agli array multidimensionali
       	//Inizializzo variabili e array
       	bool riduci = true;
		//1.1.4.0 Serve per attivare una funzione che corregge un bug matematico
		//1.1.4.5 variabili globali
       	bool numactive = false;
       	bool denactive = false;
		//variabili ed array riferiti a una singola parentesi
		//operatori
		string tempoperator [20][50];
		int indexoperator [20];
		for(int f = 0; f < 20; f++) indexoperator[f] = 0;
		//numeratori
       	string temparraynum [20][100];
		int indexnum[20];
		for(int f = 0; f < 20; f++) indexnum[f] = 0;
		//denominatori
       	string temparrayden [20][100];
		int indexden[20];
		for(int f = 0; f < 20; f++) indexnum[f] = 0;
		//1.1.4.5 Aggiunto indice per chiamare uno degli array qui sopra
		int indexarray = 0;
		//1.1.4.5 Aggiunto array per identificare gli array da risolvere per primi
		int firstarray [20];
		for(int f = 0; f < 20; f++) firstarray[f] = 0;
		// Scrivo l'altro messaggio console
       	cout << "Inserire l'espressione (è necessario scrivere le frazioni in questo modo: es. 1|2) e premere invio, oppure scrivere fine per chiudere il programma." << endl;
       	string input;
		cin >> input;
		//1.1.4.5 For debug only
		if(input == "t")
		{
			input = "13|3-{2|3+[(4|3-1|5-12|5)*3|4*(5|4-1|2-1|12)]*(7|5+2|1)}*5|37";
		}
		if(input == "fine")
		{
			return 1;
		}
       	// Divido caratteri e elaboro gli elaboro per individuare i numeratore, i denominatori, gli operatore e (1.1.3.0) le parentesi
       	for (int indexenumerator = 0; indexenumerator < input.size(); indexenumerator++)
       	{
       		switch (input[indexenumerator])
       		{
       			// Se il carattere corrente è un numero...
				case '1':
				case '2':
				case '3':
				case '4':
				case '5':
				case '6':
				case '7':
				case '8':
				case '9':
				case '0':
       			{
					// individuo di che cosa fa parte il numero
					if (numactive == true && denactive == false)
					{
						//1.1.4.5 Usato += e migliorato codice
						// se è un numeratore lo inserisco nell'array dei numeratori
						--indexnum[indexarray];
						temparraynum[indexarray][indexnum[indexarray]] += input[indexenumerator];
						++indexnum[indexarray];
					}
					else if (numactive == false && denactive == false)
					{
						// se è il primo numero letto è sicuramente un numeratore per cui lo metto nell'array dei numeratori
						temparraynum[indexarray][indexnum[indexarray]++] = input[indexenumerator];
						numactive = true;
					}
					else if (numactive == false && denactive == true)
					{
						// se c'è appena stata una linea di frazione, questa cifra è sicuramente il denominatore
						// 1.1.4.0 Migliorato codice
						temparrayden[indexarray][indexden[indexarray] - 1] += input[indexenumerator];
						denactive = true;
					}
					break;
       			}
       			case '|':
       			{
       				// se trovo una linea di frazione predispongo le variabili in modo che il prossimo numero si riconosciuto come un denominatore
       				numactive = false;
       				denactive = true;
       				indexden[indexarray]++;
       				break;
       			}
       			case '+':
       			{
       				// se trovo un + vorrà dire che questa operazione sarà un addizione
       				tempoperator[indexoperator[indexarray]++][indexarray] = "+";
       				denactive = false;
       				numactive = false;
       				riduci = false;
       				break;
       			}
       			case '-':
       			{
       				// se trovo un - vorrà dire che questa operazione sarà un sottrazione
       				tempoperator[indexoperator[indexarray]++][indexarray] = "-";
       				denactive = false;
       				numactive = false;
       				riduci = false;
       				break;
       			}
       			case '*':
       			{
       				// se trovo un * vorrà dire che questa operazione sarà un moltiplicazione
       				tempoperator[indexoperator[indexarray]++][indexarray] = "*";
       				denactive = false;
       				numactive = false;
       				riduci = false;
       				break;
       			}
       			case '/':
       			{
       				// se trovo un / vorrà dire che questa operazione sarà un divisione
       				tempoperator[indexoperator[indexarray]++][indexarray] = "/";
       				denactive = false;
       				numactive = false;
       				riduci = false;
       				break;
       			}
       			case '(':
       			{
					//1.1.4.5 inserisco nell'arraynum corrente x + il numero dell'array seguente
					temparraynum[indexnum[indexarray++]++][indexarray] = ("x"+Tostring(indexarray+1));
					firstarray[indexarray] = 3;
       				break;
       			}
       			case ')':
       			{
					//1.1.4.5 qui diminuisco l'indice in modo da 
       				indexarray--;
       				break;
       			}
				case '[':
       			{
					//1.1.4.5 inserisco nell'arraynum corrente x + il numero dell'array seguente
					temparraynum[indexnum[indexarray++]++][indexarray] = ("x"+Tostring(indexarray+1));
					firstarray[indexarray] = 2;
       				break;
       			}
       			case ']':
       			{
					//1.1.4.5 qui diminuisco l'indice in modo da 
       				indexarray--;
       				break;
       			}
				case '{':
       			{
					//1.1.4.5 inserisco nell'arraynum corrente x + il numero dell'array seguente
					temparraynum[indexnum[indexarray++]++][indexarray] = ("x"+Tostring(indexarray+1));
					firstarray[indexarray] = 1;
       				break;
       			}
       			case '}':
       			{
					//1.1.4.5 qui diminuisco l'indice in modo da 
       				indexarray--;
       				break;
       			}
					
       		}
       	}

E' un po' lungo spero che ci capiate e che ci stia...
aaa