Obliczenie Pola Figury

0

Hej :) Zaczynam dopiero programować, więc proszę o wyrozumiałość :) Mam napisać program, który bd z współrzędnych obliczał mi pola figury, dodatkowo ma to być na tablicy dwuwymiarowej - chodzi by w pliku tekstowym było 1,4 i pod tym kolejna współrzędna.
Z jakiegoś powodu po włączeniu programu, automatycznie przechodzi do ostatniej linii. Za pewne chodzi o jakąś głupotę, ale nie widzę błędu. Dodatkowo, jezeli ktoś zauważy coś co w ogóle nie powinno mieć miejsca w kodzie to proszę o wskazanie mi tego. Z góry dzięki : )

 
#include <iostream>
#include <fstream>
#include <math.h>
#include <cstdlib>
#include <string>
#define TAB "\t"
#define Dane "punkty.txt" // Sciezka pliku do odczytu - wspolrzedne
#define Obliczenia "wynik.txt" // Sciezka pliku do zapisu wyniku obliczenia 
#define exit() system("cls")  // Koniec programu

using namespace std;
#define M_PI 3.14159265358979323846
const int rozmiar = 20; //Rozmiar tablicy dwuwymiarowej


ofstream Wynik(Obliczenia); //
int i,j, punkty;
double w0=0, w1 = 0;
double suma = 0;
double zero = 0;
char znak  [5];
int main() {
	
	ifstream dane(Dane, ios::in); // Ustawiam, ze plik ma zostac odczytany
	
	int liczbaPunktow, n = 0;
	double tabN[rozmiar];
	double tabX[rozmiar], tabY[rozmiar]; // tablica dla wspolrzednych punktow 
	string linia; 
	
	if(dane, (getline(dane, linia, ',') || getline(dane, linia, '\n'))){   	
				// Otwarcie pliku, odczyt danych
		for(i = 0; i < 4; i++){
			for(j = 0; j < 4; j++)
			
			cin >> tabX[i], tabY[j]; // wczytanie wspolrzednych do tablicy
			}		
		
		} else{
				cout<<"Brak pliku" << endl; // sprawdz lokalizacje pliku
			  }
	if(liczbaPunktow = !8){
		cout<< "Brak wszystkich parametrow" <<endl; //brak wszystkich punktow, badz wspolrzednych w pliku z Danymi - (x,y)
	} 
	 tabN[0]=tabN[n]; 
    tabX[0]=tabX[n]; tabY[0]=tabY[n];
    tabN[n+1]=tabN[1]; tabX[n+1]=tabX[1]; tabY[n+1]=tabY[1];
    
	 
    cout << "\nObliczenie " << zero << endl;
    cout << "Pole: " << znak <<  "  Ilosc punktow: " << n <<  endl;    
    cout << "\nWykaz punktow:" << endl;
    cout << "Lp    Nr      X       Y " << endl; 
    
	
    Wynik << "Obliczenie " << zero << endl;
	Wynik << "Pole: " << znak <<  "  Ilosc punktow: " << n <<  endl;    
    Wynik << "\nWykaz punktow: " << endl;
    Wynik << "Lp    Nr      X       Y " << endl; 
    
    for(int i=1; i<=n; i++ )
    { 
    
     cout << i <<  TAB << tabN[i] << TAB << tabX[i] << TAB << tabY[i] << endl;
	 Wynik << i <<  TAB << tabN[i] << TAB << tabX[i] << TAB << tabY[i] << endl;     
	    
     //s1+=tabX[i]*(tabY[i+1]-tabY[i-1]);
     //s2+=tabY[i]*(tabX[i+1]-tabX[i-1]);
    
	
	
}
}

1
  1. zapoznaj się z pojęciem formatowania kodu: http://4programmers.net/Forum/998482
  2. zapoznaj się z inkrementacją bo jej nie rozumiesz: http://4programmers.net/Forum/1101404
  3. Po kiego masz rozmiar tablicy ustawiony na 20 zaś wczytujesz do 4-ch?
  4. Masz niezainicjalizowaną zmienną liczbaPunktow czyli ze śmieciami, nagle ni z tego ni z owego sprawdzasz: if(liczbaPunktow = !8), WTF?
    $ Gdzie masz jakiekolwiek obliczenia?
0

Poprawiłem trochę kod, lecz nadal z pliku nie pobiera mi współrzędnych.
Mam nadzieję, że teraz kod jest czytelniejszy :)

 
#include <iostream>
#include <fstream>
#include <math.h>
#include <cstdlib>
#include <string>
#include <conio.h>
#define TAB "\t"
#define Dane "punkty.txt" // Sciezka pliku do odczytu - wspolrzedne
#define Obliczenia "wynik.txt" // Sciezka pliku do zapisu wyniku obliczenia 
#define exit() system("cls")  // Koniec programu

using namespace std;
#define M_PI 3.14159265358979323846
const int rozmiar = 4; //Rozmiar tablicy dwuwymiarowej


ofstream Wynik(Obliczenia); //
int i,j;
double w0=0, w1 = 0;
double zero = 0;
char znak  [5];

int main() {
	
	ifstream dane(Dane, ios::in); // Ustawiam, ze plik ma zostac odczytany
	
	
 
	int n;
	
	double tabN[rozmiar];
	double tabX[rozmiar], tabY[rozmiar]; // tablica dla wspolrzednych punktow 
	dane >> n;
	
	//cout << dane << endl;
	
	
				// Otwarcie pliku, odczyt danych
		for(i = 1; i <= n; ++i)
			{
				dane >> tabN[i];
				dane >> tabX[i] >> tabY[i]; // wczytanie wspolrzednych do tablicy
			}		
			
					  
	tabN[0]=tabN[n]; 
    tabX[0]=tabX[n]; tabY[0]=tabY[n];
    tabN[n+1]=tabN[1]; tabX[n+1]=tabX[1]; tabY[n+1]=tabY[1];
    
	 
    cout << "\nObliczenie " << zero << endl;
    cout << "Pole: " << znak <<  "  Ilosc punktow: " << n <<  endl;    
    cout << "\nWykaz punktow:" << endl;
    cout << "Lp    Nr      X       Y " << endl; 
    
	
    Wynik << "Obliczenie " << zero << endl;
	Wynik << "Pole: " << znak <<  "  Ilosc punktow: " << n <<  endl;    
    Wynik << "\nWykaz punktow: " << endl;
    Wynik << "Lp    Nr      X       Y " << endl; 
    
    for(int h = 1; h <= n; h++ )
    { 
    
     cout << h <<  TAB << tabN[h] << TAB << tabX[h] << TAB << tabY[h] << endl;
	 Wynik << h <<  TAB << tabN[h] << TAB << tabX[h] << TAB << tabY[h] << endl;     
	    
     w0+=tabX[i]*(tabY[i+1]-tabY[i-1]);
     w1+=tabY[i]*(tabX[i+1]-tabX[i-1]);
    
	
	
	}
}
0
  1. Nadal masz bajzel z formatowaniem, patrz komentarz do tego: http://4programmers.net/Forum/998482
  2. Co to za dziwoląg? ofstream Wynik(Obliczenia); // może co miałeś na myśli?
  3. Nie pilnujesz przepełnienia tablic
  4. Czemu nie użyjesz struktury?
  5. Czym są zero i znak które tak namiętnie wyświetlasz bez inicjalizacji?

Może weź zacznij od pierwszych kilku stron byle kursu, bo podstawy podstaw trzeba jakoś łyknąć.

0

Dziękuję za wnikliwe spojrzenie na mój kod :) No cóż masz rację trzeba się cofnać w takim razie. Kwestia jest tego, że wykładowca na uczelni totalnie niczego nie objaśnia tylko robi livecoding i w ciągu jednego wykładu wrzuca taką ilość informacji, że nie rozuemiem go totoalnie. No cóż, Videokurs z c już ściągam tak, że czeka mnie kilka nocy nie przespanych :)

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.