Zadanie z plikiem w C

0

Dzień dobry,

Mam kłopot z zadaniem domowym w języku C. Brzmi ono:

Napisz program, który dla wielokąta o wierzchołkach wczytanych z pliku podanego przez użytkownika oblicza obwód, pole i współrzędne środka ciężkości tego wielokąta. Wierzchołki zapisane są w kolejności odwrotnej do ruchu wskazówek zegara w wierszach po dwie liczby.

Wiem, że pewnie to jest proste zadanie ale dopiero w tym roku szkolnym pierwszy raz miałem do czynienia z programowaniem. Zacząłem od czegoś takiego:

char nazwa[100];
FILE* plik;
puts("Podaj nazwe pliku");
scanf("%s", nazwa);
if((plik = fopen(nazwa, "r"))==NULL){
  printf("Blad %s", nazwa);
  return 0;
}

Ale już tutaj występuje problem ponieważ za każdym razem wyskakuje to co jest w printf czyli, że fopen nie znajduje pliku. Nie wiem o co chodzi.
Potem chciałem jakoś te współrzędne wczytać do tablicy:

float wspolrzedne[20];
fscanf(plik, "%f", współrzędne);

Ale po wypisaniu tablicy przez printf wyświetla się tylko 0.000

Później zamierzałem wyselekcjonować pierwsze i drugie współrzędne i znaleźć funkcje na obliczenie obwodu i pola. Proszę o pomoc.

1

1) Skoro dopiero uczysz się programowania, to nie komplikuj sobie kodu umieszczając kilka instrukcji w jednej linii.

plik = fopen(nazwa, "r");
if (plik == NULL)

2) Żeby plik został poprawnie otwarty, musisz podać jego nazwę wraz z pełną ścieżką (jeśli nie znajduje się w tym samym katalogu, co Twój plik wykonywalny).
3) Każdy punkt jest określany przez dwie współrzędne, więc przyda Ci tablica struktur:

#define MAX_PUNKTOW 20
struct punkt
{
    float x;
    float y;
} wspolrzedne[MAX_PUNKTOW];

4) Wczytywanie z pliku możesz zrobić np. tak:

int ile = 0;
while (ile < MAX_PUNKTOW && fscanf(plik, "%f %f", &wspolrzedne[ile].x, &wspolrzedne[ile].y) == 2)
{
    ile++;
}

5) Pole wielokąta możesz obliczyć metodą analityczną.
6) Obwód możesz obliczyć wyznaczając odległości między kolejnymi punktami, a następnie je sumując.

0

Dziękuje bardzo za odpowiedź. Problem co do 2) punktu jest taki, że plik tekstowy jest w tym samym folderze co program, oraz robiłem tak samo na linuxie na zajęciach i działało a teraz w CodeBlocks nie działa i nie mam pojęcia czemu. Jeśli nazwa jest podawana przez użytkownika to ja nie wiem jaka będzie dokładna ścieżka. Co do reszty podpowiedzi to chętnie zastosuję się do nich.

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