Liczba pierwsza <1;n> C++

0

Mam Windows 7 HP 64 bit, korzystam z Dev c++ 5.2.0.3. Mam za zadanie napisać na kółko program w C ++, który dla podanego n wypisze liczby pierwsze w przedziale od 1 do n. Z racji, że dopiero zaczynam moją przygodę z programowaniem nie bardzo widzę, gdzie zrobiłem błąd.

#include <iostream>
#include <conio.h>
using namespace std;
int main ()
{
 long n;
 do
 {
 cout << "Podaj n";
 cin >> n;
 bool p=true;
 for (int i=1; i<n; ++i)   
 if (n%i==0)
 p=false;
 if (p)
 cout << i;
 getch();
}
while (i==n);
}

Program nie chce się skompilować. Oto log kompilacji:

Kompilator: MinGW GCC 4.6.2 32-bit
Wykonywanie  g++.exe...
g++.exe "D:\cosie\szkoła\2b\kólko\liczba pierwsza w przedziale.cpp" -o "D:\cosie\szkoła\2b\kólko\liczba pierwsza w przedziale.exe"    -I"C:\Program Files (x86)\Dev-Cpp\MinGW32\include"   -L"C:\Program Files (x86)\Dev-Cpp\MinGW32\lib" -static-libstdc++ -static-libgcc 
D:\cosie\szkoła\2b\kólko\liczba pierwsza w przedziale.cpp: In function 'int main()':
D:\cosie\szkoła\2b\kólko\liczba pierwsza w przedziale.cpp:16:10: error: name lookup of 'i' changed for ISO 'for' scoping [-fpermissive]

D:\cosie\szkoła\2b\kólko\liczba pierwsza w przedziale.cpp:16:10: note: (if you use '-fpermissive' G++ will accept your code)
D:\cosie\szkoła\2b\kólko\liczba pierwsza w przedziale.cpp:19:8: error: 'i' was not declared in this scope

Wykonanie zakończone

Chciałbym dowiedzieć się, w którym konkretnie miejscu/miejscach popełniłem błąd lub błędy.
Pozdrawiam

0

Brakuje ci {} w pętli for. Pętla wygląda tak:

for(...)
  instrukcja

gdzie instrukcja jest albo instrukcją prostą zakończoną średnikiem albo blokiem instrukcji ograniczonych { i }
Poza tym czy warunek pętli jest faktycznie i==n czy i!=n ?

0

Zmienna i funkcjonuje tylko w tych 2 linijkach,

for (int i=1; i<n; ++i)
if (n%i==0)

tak więc tutaj while (i==n); "nie istnieje" (i po poprawieniu pętli programu dalej istnieć nie będzie). Swoją drogą polecał bym raczej 2 fory, będzie prościej bo w przypadku while-a będziesz musiał "ręcznie" zwiększać zmienną którą sprawdza. W obecnej postaci programowi chyba bliżej do sprawdzenia czy dana liczba jest liczbą pierwszą.

0

Doszedłem do wniosku, że mój kod nie ma potencjału. A jeśli ma, to ja go nie dostrzegam. Poprawiłem trochę go podług zaleceń, jednak nadal nici. Co prawda kompiluje się ładnie, ale gdy uruchomię program, to jak gdyby liczył coś, ale nic nie wyskakuje. Doczytać sporo muszę. Jeśli wystąpią problemy, to będę wiedział, gdzie się zgłosić. Dziękuję, miłego wieczoru.

0

Problem tu w tym że zapomniałeś że n%1 zawsze równy 0.

0

Może rzuć okiem na to: http://pl.wikipedia.org/wiki/Sito_Eratostenesa
Implementacja dobrze zrobiona nie musi używać nic poza dodawaniem i przesuwaniem bitów. Tablica bool, to czyste marnotrawstwo pamięci (8:1 lub 32:1), więc mógłbyś nawet ulepszyć podane tam przykłady (np. używając tablicy bitowej i dla każdej szukanej wielkości liczby uzupełniając wykreślanie wcześniej wykreślonej części sita).

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