Wytłumaczenie kodu schematu Hornera

0

Hej, potrzebuje pomocy, a dokładniej wytłumaczenia jak dany kod działa. Próbowałem się doinformować dosłownie wszędzie, ale niestety nadal nic. Najlepiej jakby ktoś wytłumaczył go z góry na dół. Z góry dziękuje.

#include <iostream>
#include <string>

using namespace std;

main()
{
  string s;
  int a,b,c,d;
  char z[1];

  cout <<"Wypisz b (2-9) = ";
  cin >> b;
  cout << "Wypisz dana liczbe    = ";
  cin >> s;
  c = s[0] - int('0');
  for(a = 1; a < s.length(); a++)
  {
    c = s[a] - int('0');
    c = c * b + d;
  }
  cout << "Liczba " << s << "(" << b << ") = " << c << "(10)";
}
0

@lion137: Trochę ciężko

0

@tehawi:
Na moje oko, Twój kod nie będzie działał. Zamień wewnątrz pętli:

c = s[a] - int('0');

na

d = s[a] - int('0');

Po co Ci char z[1]?

0

@GutekSan: Właśnie przed wrzuceniem tego posta skapnąłem się i usunąłem charz z[1].

0

@tehawi: poprosiłem Cię o sformatowanie, żeby się dało dojść czy to działa, potem można się zabrać za tłumaczenie.

0

A co w tym rozumiesz?

0

Poprawny kod:

#include <iostream>
#include <string>
using namespace std;

int main()
{
	int base;
	cout<<"Podaj b (2-10): ";
	cin>>base;
	if((2<=base)&&(base<=10))
	{
		cout<<"Podaj liczbe: ";
		string value;
		cin>>value;
		int decimal=0;
		for(int i=0;i<value.length();++i)
		{
			int add=(value[i]-'0');
			if((0<=add)&&(add<base)) decimal=decimal*base+add;
			else
			{
				cout<<add<<" nie jest cyfra systemu "<<base<<endl;
				return 1;
			}
		}
		cout<<"Liczba "<<value<<"("<<base<<") = "<<decimal<<"(10)"<<endl;
		return 0;
	}
	else cout<<"Nie obslugiwana podfstawa systemu"<<endl;
	return 1;
}

Załóżmy że podano 987 w systemie 10.
Pierwotnie: decimal=0;
1 cykl petli: add=9; decimal=0*10+9; // =9
2 cykl petli: add=8; decimal=9*10+8; // =98
3 cykl petli: add=7; decimal=98*10+7; // =987

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