Dlaczego moj program robi coś, czego nie powinien?

0

Do rozwiązania następujący problem:
//Dane są: liczba naturalna M ≥ 1 i tablica A[1...M] zawierająca M liczb naturalnych
z przedziału [2, N]. Korzystając z powyższego algorytmu, zaprojektuj algorytm,
wyznaczający te liczby z przedziału [2, N], które nie są podzielne przez żadną z liczb
A[1],..., A[M].//

Moj program:

#include <stdio.h>
int main()
{
  int m, licznik=1;;
  int n;
  printf("Podaj ilosc liczb: ");
  scanf("%u", &m);
  int A[m+1];
  bool T[m+1];
  for(int i=0;i<=m;i++)
    T[i]=0;
  printf("Podaj %u liczb: ", m);
  for(int i=1;i<=m;i++)
    scanf("%i", &A[i]);

  printf("Podaj wielkosc przedzialu: 2-");
  scanf("%i", &n);
  int i=A[licznik];
  printf("n: %i\n", n); //1 <------
  while(i<n)
    {
      if(T[i]==0)
        for(int j=i;j<=n;j+=i)
          T[j]=1;
      licznik++;
      i=A[licznik];
    }
  printf("n: %i\n", n); //2 <------
  printf("\nLiczby z przedzialu <2, %i> niepodzielne przez zadna podana liczbe:\n", n);
  for(int q=2;q<=n;q++)
    if(T[q]==0)
      printf("%i ", q);
  return 0;
}

Dla wejscia:
1
3
100
Program w miejscach oznaczonych 1 i 2 wypisuje dwie rożne wartosci(?!): 100 i 1.
Dla wejscia:
1
3
800
Mam "naruszono limit ochrony pamięci", a pamięć nie zależy od ostatniej wprowadzanej danej.
Dla innych wejsc od razu konczy dzialanie. Dla niektorych działa dobrze.
O co do cholery chodzi...? Uprzedzając - wiem, ze można to napisać ładniej, ale w treści zadania mam Korzystając z powyższego algorytmu.

0

tablice A oraz T mają m+1 elementów zaś w pętle while(i<n) sięgasz nawet do n-go elementu

0

Program ma kilka błędów (rażących, ale wynikających z niedopatrzenia i pomyłek ze zmiennymi n i m), ale co w wypisywaniem n w miejscach 1 i 2? Powinno wypisac tę samą wartosc.

1

Bo jak w pętle while(i<n) zaczynasz mazać po pamięci to zamazujesz tego swego n

0

Tzn wychodzi poza tablice w miejsce, gdzie jest wartosc n, tak? Program już działa, jak juz mowilem po prostu myliłem n z m, teraz tylko to wypisywanie mnie ciekawi.

0

Tak, normalnie zamazuje n: http://ideone.com/qymmbb

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