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 :)

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