Uporządkowanie kodu(przejżystość)

0

Witam kolegów forumowiczów :)
Mam następujący problem, miałem napisać program, który będzie obliczał iloczyn skalarny wektorów oraz liczył ich przestrzeń eukliesową? (odległość między końcami punktów) do 10 przestrzeni. Program udało mi się napisać, działa poprawnie tylko zastanawiam się w jaki sposób go uporządkować?

 #include <iostream>
#include <stdio.h>
#include <math.h>
#include <conio.h>
using namespace std;
void odleglosc(int n, int tab1[], int tab2[]);

int main()
{
    int n;
    int tab1[10];
    int tab2[10];
    odleglosc(n,tab1,tab2);
    printf("\n\n\n");
    return 0;

}

void odleglosc(int n, int tab1[], int tab2[]){
    int i;
    cout<<"Podaj ilosc wymiarow zakres (1-10)"<<endl;
   	cin>>n;
    while(n<=0 || n>10){
        cout<<"Niepoprawna liczba wymiarów"<<endl;
       cout<<"Podaj poprawaną ilość wymiarow  dzialac zakres (1-10) "<<endl;
    	cin>>n;
    }
    cout<<"Podaj wspolrzedne pierwszego wektora: "<<endl;
        for (i = 1; i <= n; i++) {
              cout << "Liczba nr: " << i << " = ";
              cin  >> tab1[i];
        }
    cout<<"Podaj wspolrzedne drugiego wektora: "<<endl;
        for (i = 1; i <= n; i++) {
              cout << "Liczba nr: " << i << " = ";
              cin  >> tab2[i];
        }
    float d=0;
    for(i=1;i<=n;i++){
        d+=pow(((tab1[i]-tab2[i])),2);
    }
    float s=0;
    for(i=1;i<=n;i++){
        s+=(tab1[i]*tab2[i]);
    }
    cout<<"Odleglosc wynosi: "<<sqrt(d)<<endl;
    cout<<"Iloczyn skalarny wynosi: "<<s<<endl;
}
1
  1. Zacznij używać tablic poprawnie, czyli od indeksu 0
  2. Oddziel wprowadzenie od obliczeń.
  3. Nie powtarzaj kodu, czyli jak masz dwa jednakowe fragmenty to zamień to na dwa wywołania funkcji, np wprowadzenie tablic.
  4. Pozbądź się pow() bo to się oblicza jako exp(p*log(base)) i to zamiast najszybszej operacji w komputerze czyli przesunięcie bitowe?
  5. Funkcja ma liczyć i zwracać wartość, nie mazać po ekranie, od mazania po ekranie jest main.
2

Podziel funkcję "odleglosc" na mniejsze funkcje które wykonują jedną rzecz:

  • wczytajWektor
  • policzOdleglosc
  • policzIloczynSkalarny
    (zmień nazwę, bo nazwa "odległosc" jest nieadekwatna, na np. wykonajOperacjeNaWektorach).
    Nie nazywaj zmiennych "s", "d" tylko zgodnie z ich przeznaczeniem odleglosc, iloczynSkalarny (po angielsku wszystkie nazwy).
0

Mogą być po polsku też ;-)

0

Okey naniosłem poprawki tylko nie wiem, jak wczytać dane w osobnej funkcji,żeby program działał

0

Dokładnie jak robisz teraz, wczytujesz przecież nie w main().

0

Coś takiego?

void wczytaj_dane(){
	int n;
	cout << "Podaj ilosc wymiarow zakres (1-10)" << endl;
    cin >> n;
    while( n <= 0 || n > 10 ) {
        cout << "Niepoprawna liczba wymiarów" << endl;
        cout << "Podaj poprawaną ilość wymiarow  dzialac zakres (1-10) " << endl;
        cin >> n;
		return n;
}
 
0
 
int getDimension()

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