Mnożenie elementów tablicy

Mnożenie elementów tablicy
G2
  • Rejestracja:prawie 11 lat
  • Ostatnio:ponad 8 lat
  • Postów:12
0

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

Kopiuj
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.

Patryk27
Moderator
  • Rejestracja:ponad 17 lat
  • Ostatnio:ponad rok
  • Lokalizacja:Wrocław
  • Postów:13042
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

G2
  • Rejestracja:prawie 11 lat
  • Ostatnio:ponad 8 lat
  • Postów:12
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?

Patryk27
Moderator
  • Rejestracja:ponad 17 lat
  • Ostatnio:ponad rok
  • Lokalizacja:Wrocław
  • Postów:13042
0

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


G2
  • Rejestracja:prawie 11 lat
  • Ostatnio:ponad 8 lat
  • Postów:12
0

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

Kopiuj
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.

Kopiuj
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.

Patryk27
Moderator
  • Rejestracja:ponad 17 lat
  • Ostatnio:ponad rok
  • Lokalizacja:Wrocław
  • Postów:13042
1

O ASCII słyszał?


G2
  • Rejestracja:prawie 11 lat
  • Ostatnio:ponad 8 lat
  • Postów:12
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.

Patryk27
Moderator
  • Rejestracja:ponad 17 lat
  • Ostatnio:ponad rok
  • Lokalizacja:Wrocław
  • Postów:13042
1

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


bogdans
Liczba 9 ma wartość ASCII 9, chodziło Ci zapewne o wartość ASCII cyfry 9.
G2
  • Rejestracja:prawie 11 lat
  • Ostatnio:ponad 8 lat
  • Postów:12
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?

_13th_Dragon
  • Rejestracja:ponad 19 lat
  • Ostatnio:około 15 godzin
0
Kopiuj
tablica[1][licz_liczb]=w[k]-'0';

Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
G2
  • Rejestracja:prawie 11 lat
  • Ostatnio:ponad 8 lat
  • Postów:12
0

Kiedy dodaje to

Kopiuj
-'0';

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

_13th_Dragon
  • Rejestracja:ponad 19 lat
  • Ostatnio:około 15 godzin
0

Kryształowa kula wskazuje że nie tam dodajesz.


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
G2
  • Rejestracja:prawie 11 lat
  • Ostatnio:ponad 8 lat
  • Postów:12
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.

_13th_Dragon
  • Rejestracja:ponad 19 lat
  • Ostatnio:około 15 godzin
0

Tam gdzie masz dokładnie taki sam wiersz bez

Kopiuj
-'0'

Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
G2
  • Rejestracja:prawie 11 lat
  • Ostatnio:ponad 8 lat
  • Postów:12
0

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

Kopiuj
#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");
		
	} 
edytowany 1x, ostatnio: gracz244
Patryk27
Wróć, w ogóle to co piszesz i dlaczego nie skorzystasz z ONP?
G2
Bo wole stworzyć coś swojego a nie przepisać cały program z książki.
Patryk27
No to nie przepisuj programu z książki, tylko zaimplementuj ONP po swojemu. Wymyślanie koła od nowa nie ma sensu.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.