Liczby pierwsze

0

Mam problem z zadaniem:
Dla podanej liczby n wypisz wszystkie liczby pierwsze mniejsze bądź równe n.
Co zle :( ?
Czasami nie wypisze 3 czasami 7, nie działa poprawnie, proszę o pomoc.

#include <stdio.h>
int main()
{
        int i,j,n;
        printf("Podaj liczbe a program wypisze liczby pierwsze mniejsze i rowne\n");
        scanf("%d",&n);
        int tablica[n];
        for (i=2; i<=n; i++)
        {
                if (tablica[i] != 0)
                {
                        j = i+i;
                        while (j<=n)
                        {
                                tablica[j] = 0;
                                j += i;
                        }
                }
        }

        for (i=1; i<=n; i++)
        {
                if (tablica[i]!=0)
                printf("%d\n",i);
        }
        return 0;
}
2
int tablica[n];
for (i=2; i<=n; i++)
        if(tablica[i] != 0)

Pierwszy błąd.

Tablice są indeksowane od 0 do n-1. To znaczy, że próba odwołania się do elementu tablicy o indeksie n jest niepoprawna.

Drugi błąd, w tym samym fragmencie kodu:

Nie ustalasz początkowej wartości elementów tablicy, a potem sprawdzasz, czy nie są one równe 0. Jeśli nie ustaliłeś początkowych elementów tablicy, to nie wiesz, co się w nich znajduje – może być więc tak, że w elemencie o indeksie będącym liczbą pierwszą już od samego początku masz 0.

A prawdę mówiąc, oba Twoje błędy to jest tzw. Undefined Behaviour. Co znaczy, że program może źle działać na wszelkie możliwe sposoby, nie tylko na sposób złego odczytania wartości z tablicy.

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