Zamiana C na C++

0

Witam mam problem z zamianą tego programu z C na C++. Czy mogła bym prosić o pomoc

#include <conio.h>
#include <stdio.h>
#include <stdlib.h>

int main()
{
	double *W[2],*G[2],*wynik;
	int stopien1,stopien2,stopienMAX;
	int max;
	int menu;
	
	for(;;)
	{
		printf("\n            MENU\n");
		printf("1.) - Dodawanie wielomianow\n");
		printf("2.) - Odejmowanie wielomianow\n");
		printf("3.) - Mnozenie wielomianow\n");
		printf("4.) - Pochodna z wielomiana\n");
		printf("5.) - Calka z wielomiana\n");
		printf("0.) - Wyjscie\n\n");
		scanf("%d",&menu);
		switch(menu)
		{
		case 1 :
		case 2 :
			{
				printf("\nPodaj stopien pierwszego wielomiana: ");
				scanf("%d",&stopien1);
				printf("\nPodaj stopien drugiego wielomiana: ");
				scanf("%d",&stopien2);
				stopien1++;
				stopien2++;
				if(stopien1>stopien2) {
					wynik = (double*) malloc(sizeof(double)*(stopien1));
					stopienMAX=stopien1;
					max=0;
				}else{
					wynik = (double*) malloc(sizeof(double)*(stopien2));
					stopienMAX=stopien2;
					max=1;
				}	
			
				W[0] = (double*) malloc(sizeof(double)*(stopien1));
				W[1] = (double*) malloc(sizeof(double)*(stopien1));
				G[0] = (double*) malloc(sizeof(double)*(stopien2));
				G[1] = (double*) malloc(sizeof(double)*(stopien2));


				for(unsigned int i = 0; i < stopien1 ; i++)
				{
					printf("\nPodaj %d wspolczynnik pierwszego wielomiana: ",i+1);
					scanf("%lf",&W[0][i]);
					W[1][i]=stopien1-i;
				}

				for(unsigned int  i = 0; i < stopien2 ; i++)
				{
					printf("\nPodaj %d wspolczynnik drugiego wielomiana: ",i+1);
					scanf("%lf",&G[0][i]);
					G[1][i]=stopien2-i;
				}
			
				printf("\n\n W(x) = ");	
				for(unsigned int i = 0; i < stopien1 ; i++)
				{
					if(W[0][i]!=0)
					{
						if(W[0][i]>0 && i!=0)
							printf("+");
						if(stopien1-i-1!=0)
							printf("%3.1lfx^%d ",W[0][i],stopien1-i-1);	
						else
							printf("%3.1lf",W[0][i]);	
					}
				}
			
				printf("\n\n G(x) = ");	
				for(unsigned int i = 0; i < stopien2 ; i++)
				{
					if(G[0][i]!=0)
					{
						if(G[0][i]>0 && i!=0)
							printf("+");
						if(stopien2-i-1!=0)
							printf("%3.1lfx^%d ",G[0][i],stopien2-i-1);	
						else
							printf("%3.1lf",G[0][i]);	
					}
				}	
				int k = 0;
				int l = 0;

				for(unsigned int i = 0; i < stopienMAX; i++ )
				{
					if(W[1][k]==G[1][l]){
						if(menu == 1)
							wynik[i] = W[0][k] + G[0][l];
						else
							wynik[i] = W[0][k] - G[0][l];

						k++;
						l++;
					} else if(W[1][k] > G[1][l]){
						wynik[i] = W[0][l];
						k++;
					} else if(W[1][k] < G[1][l]){
						wynik[i] = G[0][l];
						l++;
					}
				}

				printf("\n\n wynik(x) = ");	
				for(unsigned int i = 0; i < stopienMAX ; i++)
				{
					if(wynik[i]!=0)
					{
						if(wynik[i]>0 && i!=0)
							printf("+");
						if(stopienMAX-i-1!=0)
							printf("%3.1lfx^%d ",wynik[i],stopienMAX-i-1);	
						else
							printf("%3.1lf",wynik[i]);	
					}
				}	
				printf("\n");	
				_getch();
			}
			break;
		case 3 :
			{
				printf("\nPodaj stopien pierwszego wielomiana: ");
				scanf("%d",&stopien1);
				printf("\nPodaj stopien drugiego wielomiana: ");
				scanf("%d",&stopien2);
				stopien1++;
				stopien2++;
				if(stopien1>stopien2) {
					wynik = (double*) malloc(sizeof(double)*(stopien1));
					stopienMAX=stopien1;
					max=0;
				}else{
					wynik = (double*) malloc(sizeof(double)*(stopien2));
					stopienMAX=stopien2;
					max=1;
				}	
			
				W[0] = (double*) malloc(sizeof(double)*(stopien1));
				W[1] = (double*) malloc(sizeof(double)*(stopien1));
				G[0] = (double*) malloc(sizeof(double)*(stopien2));
				G[1] = (double*) malloc(sizeof(double)*(stopien2));
				wynik = (double*) malloc(sizeof(double)*(stopien2+stopien1));
				for(int i=0;i<stopien1+stopien2;i++)
				{
					wynik[i] = 0;
				}
				
				double *temp[2];
				temp[0] = (double*)malloc(sizeof(double)*stopien1*stopien2);
				temp[1] = (double*)malloc(sizeof(double)*stopien1*stopien2);

				for(unsigned int i = 0; i < stopien1 ; i++)
				{
					printf("\nPodaj %d wspolczynnik pierwszego wielomiana: ",i+1);
					scanf("%lf",&W[0][i]);
					W[1][i]=stopien1-i;
				}

				for(unsigned int  i = 0; i < stopien2 ; i++)
				{
					printf("\nPodaj %d wspolczynnik drugiego wielomiana: ",i+1);
					scanf("%lf",&G[0][i]);
					G[1][i]=stopien2-i;
				}
			
				printf("\n\n W(x) = ");	
				for(unsigned int i = 0; i < stopien1 ; i++)
				{
					if(W[0][i]!=0)
					{
						if(W[0][i]>0 && i!=0)
							printf("+");
						if(stopien1-i-1!=0)
							printf("%3.1lfx^%d ",W[0][i],stopien1-i-1);	
						else
							printf("%3.1lf",W[0][i]);	
					}
				}
			
				printf("\n\n G(x) = ");	
				for(unsigned int i = 0; i < stopien2 ; i++)
				{
					if(G[0][i]!=0)
					{
						if(G[0][i]>0 && i!=0)
							printf("+");
						if(stopien2-i-1!=0)
							printf("%3.1lfx^%d ",G[0][i],stopien2-i-1);	
						else
							printf("%3.1lf",G[0][i]);	
					}
				}
				int licznik=0;
				for(int i=0;i<stopien1;i++)
				{
					for(int j=0;j<stopien2;j++)
					{
						temp[0][licznik]=W[0][i]*G[0][j];
						temp[1][licznik]=W[1][i]+G[1][j];
						licznik++;
					}
				}
				for(int i=0;i<stopien1*stopien2;i++)
				{
					int cos=temp[1][i]-1;
					wynik[cos] += temp[0][i];
				}
				
				printf("\n\n wynik(x) = ");	
				for(int i = stopien2+stopien1-1; i > 0 ; i--)
				{
					if(wynik[i]!=0)
					{
						if(wynik[i]>0 && i!=0)
							printf("+");
						if(i-1!=0)
							printf("%3.1lfx^%d ",wynik[i],i-1);	
						else
							printf("%3.1lf",wynik[i]);	
					}
				}	
				printf("\n");	
				_getch();
			}break;
		case 4 :
			printf("\nPodaj stopien pierwszego wielomiana: ");
				scanf("%d",&stopien1);
				stopien1++;
				wynik = (double*) malloc(sizeof(double)*(stopien1));
				
				W[0] = (double*) malloc(sizeof(double)*(stopien1));
				W[1] = (double*) malloc(sizeof(double)*(stopien1));
				wynik = (double*) malloc(sizeof(double)*(stopien1));
				for(int i=0;i<stopien1;i++)
				{
					wynik[i] = 0;
				}

				for(unsigned int i = 0; i < stopien1 ; i++)
				{
					printf("\nPodaj %d wspolczynnik wielomianu: ",i+1);
					scanf("%lf",&W[0][i]);
					W[1][i]=stopien1-i;
				}

				printf("\n\n W(x) = ");	
				for(unsigned int i = 0; i < stopien1 ; i++)
				{
					if(W[0][i]!=0)
					{
						if(W[0][i]>0 && i!=0)
							printf("+");
						if(stopien1-i-1!=0)
							printf("%3.1lfx^%d ",W[0][i],stopien1-i-1);	
						else
							printf("%3.1lf",W[0][i]);	
					}
				}
			
				for(int i=0;i<stopien1;i++)
				{
					wynik[i]=W[1][i]*W[0][i];
				}
				printf("\n\n wynik(x) = ");	
				for(int i = stopien1-1; i > 0 ; i--)
				{
					if(wynik[stopien1-i]!=0)
					{
						if(wynik[stopien1-i]>0 && i!=0)
							printf("+");
						if(i-1!=0)
							printf("%3.1lfx^%d ",wynik[stopien1-i],i-1);	
						else
							printf("%3.1lf",wynik[stopien1-i]);	
					}
				}	
				printf("\n");	
				_getch();
			break;
		case 5 :
			printf("\nPodaj stopien pierwszego wielomiana: ");
				scanf("%d",&stopien1);
				stopien1++;
				wynik = (double*) malloc(sizeof(double)*(stopien1));
				
			
			
				W[0] = (double*) malloc(sizeof(double)*(stopien1));
				W[1] = (double*) malloc(sizeof(double)*(stopien1));
				wynik = (double*) malloc(sizeof(double)*(stopien1));
				for(int i=0;i<stopien1;i++)
				{
					wynik[i] = 0;
				}
				
			

				for(unsigned int i = 0; i < stopien1 ; i++)
				{
					printf("\nPodaj %d wspolczynnik wielomianu: ",i+1);
					scanf("%lf",&W[0][i]);
					W[1][i]=stopien1-i;
				}

				printf("\n\n W(x) = ");	
				for(unsigned int i = 0; i < stopien1 ; i++)
				{
					if(W[0][i]!=0)
					{
						if(W[0][i]>0 && i!=0)
							printf("+");
						if(stopien1-i-1!=0)
							printf("%3.1lfx^%d ",W[0][i],stopien1-i-1);	
						else
							printf("%3.1lf",W[0][i]);	
					}
				}
			
			
				for(int i=0;i<stopien1;i++)
				{
					wynik[i]=W[0][i]/(W[1][i]);
				}
				printf("\n\n wynik(x) = ");	
				for(int i = stopien1+1; i > 0 ; i--)
				{
					if(i==1)
					{
						printf(" +C",W[0][stopien1]);
					}
					else if(wynik[stopien1-i+1]!=0)
					{
						if(wynik[stopien1+1-i]>0 && i!=0)
							printf("+");
						printf("%3.1lfx^%d ",wynik[stopien1+1-i],i-1);
					}
				}	
				printf("\n");	
				_getch();
			break;
		case 0 :
			printf("\nZegnam !\n\n");
			_getch();
			return 0;
			break;
		default :
			printf("\nERROR - Bledna wartosc !\n\n");
			_getch();
		}
			printf("\n\n\n");
	}
}
0

Ale co zmieniać? Zasadniczo całość kodu, która jest w C jest prawidłowym kodem C++. Może trzeba by zmienić nagłówki tylko.

Ten potwór, który jest tutaj wklejony, jest do całkowitego przepisania imo, ale nie dlatego, że "to nie C++".

0

Czyli tak może wyglądać to po zmianie?

#include <iostream>
#include <conio.h>

using namespace std;

int main()
{
double *W[2],*G[2],*wynik;
int stopien1,stopien2,stopienMAX;
int max;
int menu;

for(;;)
{
	cout << "\n		 MENU\n";
	cout << "1 - Dodawanie wielomianow\n";
	cout << "2 - Odejmowanie wielomianow\n";
	cout << "3 - Mnozenie wielomianow\n";
	cout << "4 - Pochodna z wielomianu\n";
	cout << "5 - Calka z wielomianu\n";
	cout << "0 - Wyjscie\n\n";
	cin >> menu;
	switch(menu)
	{
	case 1 :
	case 2 :
		{
			cout << "\nPodaj stopien pierwszego wielomianu: ";
			cin >> stopien1;
			cout << "\nPodaj stopien drugiego wielomianu: ";
			cin >> stopien2;
			stopien1++;
			stopien2++;
			if(stopien1>stopien2) 
			{
				wynik =new double [stopien1];
				stopienMAX=stopien1;
				max=0;
			}
			else
			{
				wynik =new double [stopien2];

				stopienMAX=stopien2;
				max=1;
			}	
		
			W[0] = wynik = double[stopien1];
			W[1] = wynik = double[stopien1];

			G[0] = wynik = double[stopien2];
			G[1] = wynik = double[stopien2];


			for(unsigned int i = 0; i < stopien1 ; i++)
			{
				cout << "\nPodaj" << i+1 << "wspolczynnik pierwszego wielomianu: ";
				cin >> W[0][i];
				W[1][i]=stopien1-i;
			}

			for(unsigned int  i = 0; i < stopien2 ; i++)
			{
				cout << "\nPodaj " << i+1 <<" wspolczynnik drugiego wielomianu: ";
				cin >> G[0][i];
				G[1][i]=stopien2-i;
			}
		
			cout << "\n\n W(x) = ";	
			for(unsigned int i = 0; i < stopien1 ; i++)
			{
				if(W[0][i]!=0)
				{
					if(W[0][i]>0 && i!=0)
						cout << "+";
					if(stopien1-i-1!=0)
						cout << W[0][i]<<"x^"<<stopien1-i-1;
					else
						cout << W[0][i];	
				}
			}
		
			cout << "\n\n G(x) = ";	
			for(unsigned int i = 0; i < stopien2 ; i++)
			{
				if(G[0][i]!=0)
				{
					if(G[0][i]>0 && i!=0)
						cout << "+";
					if(stopien2-i-1!=0)
						cout << W[0][i]<<"x^"<<stopien2-i-1;
					else
						cout << W[0][i];					}
			}	
			int k = 0;
			int l = 0;

			for(unsigned int i = 0; i < stopienMAX; i++ )
			{
				if(W[1][k]==G[1][l])
				{
					if(menu == 1)
						wynik[i] = W[0][k] + G[0][l];
					else
						wynik[i] = W[0][k] - G[0][l];

					k++;
					l++;
				} else if(W[1][k] > G[1][l])
				{
					wynik[i] = W[0][l];
					k++;
				} else if(W[1][k] < G[1][l])
				{
					wynik[i] = G[0][l];
					l++;
				}
			}
0

A to już wiem jak kombinować, a na jakąś pomoc przy robieniu do tego schematu blokowego mogę liczyć

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