Mnożenie elementów tablicy

0

W moim programie potrzebuje wymnożyć elementy tablic wielowymiarowych np.

tablica[3][1]=tablica[1][p]*tablica[1][p+1];

i nie ważne jakich liczb użyję wynik zawsze wychodzi nieprawdziwy i dużo większy w czym jest problem? Dodam że tablice są typu char.

1

Mam auto.
Ostatnio wymieniłem w nim sprzęgło, lecz z kolei źle skręca, niezależnie w którą stronę nie próbuję.
W czym jest problem?
Dodam, że jest to auto koloru srebrnego.


tldr, zbyt mało danych
0

No dobra no co muszę dodać. Liczby do tych tablic wczytywane z z pliku tekstowego, w tablicy[1] są tylko liczby. W innych wymiarach są miedzy innymi znaki. Nie wiem co jeszcze może być przydatne. Ale czy taki zapis mnożenia tablic jest możliwy w ogóle czy popełniam jakiś błąd?

0

Za dużo mówisz, za mało pokazujesz.
Wrzuć jak najbardziej uproszczony kod ukazujący problem.

0

Ok wiem :) ok jest to program który zczytuje z pliku tekstowego wyrażenie:

while (!wej.eof())
			{
				wej>>w[licznik];
				licznik++;	
			}
		for(int k=1;k<licznik;k++)
			{
				switch(w[k])
					{
						case '(':
							break;
							
						case '+':
							tablica[2][licz_znakow]=w[k];
							licz_znakow++;
							break;
							
						case '-':
							tablica[2][licz_znakow]=w[k];
							licz_znakow++;
							break;
							
						case '*':
							tablica[2][licz_znakow]=w[k];
							licz_znakow++;
							break;
							
						case '/':
							tablica[2][licz_znakow]=w[k];
							licz_znakow++;
							break;
							
						case '%':
							tablica[2][licz_znakow]=w[k];
							licz_znakow++;
							break;	
							
						default:
							tablica[1][licz_liczb]=w[k];
							licz_liczb++;
							break;
					}
				
			}

No i teraz chce wykonać mnożenie np.

tablica[3][1]=tablica[1][1]*tablica[1][2];

Jeśli chodzi o dodanie do tablicy znaków to nie jest to teraz ważne bo i jest to mi potrzebne do ustalenia kolejności działań to samo z nawiasem.

1

O ASCII słyszał?

0

No okej słyszałem ale co to ma do mojego mnożenia. Jeśli wyświetlam tablice osobno to jest wszystko normalnie i odczytuje prawidłowo.

1

Zobacz, jaką wartość ASCII ma liczba np.9 i zastanów się.

0

Dobra teraz już wiem o co chodzi przy mnożeniu 23 mnoży tak naprawdę 5051 i stąd tak kosmiczne wyniki. Tylko teraz mam pytanie czy jest sposób na normalne pomnożenie tego?

0
tablica[1][licz_liczb]=w[k]-'0';
0

Kiedy dodaje to

-'0';

to przy mnożeniu liczb w wyniku pojawiają się znaczki różnego rodzaju.

0

Kryształowa kula wskazuje że nie tam dodajesz.

0

Fajna kula :) Ale to gdzie mam dodać przy mnożeniu czy wyświetlaniu wyniku a może gdzieś indziej? A gdy dodaje tam gdzie pokazałeś to efektem są znaczki.

0

Tam gdzie masz dokładnie taki sam wiersz bez

-'0'
0

Dobra mam coś takiego gdzieś jeszcze potrzebuje dodać?

#include <iostream>
#include <cstdlib>
#include <fstream>
using namespace std;

int main()
	{
		int znak=1;
		int kolejnosc=1;
		int a=1,b,c;
		int licz_liczb=1;
		int licz_znakow=1;
		int licznik=1;
		char w[2000];
		double wynik;
		char tablica[6][200];
		ifstream wej("dane_wyr.txt");
		ofstream wyj("wynik_wyr.txt");
		while (!wej.eof())
			{
				wej>>w[licznik];
				licznik++;	
			}
		for(int k=1;k<licznik;k++)
			{
				switch(w[k])
					{
						case '(':
							break;
							
						case '+':
							tablica[2][licz_znakow]=w[k];
							licz_znakow++;
							break;
							
						case '-':
							tablica[2][licz_znakow]=w[k];
							licz_znakow++;
							break;
							
						case '*':
							tablica[2][licz_znakow]=w[k];
							licz_znakow++;
							break;
							
						case '/':
							tablica[2][licz_znakow]=w[k];
							licz_znakow++;
							break;
							
						case '%':
							tablica[2][licz_znakow]=w[k];
							licz_znakow++;
							break;	
							
						default:
							tablica[1][licz_liczb]=w[k]-'0';
							licz_liczb++;
							break;
					}
				
			}
		for(int p=1;p<licz_znakow;p++)
			{
						switch(tablica[2][p])
							{
								case '+':
									tablica[3][p]=tablica[1][kolejnosc];
									tablica[4][znak]=tablica[2][p];
									znak++;
									kolejnosc++;
									
									break;
									
								case '-':
									tablica[3][p]=tablica[1][kolejnosc];
									tablica[4][znak]=tablica[2][p];
									znak++;
									kolejnosc++;	
									break;
										
								case '*':
									tablica[3][1]=tablica[1][kolejnosc]*tablica[1][kolejnosc+1];
									kolejnosc+=2;
								
									break;
									//narazie dla testów zrobione tylko dla mnożenia
						
							}
						
					
			}
			
		cout<<tablica[3][1];	//Sprawdzenie dokładności
		cout<<endl;
		system("pause");
		
	} 

1 użytkowników online, w tym zalogowanych: 0, gości: 1