C++ na C

infeq
Użytkownik
Użytkownik
Posty: 513
Rejestracja: 31 lip 2010, o 17:13
Płeć: Mężczyzna
Lokalizacja: Kraków
Podziękował: 18 razy
Pomógł: 6 razy

C++ na C

Post autor: infeq »

Witam muszę pozmieniać ten program napisany w C++, na język C. Bardzo proszę o pomoc.

Kod: Zaznacz cały

//tytuł: Sito Eratostenesa
//treść zadania: Korzystając z algorytmu "Sito Eratostenesa" napisz program, który wyświetli na ekranie wszystkie liczby pierwsze mniejsze od a. Liczbę a określamy samodzielnie.
//dane wejściowe: i=0, l=2, a=0, ile=0
//dane wyjściowe: Wypisane wszystkie liczby pierwsze z przedziału [2;a] i podana ilość tych liczb.


#include<iostream>

using namespace std;

bool tab[10000000];

int Eratostenes(int a) //A[a] <=> a jest liczbą pierwszą
{
   int ile = 0;
   //dla każdej liczby - jeśli nie została oznaczona jako złożona wykreśl jej wszystkie wielokrotności mniejsze od a
   for(int l = 2; l <= a; l++)
       if(tab[l] == 0)
       {
           ile++;
           //zaczynamy wykreślać liczby od 2*l, kończymy gdy dana wielokrotność przekracza a
           for(int i = 2*l; i <= a; i+=l)
               tab[i] = 1;
       }
   return ile;
}

int main()
{
   int a;
   cout << "Algorytm znajduje liczby pierwsze mniejsze od a" << endl;
   cout << "a = ";
   cin >> a;
   cout << "Ilosc liczb pierwszych: " << Eratostenes(a) << endl;
   for(int i = 2; i <= a; i++)
      //jeśli liczba jest pierwsza to ją drukuj
      if(!tab[i])
         cout << i << endl;
   system ("pause");
   return 0;
}
wawek91
Użytkownik
Użytkownik
Posty: 795
Rejestracja: 2 cze 2010, o 08:56
Płeć: Mężczyzna
Lokalizacja: Tarnów
Podziękował: 14 razy
Pomógł: 66 razy

C++ na C

Post autor: wawek91 »

A znasz któryś z tych języków? Generalnie każde cout zamienić na printf każde cin na scanf, w języku C chyba nie ma typu boolowskiego więc wystarczy zamienić na inta, wywalić przestrzeń nazw (które w C nie istnieją) oraz zaincludować bibliotekę stdlib i stdio.
wszamol
Użytkownik
Użytkownik
Posty: 490
Rejestracja: 7 maja 2009, o 22:01
Płeć: Mężczyzna
Podziękował: 1 raz
Pomógł: 64 razy

C++ na C

Post autor: wszamol »

Ponadto nie przejdzie taki bajer:

Kod: Zaznacz cały

for(int i = 2; i <= a; i++)
Zmienną będzie trzeba zadeklarować przed pętlą:

Kod: Zaznacz cały

int i;
for(i = 2; i <= a; i++)
Co do typu boolowskiego to jest w jakiejś wersji C, trzeba tylko dodać <stdbool.h>, no ale to nie zawsze może działać, więc bezpieczniej będzie zamienić na int
Afish
Moderator
Moderator
Posty: 2828
Rejestracja: 15 cze 2008, o 15:45
Płeć: Mężczyzna
Lokalizacja: Seattle, WA
Podziękował: 3 razy
Pomógł: 356 razy

C++ na C

Post autor: Afish »

W C99 można zarówno deklarować zmienne w pętlach, jak i stosować typ bool.
wszamol
Użytkownik
Użytkownik
Posty: 490
Rejestracja: 7 maja 2009, o 22:01
Płeć: Mężczyzna
Podziękował: 1 raz
Pomógł: 64 razy

C++ na C

Post autor: wszamol »

Całe życie się człowiek uczy, o tych pętlach nie wiedziałem
infeq
Użytkownik
Użytkownik
Posty: 513
Rejestracja: 31 lip 2010, o 17:13
Płeć: Mężczyzna
Lokalizacja: Kraków
Podziękował: 18 razy
Pomógł: 6 razy

C++ na C

Post autor: infeq »

To np. ten fragment jak w C będzie wyglądał?

Kod: Zaznacz cały

cout << "Ilosc liczb pierwszych: " << Eratostenes(a) << endl;
Afish
Moderator
Moderator
Posty: 2828
Rejestracja: 15 cze 2008, o 15:45
Płeć: Mężczyzna
Lokalizacja: Seattle, WA
Podziękował: 3 razy
Pomógł: 356 razy

C++ na C

Post autor: Afish »

wawek91 pisze:Generalnie każde cout zamienić na printf
Plus to:
infeq
Użytkownik
Użytkownik
Posty: 513
Rejestracja: 31 lip 2010, o 17:13
Płeć: Mężczyzna
Lokalizacja: Kraków
Podziękował: 18 razy
Pomógł: 6 razy

C++ na C

Post autor: infeq »

Wiem, że count na printf, ale co zrobić np. z tym "<<", tak żeby to wypisywało tekst, zmienne i wczytywało (po prostu, czym zastąpić te "<<" i "edl"?
Xitami

C++ na C

Post autor: Xitami »

cout << "Ilosc liczb pierwszych: " << Eratostenes(a) << endl;

printf("Ilosc liczb pierwszych: %d
", Eratostenes(a));

%d sygnał, że będzie parametr, liczba całkowita

przejście do początku następnego wiersza
infeq
Użytkownik
Użytkownik
Posty: 513
Rejestracja: 31 lip 2010, o 17:13
Płeć: Mężczyzna
Lokalizacja: Kraków
Podziękował: 18 razy
Pomógł: 6 razy

C++ na C

Post autor: infeq »

Ok! Mam jeszcze tylko problem z tymi dwoma,proszę o pomoc i już koniec pytań :p
cin >> a;
cout << i << endl;-- 2 maja 2011, o 18:17 --Proszę o pomoc
makoo
Użytkownik
Użytkownik
Posty: 97
Rejestracja: 3 sie 2010, o 12:20
Płeć: Mężczyzna
Lokalizacja: Kraków
Podziękował: 3 razy
Pomógł: 1 raz

C++ na C

Post autor: makoo »

właśnie też mi jest to potrzebne teraz, proszę o pomoc...
wawek91
Użytkownik
Użytkownik
Posty: 795
Rejestracja: 2 cze 2010, o 08:56
Płeć: Mężczyzna
Lokalizacja: Tarnów
Podziękował: 14 razy
Pomógł: 66 razy

C++ na C

Post autor: wawek91 »

Kod: Zaznacz cały

scanf("%d", &a);

Kod: Zaznacz cały

printf("%d
", i);
Na przyszłość warto zajrzeć choćby tu ... io/printf/
makoo
Użytkownik
Użytkownik
Posty: 97
Rejestracja: 3 sie 2010, o 12:20
Płeć: Mężczyzna
Lokalizacja: Kraków
Podziękował: 3 razy
Pomógł: 1 raz

C++ na C

Post autor: makoo »

Afish pisze:W C99 można zarówno deklarować zmienne w pętlach, jak i stosować typ bool.
Można to robić w C++ a w zwykłym C, nie bo nie działa.
Afish
Moderator
Moderator
Posty: 2828
Rejestracja: 15 cze 2008, o 15:45
Płeć: Mężczyzna
Lokalizacja: Seattle, WA
Podziękował: 3 razy
Pomógł: 356 razy

C++ na C

Post autor: Afish »

A co to jest zwykłe C? Bo jeżeli C99, to działa, gdyż standard wprowadził obie z tych rzeczy.
wawek91
Użytkownik
Użytkownik
Posty: 795
Rejestracja: 2 cze 2010, o 08:56
Płeć: Mężczyzna
Lokalizacja: Tarnów
Podziękował: 14 razy
Pomógł: 66 razy

C++ na C

Post autor: wawek91 »

Myślę, ze koledze chodziło o to, że w niektórych kompilatorach nie zostały wprowadzone wszystkie zmiany i tak np pracując w dev'ie który używa gcc nie da się zadeklarować zmiennej w pętli for (chodzi mi jako jeden z warunków).
ODPOWIEDZ