Język C

Niemożliwe. Program nie ma jak wyjść inaczej, niż wypisując po drodze komunikat o tym, czy liczba jest pierwsza. Sprawdziłem i pod Linuksem i pod Windowsem - twój kod działa.

Musisz albo źle kompilować, albo źle uruchamiać, albo źle wpisywać liczbę.

Ja to zrobiłem tak (środowisko unikspodobne):

Wkleiłem twój kod do nowo utworzonego pliku pliku warm.c. Zbudowałem program do pliku warm poleceniem:

g cc warm.c -o warm -lm

(wywal spację spomiędzy g cc, głupi bug w forum nie pozwala mi tego wpisać razem)

Kompilacja przeszła poprawnie, otrzymałem jedynie komunikat z ostrzeżeniem:
warm.c: In function ‘main’:
warm.c:9: warning: format ‘%d’ expects type ‘int *’, but argument 2 has type ‘long int *’

Następnie uruchomiłem program:

./warm

Zgodnie z oczekiwaniem otrzymałem zapytanie:

Wprowadz liczbe, ktora chcesz sprawdzic

Wpisałem 113, nacisnąłem enter. Otrzymałem:

Liczba jest pierwsza

Spróbuj powielić moje kroki i sprawdź, gdzie pojawia się problem (jeśli w ogóle). Kod jest w porządku (przynajmniej do tego stopnia).

I tak i nie…
C++ nie jest wolniejszym językiem. Wszystko to, co możesz zrobić w bardzo wydajny sposób w C, możesz zrobić identycznie (albo z drobnymi poprawkami) w C++. Wiele z tych rzeczy można zrobić dodatkowo ładniej.
Nowinki składni C++ to w znacznej mierze lukier na to, co można zrobić naokoło w C, tak więc używanie jej nie może być wolniejsze. Przykładowo, wywołanie metody klasy w C++ jest de facto tym samym, co wywołanie funkcji w C, gdzie pierwszym argumentem jest wskaźnik na przetwarzany obiekt struktury.
Faktycznie narzut pojawia się przy tych możliwościach C++, które albo dają większe możliwości od swoich odpowiedników w C, albo w ogóle nie mają odpowiedników. Ot, choćby strumienie wejścia/wyjścia w C++ są wolniejsze, ale dają też większe bezpieczeństwo. Jeżeli nam zależy na szybkości, korzystamy z biblioteki C i prędkość zachowujemy. Funkcje wirtualne są nowinką mającą swoje narzuty, ale implementacja czegoś podobnego w C darmowa też by nie była (a ile roboty).

Testy które podałeś nie są wiarygodne, pisane ewidentnie pod C. Choćby Hello World na którym C ma taką przewagę - porównajmy źródła:

Kod C:

/* The Computer Language Benchmarks Game
 * http://shootout.alioth.debian.org/
 * contributed by Joe Tucek 2008-03-31
 *
 * Tell G CC that we don't want atexit, we don't want to use the heap,
 * and we really don't want anything.  Can't even call write the "normal"
 * way, because write() isn't linked in....
 *
 * Compile flags are picky for this.  I used:
 * g cc -pipe -Wall -O3 -fomit-frame-pointer -march=pentium4 -ffreestanding -nostartfiles -s -static -o start3 start3.c
 */

#include <sys/syscall.h>
#include <unistd.h>

int _start() {
  syscall(__NR_write, 1, "hello world\n", 12);
  syscall(__NR_exit, 0);
  return(0);
}

Kod C++:

// -*- mode: c++ -*-
// $Id: hello.1.gpp.code,v 1.1 2008-08-06 18:34:19 igouy-guest Exp $
// http://shootout.alioth.debian.org/

#include <iostream>

using namespace std;

int main() {
    cout << "hello world" << endl;
    return(0);
}

To ma być niby równoważne?
Jakbym tak przekleił kod z C do C++, a w C zrobił metodą standardową, to nie zdziwiłbym się, gdyby wyniki się odwróciły.

Ja sam nie bardzo widzę powody, dla których ktoś miałby używać C, jeżeli ma możliwość użycia C++. C++ pozwala zrobić to samo i wiele więcej,

Wielkie dzięki, wszystko już działa - wystarczyło dodać pustą linijkę.

Teraz już czuję się pewnie, zacząłem optymalizować skrypty napisane przez innych studentów :wink:

A ja mam pytanie od siebie.
Właśnie zamierzam się uczyć programowania. I co mi radzicie . Pascala czy C

W zależności jaki język programowania będziesz chciał się nauczyć później. I tak:

  • jak nauczysz się Pascala, to kolejnym krokiem byłoby nauczenie się obsługi języka Delphi (który jest Object Pascalem).

  • jak nauczysz się języka C, to przestudiuj Java, to wtedy będziesz mógł się nauczyć języka C#. C++ jest “wymierającym” językiem programowania i każdy kto może i ma zasobny portfel to zakupuje odpowiednie programy, które pomagają w migracji z C++ na C#

To zależy. Jeśli programowanie ma być dla ciebie krótką przygodą, to radziłbym Pascala, gdyż jest bardziej przyjazny dla początkujących. Jeśli jednak chcesz się zajmować programowaniem bardziej na poważnie, to polecałbym jednak zagłębić się w C, mimo, że początkowo pewne jego aspekty mogą przysparzać pewnych trudności (jak choćby koniecznośc nauczenia się wskaźników zanim cokolwiek zacznie się pisać).

Jak celem ma być nauczenie się C#, to możnaby w sumie nawet zacząć od niego. Moim zdaniem uczenie się języka, aby poznać inny jest bez sensu. Zapewne nauczenie sie C# jako pierwszego języka sprawi troche trudności, ale moim zdaniem niewiele więcej niż np. C.

Wręcz przeciwnie, jego popularność w ciągu ostatniego roku wzrosła (tak jak i popularność C) (źródło : tiobe.com/index.php/content/ … index.html ). Oczywiście, języki kompilowane do kodu natywnego będą stopniowo traciły na popularności, będzie to jednak bardzo długi proces, a i tak w dającej się przewidzieć przyszłości z pewnych dziedzin nie zostaną wyparte (wszędzie tam, gdzie bardzo ważna jest prędkość obliczeń, zwłaszcza zmiennoprzecinkowych - ich wykonywanie na maszynach wirtualnych ciągle jest zdecydowanie wolniejsze).

Programy pomagające w migracji? O ile się orientuję, to jeśli już firmy kupują/tworzą kompletnie nowe programy pod .NET (bo łatwiejsze w utrzymaniu i rozwijaniu, a do wielu zastosowań szybkość C# jest wystarczająca).

Już teraz wiadomo, że platforma programowania .NET nie będzie wspierana przez Microsoft wraz z wydaniem Windows 7. Jak któryś z nich przyznał, platforma .NET okazała się pułapką, bo jedynie działa bez zarzutu na Win XP. Vista z tą platformą zachowuje się różnorako, czyli albo zadziała prawie bez zarzutu, albo w ogóle. Dodatkowo są znane przypadki stanów pośrednich, ale bardzo rzadko. To samo jest z C++. Dodatkowo ogłoszono, że oficjalną platformą programową dla Win7 będzie Java (czyli C#, J#, itp.).

Chodzi mi o język przyszłościowy.Nie chciałbym uczyć czgoś co jest mi nie potrzebne

Możesz dać jakieś źródło? Pierwsze słyszę o czymś takim, a informacja wygląda na ważną i chciałbym doczytać.

Również pierwsze słyszę i proszę o źródło. Nie mam pojęcia, o co ci chodzi tu z C++, on nie jest pod .net (chyba, że piszesz o C++/CLI). C++ jest kompilowany do kodu natywnego i jedyne co może nie działać, to aplikacje C++ pisane pod starsze systemy Microsoftu (ufam, że praktycznie tylko ze względów bezpieczeństwa). Ale wtedy można zrobić kilka poprawek i przekompilować, i działa…

Również jestem zainteresowany źródłem, google nic rozsądnego nie daje.
Po pierwsze rozmijasz się z wikipedią (która twierdzi, że Microsoft przestał rozwijać J# i się z niego wycofuje). Po drugie skąd wziąłeś informację, że wirtualna maszyna Javy ma uruchamiać kod napisany w C# lub J# ?

Ciężko przewidzieć, jaki język będzie popularny za np. 5 lat. Ja bym się nie przejmował tym, że język za jakiś czas stanie się mało popularny - zawsze można się nauczyć innego. Jeśli będzie ci potrzebny. Prawie wszystkie omawiane tu języki powinny jeszcze być popularne przez przynajmniej kilka lat (nie licząc J#) - moim zdaniem to powinno ci wystarczyć.

Acha. Czyli czas się uczyć c++ :smiley:

Praktycznie każdy język ma jakiś zakres zastosowań i raczej w przewidywalnej przyszłości nie zostanie zeń wyparty. Są nisze, gdzie ciągle niezastąpiony jest Fortran, COBOL zaś ciągle trzyma systemy transakcji finansowych. Praktycznie wszystkie znaczące gry powstają w C++ i w przewidywalnej przyszłości nie ulegnie to zmianie. Systemy operacyjne i sterowniki, to wciąż domena C.
Chyba tylko Pascal nie nadaje się dobrze do niczego, może poza nauką programowania (tudzież jako wstęp do Delphi). :stuck_out_tongue:

Ja sam rozpocząłem naukę programowania od C++ i uważam, że był to dobry wybór. Właściwie to nie ja wybrałem, po prostu w moje łapki dostała się “Symfonia C++” J. Grębosza, którą jako podręcznik do rozpoczęcia nauki mogę zdecydowanie polecić (o ile faktycznie chcesz się uczyć “na poważnie” i jest możliwość dokonania takiej inwestycji - jak nie, to pozostają jeszcze tutoriale internetowe, ale to już nie to).

“Któryś z nich”, czyli kogo? Windowsów?
Mylisz Javę z .NET-em, a to wszystko z językami kompilowanymi do kodu maszynowego. To są zupełnie różne światy. Twoje informacje są na tyle rewelacyjne, że muszą być owocami tejże pomyłki.

Swego czasu kupiłem KS Ekspert 1/2005 poświęcony w całości o programowaniu i tam było wyłożone, kawa na ławę, co, gdzie, z kim i dlaczego. Dodatkowo jeszcze czytam różnego typu fora tematyczne, które są poświęcone programowaniu i ich otoczeniu. Oto i cała tajemnica. Jakieś jeszcze są pytania?

My też czytamy różne fora i blogi programistyczne, a mimo to twoje informacje są dla nas rewelacjami. Prosimy o konkretne linki, bo łatwiej nam uwierzyć, że piszesz bzudry niż że jesteśmy aż takimi wielkimi ignorantami jak by wynikało gdyby wszystko co napisałeś było prawdziwe.

Prze trzy lata wiele się mogło zmienić

Przez prawie cztery, w końcu mamy już grudzień. To bardzo dużo czasu jeśli chodzi o IT.

Pewne pomysły trzymają się długo, inne upadają zaraz po publikacji.

A oto i strony, z których ja czerpałem wiadomości:
www.codeguru.pl
www.codeproject.com
4programmers.net
binboy.sphere.pl
forum.ks-ekspert.pl
delphi.icm.edu.pl
www.codegear.pl

Dobrze, że nie dałeś google.com. Nie bądź śmieszny, nikt tego wszystkiego nie przejrzy. Podaj konkretny artykuł, który dokumentowałby choć jedną twoją rewelację.

W ramach ambitnego projektu na drugim (!) semestrze postanowiłem użyć biblioteki STL, konkretnie klasy vector.

Fragment kodu wygląda tak:

#include <vector>
[definicja klasy student]
vector<student*> lista;

Ma to tworzyć listę wskaźników na studentów. Niestety, zwraca taki oto błąd:

expected constructor, destructor, or type conversion before '<' token 
expected `,' or `;' before '<' token 

Używam DevC++ z kompilatorem gcc/g++ i, mam nadzieję, biblioteką STL :wink:

Nie rozpoznaje typu vector…? Może nie zaimportowałeś go do globalnej przestrzeni nazw? Domyślnie elementy biblioteki standardowej C++ są w namespace’ie std, tam też może tkwić twój wektor. Użyj std::vector. Albo dodaj using namespace std; za includami, co generalnie w ogóle uwolni Cię od potrzeby pisania std:: gdziekolwiek dalej.

PS. To już C++, widzę :smiley:

Pomogło, jak ręką odjął :wink:

To akurat jeden z prostszych przedmiotów, jakimi nas katują :stuck_out_tongue: