Pobieranie (wypisywanie) elementów tablicy dwuwymiarowej.

0

Witam,
proszę o pomoc w rozwiązaniu nast. zadania:
Napisać program tworzący dynamicznie (po pobraniu od użytkownika wartości naturalnej N) dwuwymiarową tablicę wartości rzeczywistych kształtu 2 x N, zawierającą współrzędne x i y pewnych N punktów na płaszczyźnie. Program pobiera od użytkownika te współrzędne oraz dodatkowo współrzędne jednego punktu (x0, y0) oraz liczbę rzeczywistą R, a następnie wypisuje te punkty z tablicy, które znajdują się wewnątrz okręgu o środku w punkcie (x0, y0) i promieniu R.

Mój kod (chodzi tylko o pobranie, ew. wypisanie elementów):

 
int N;
float *p;

printf("Podaj liczbe wspolrzednych N: ");
scanf("%d",&N);
  
float t[2][N];

printf("Podawaj kolejne wspolrzedne:\n");
  for (p=&t[0][0]; p<=(p+N-1); p++)
  scanf("%f,%f",p,(p+N));

  for (p=&t[0][0]; p<=(p+N-1); p++)
  printf("%f, %f",*p,*(p+N));

Problem polega na tym, że po skompilowaniu pętla for (przy pobieraniu) nie kończy się po wpisaniu żądanej liczby współrzędnych.
Idea powyższego programu jest taka, że pierwszy wiersz zainicjowanej tablicy ma przechowywać współrzędne x (na płaszczyźnie), zaś drugi wiersz współrzędne y. Liczbę N kolumn tablicy (par współrzędnych) określa użytkownik.
Jak widać, do identyfikacji pól tablicy użyłem wskaźnika p (takie było założenie zadania).
Nie mam pojęcia, co należy poprawić, dopiero zaczynam naukę języka C, który, zważywszy na swoją niskopoziomowość, jest dość ciężki do ogarnięcia na początku ;)

Z góry dziękuję za pomoc. :-)

0

p<=(p+N-1) ???

// dawno tu nie byłem, ale podoba mi sie powód przeniesienia [mf]

0
flabra napisał(a)

p<=(p+N-1) ???

chodzi o to, ze pętla ma "przebiegać" tylko po adresach elementów pierwszego wiersza:
user image

0

To nie latwiej zrobic cos takiego?

for(int i=0;i<2;i++)
    for(int j=0;j<N;j++)
        scanf("%f",p + i * N + j);
0

Jeśli N >=1 to
p <= p+N-1
będzie zawsze spełnione. Matematyka się kłania. Przenieśmy prawe p na lewą stronę nierówności, otrzymamy:
p-p <= N-1
czyli
0 <= N-1
czyli
N >= 1

Tak będzie zdecydowanie lepiej:

for (i = 0; i < N; i++) scanf("%f,%f", &t[0][i], &t[1][i]);

Natomiast jeśli koniecznie chcesz wskaźniki to:

for (p = &t[0][0]; p < &t[0][N]; p++) scanf("%f,%f", p, p + N);
0

Dzięki za pomoc.
Teraz czuję się jak idiota... :/

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