Skocz do zawartości

Zarchiwizowany

Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.

Gość Qn`ik

Programowanie

Polecane posty

No to jest zgryz. Kupjesz sobie ksiazke i ni w zab. Shadow_90 jak jestes tak zupelnie zielony, to polecam Turbo Pascala. Jest troszke prostszy od C++, ale latwo sie pozniej przezucic.

Co do ksiazek, to kilka propozycji juz padlo w tym temacie, jednak uczenie sie z ksiazek jest dosyc trudne, najlepiej znalezc kogos kto pokaze co i jak. Samemu to ciezka przeprawa.

No i oczywiscie nie probuj odrazu Dooma napisac, sprobuj kalkulator co to dodaje dwie liczby i nic ponad to.

Link do komentarza
Udostępnij na innych stronach

Jaka ksiazke kupiles??

Jesli jestes na prawde zielony to zapytaj sie jakiegos kumpla o podstawy:

1) Instrukcja IF

2) Petle WHILE, FOR

3) Funkcje/Procedury

4) Typy danych

Pozniej juz pojdzie z gorki. I jeszcze taka mala rada. Znajdz kogos kto rzeczywiscie dobrze programuje, zeby czasem zerknal na twoje projekty - chodzi o to zebys nie nabral zlych nawykow przy programowaniu - pozniej ciezko sobie z nimi dac rade.

Link do komentarza
Udostępnij na innych stronach

A ja mam taki problemik: wlasnie postanowilem sie przesiasc z borlanda 3.1 na buildera 5 (chodzi oczywiscie o c++) no i zonk! Napisalem najprostzy programik:

#include <iostream.h>

#include <conio.h>

void main()

{

clrscr();

cout<<"witaj!!!";

getch();

}

no i ni jak nie moge sprawdzic czy to cos dziala

uruchamia sie normalnie, project2.exe sie stworzyl, ale jedyne co sie pojawia to puste okno.

Poprsze wiec o krotki poradnik dla poczatkujacego builderowca:D

Link do komentarza
Udostępnij na innych stronach

Niestety nieznam nikogo kto umie programować. Kupiłem książkę "Programowanie gier dla nastolatków" o języku "Basic". Umiem tylko żeby coś się wyświetliło i zmieniać kod funkcji, tak by mi się przydał. Reszty nieumiem (wszelkiego rodzaju pętli, bloków, łączenia funkcji)....Nawet tego kalkulatora nieumię zrobić....

Link do komentarza
Udostępnij na innych stronach

Hmm ja bym to napisał tak:

#include <iostream> // bez .h <- to ważne!!!

using namespace std;

void main ()

{

cout << "Witaj";

while (true); // lub np. system ("Pause");

}

Ja mam teraz napisac program żółw pod c++. Jest to dosyc ciekawe. Tworzę macierz o wymiarach ekranu i wczytuję komandy sterujące żółwiem czyli mówiące gdzie ma iśc i czy ma rysowac. Żeby nie było prostu to najpierw wczytuje ciąg liczb, z których każda odpowiada za komendy i dopiero później je wyświetla. I to nie tak, że idź w górę/dół/lewo/prawo ale obróc się w lewo/prawo, idź do przodu/tyłu i pisz/niepisz. No i oczywiście jakaś tam liczba musi odpowiadac za zakończenie wykonywania komend. Dzieją się ciekawe rzeczy kiedy próbuję uruchomic taki program, a w ogóle będzie to interesujące jak będę chcial nim wykręcic kółka. Ma ktoś pomysł na takie cuś??

Link do komentarza
Udostępnij na innych stronach

Z tegi co wiem to main musi byc zawsze "int main()". While(true) to po prostu petla nieskonczona i wyglada brzydko w programie. (Co by sie stalo jesli chcialby go rozwijac i wpisal cos za while(true)). system() tez nalezy unikac bo prowadzi do nieprzenosnosci kodu. Mozna olac ta linijke, jesli najpierw odpalicie konsole, a dopiero pozniej program. (Wiekszosc programow wlasnie tak dziala).

Odrobina opisu do postu frosty'ego:

#include <iostream> // ze standardowego katalogu plikow wlaczanych

#include <stdio.h> // j.w. biblioteka C

#include <cstdio> // j.w. biblioteka C, wersja nowoczesniejsza (z szablonami)

#include "mojnaglowek.h" // z biezacego katalogu

using namespace std; // nazwy z biblioteki standardowej znajduja sie w przestrzeni nazw std. Jesli nie napisalbys tej linijki, musialbys pisac np std.cout.

Co do krecenia kolek - 1 piksel do przodu, 1 stopien obrotu, 1 pixel, 1 stopien itd. Wyjdzie b. ladne kolo. Jesli zwiekszysz ilosc stopni wyjdzie mniejsze, jesli zmniejszysz - wieksze.

Link do komentarza
Udostępnij na innych stronach

Wbrew pozorom na wstępie do programowania odpalamy programy nie spod konsoli tylko z kompilatora. Stąd ten while <- pewnie, że źle to wygląda ale spełnia swoją rolę. System() faktycznie może sprawiac problemy zresztą trudno mi powiedziec bo nie pracowałem na Builderze 5. My jak coś robimy to w Devie lub na laborkach mamy Visuala 6 NET. Co do maina to są różne szkoły: na laborkach mamy pisac int main() i return 0; natomiast na cwiczeniach void main(). Cóż co magister/profesor to obyczaj.

A co do tego żółwia to źle napisałem - nie chodziło mi o kółka tylko prostokąty :D . Rozumiem o co ci chodzi ale jak robię na macierzy pozycja[a] i powiedzmy przesuwam się do przodu o 1 to mam pozycja[a+1]. Natomiast jak zrobię dwa skręty w lewo/prawo i do przodu to powinno byc pozycja[a-1]. I oczywiście można wrzucic jakiegoś if-a ale czy da się krócej?

Link do komentarza
Udostępnij na innych stronach

Co do int main() szkol jest wiele, ale tylko jedna poprawna. Oto cytat z ksiazki Bjarne'a Stroustrupa "Język C++", ktory jest tworca tego jezyka wiec jak nikt inny wie jak powinno to wygladac.

Każdy program w C++ musi mieć funkcję o nazwie main() i rozpoczyna się od wykonania własnie tej funkcji. Wartość int dostarczona z main(), jeżeli występuje, jest wartością przekazywaną z programu do systemu. Jeśli nie przekaże się żadnej wartości, to system otrzyma wartośc wskazującą na poprawne zakończenie. Niezerowa wartosc z main() sygnalizuje bład.

Stąd main musi wygladac tak: int main() i nie musi w nim wystepowac return (choc moze). Jak jestes odwazny to pojdz z ta ksiazka do profesorka i wykaz mu jego ignorancje.

Co do zolwia. Ja rozumiem moze sie poruszac do przodu o i pixeli i skrecac o wielokrotnosc k*PI/2 zgodnie z ruchem wskazowek zegara. Jesli k>0 skreca wiec w prawo, k<0 w lewo, 0 idzie prosto.

class zolw

{

    public:

    int pozycjax;

    int pozycjay;

    bool gryzmoli; //czy grzymoli??

    &zolw przesun(int,int);

    void grzydanie(bool);

    int orientacja; // 0-w gore, 1-w prawo, 2-w dol, 3-w lewo

};



&zolw zolw::przesun(int i,int k)

{

    //Mozna zrobic switch, ja uzyje else if

    if(orientacja==0) pozycjax+i;

    else if(orientacja==1) pozycjay+i;

    else if(orientacja==2) pozycjax-i;

    else pozycjay-i;

    //Dzielenie modulo spowoduje ze zolw bedzie zawsze dobrze obrocony

    orientacja=(orientacja+k)%4;

}



void zolw::gryzdanie(bool t)

{

    gryzmoli=t;

}

Powinno dzialac. Trzeba to tylko obudowac w jakis interfejs uzytkownika i interpreter komend uzytkownika. Wersja nie przewiduje ze macierz ma okreslona wielkosc, ale dodac ograniczenia nie jest problem. Mozna by tylko sie zastanowic, czy jesli zolw jest na dole i kaze mu sie isc w dol, to czy sie zatrzymuje, czy tez pojawia na gorzez ekranu, podobnie przy przechodzeniu z lewej na prawa. (Tak jakby przestrzen w ktorej sie porusza byla torusem. Ja w starych gierkach:)). Zalozenie ze przestrzen jest torusem spowoduje tylko dodanie dzielenia modulo na tam gdzie okresla sie jego pozycje.

Link do komentarza
Udostępnij na innych stronach

Thx za pomysły do programu -> na pewno się przydadzą bo aktualnie nie mam czasu za bardzo nad tym przysiąśc bo mam kolo z analizy w sobotę :cry: :shock: :cry: .

Co do różnic między 3 i 5 to najlepiej znaleźc jakąś dokumentację bo tak z głowy to nikt ich wszystkich nie wymieni. A tak w ogóle to wrzuciłem twój programik do Dev-a (którego zresztą ci polecam) i po usunęciu clrscr działało to normalnie. W ogóle jak dla mnie jedyną zaletą tych kilkugigowych Visuali czy innych builderów jest rozbudowany help, który czasami się przydaje.

Link do komentarza
Udostępnij na innych stronach

Tu nie chodzi o roznice pomiedzy 3 a 5 tylko pomiedzy zwyklym kompilatorem Borland 3.1, a Builderem (akurat mam piatke). A niestety potrzebuje buildera, bo latwiej tam zrobic obsluge sieci, a mam zamiar napisac gierke sieciowa :).

A co do zdawalnosci z analizy i algebry na polibudzie to zalezy z kim masz i na czym jestes. U mnie bylo prawie 100%, na matmie na ppt jakies 20%.

Link do komentarza
Udostępnij na innych stronach

A ja mam taki problemik: wlasnie postanowilem sie przesiasc z borlanda 3.1 na buildera 5 (chodzi oczywiscie o c++) no i zonk! Napisalem najprostzy programik:

#include <iostream.h>

#include <conio.h>

void main()

{

clrscr();

cout<<"witaj!!!";

getch();

}

no i ni jak nie moge sprawdzic czy to cos dziala

uruchamia sie normalnie, project2.exe sie stworzyl, ale jedyne co sie pojawia to puste okno.

Poprsze wiec o krotki poradnik dla poczatkujacego builderowca:D

no to ja napiszę tak: po pierwsze kliknij na "file > close all", później "file > new > other" i wybierz "console wizard". utwórz plik i pisz tak jak dawniej :)

#include <iostream> // bez .h <- to ważne!!!

a niby czemu? ja zawsze pisze z rozszerzeniem i wszystko dziala :) zreszta nie tylko ja, na wykladach z programowania (a na laborkach pracujemy wlasnie na builderze, tyle że na 6.0) tez nas uczyli pisania z rozszerzeniem.

Link do komentarza
Udostępnij na innych stronach

Builder to pod windowsa jest, wiec jesli chcesz, zeby cos bylo widac to musisz stworzyc okno programu. Posiadajac juz okienko mozesz w nim cos wypisac. Druga wersja jest taka jak radzi regiz, trzeba stworzyc aplikacje "konsolowa". Nie wiem tylko jak to wyglada w Builderach, ja raczej korzystam z Visual C++ 6.0. Tam wystarczy zaznaczyc, ze taka aplikacje wlasnie chcesz stworzyc w czasie dzialania kreatora projektu.

Wlasnie czemu bez .h ? To wogole zadziala?

Shadow prosze oto sumator w TP

[b]program kalkulator[/b]   {nazwa programu, to mozna pominac}

var a, b, suma :integer;   {deklaracja zmiennych}

begin

   clrscr;                  {czyszczenie ekranu}

   write('Podaj a ');   {pobranie danych}

   readln(a);

   write('Podaj b ');

   readln(b);

   suma:=a+b;         {wyznaczenie wyniku}

   write('Suma ',a,' + ',b,' = ',suma);   {wypisanie odpowiedzi }

   readln;                 {poczekanie, az uzytkownik nacisnie enter}

end.

Napewno wiekszosc osob tutaj chetnie podrzuci jak to rozwinac. Wykorzystac petle ,czy instrukcje warunkowe itd.

Link do komentarza
Udostępnij na innych stronach

#include <iostream> // bez .h <- to ważne!!!

a niby czemu? ja zawsze pisze z rozszerzeniem i wszystko dziala :) zreszta nie tylko ja, na wykladach z programowania (a na laborkach pracujemy wlasnie na builderze, tyle że na 6.0) tez nas uczyli pisania z rozszerzeniem.

Bo w ten sposob widac czy uzywasz bibliotek C czy C++. To ze cos dziala to nie znaczy ze jest dobre. W najgorszym przypadku okaze sie ze twoj kod dziala tylko na jednym kompilatorze.

Link do komentarza
Udostępnij na innych stronach

dzieki wielkie w koncu cos sie ruszylo

a moze ktos zna jakies ksiazki do nauki borlanda??

co do kalkulatora to moge podrzucic jak zrobic silnie:

int i,x,n;

cout<<"podaj z jakiej liczby policzyc silnien";

cin>>n; wczytanie wartosci

x=1;

for(i=1,i<=n,i++) petla od 1 do wczytanej wartosci: n

x=x*i; obliczenie silni

cout<<"oto winik:"<<x;

podobnie z potegowaniem wyzszym niz kwadratowe:

x-podstawa

y-wykladnik

w-wynik

w=1;

for(i=0;i<y;i++)

w=w*x;

wiekszosc innych funkcji powinna miec wlasne odpowiednik w paskalu jak sinusy czy pierwiastek

oczywiscie jest to w c++ ale mysle ze istote zalapiesz i przerobisz sobie na pascala tymbardziej ze tam tez jest petla for

powodzenia :D

Link do komentarza
Udostępnij na innych stronach

Ja silnie napisałbym inaczej - moim zdaniem lepiej, jako funkcję rekurencyjną

int SILNIA(int n)

{

return (n) ? n * SILNIA(n-1) : 1;

}

podobnie z potęgowaniem

int potega(int podstawa, int wykladnik)

{

return (n==1) ? podstawa : podstawa * potega(podstawa, wykladnik-1);

}

a tak w ogle to ja jak robie for-a to "i" deklaruje w warunkach tzn.

for(int i=0; i<n;i++)

zajmuje to mniej miejsca.

Link do komentarza
Udostępnij na innych stronach

Ja silnie napisałbym inaczej - moim zdaniem lepiej, jako funkcję rekurencyjną

int SILNIA(int n)

{

return (n) ? n * SILNIA(n-1) : 1;

}

podobnie z potęgowaniem

int potega(int podstawa, int wykladnik)

{

return (n==1) ? podstawa : podstawa * potega(podstawa, wykladnik-1);

}

a tak w ogle to ja jak robie for-a to "i" deklaruje w warunkach tzn.

for(int i=0; i<n;i++)

zajmuje to mniej miejsca.

czy lepiej to ciezko mi powiedziec, byc moze, chociaz przyznam sie ze nie rozumiem do konca tego kodu

poza tym chcialem napisac w jak najprostszy sposob zeby nie bylo problemu z implementacja w innym kompilatorze

a jesli chodzi o for-a to nie masz do konca racji, bo jesli w programie uzywam kilku forow to zamiast kazdorazowo deklarowac zmienna lepiej to zrobic raz, kod jest wtedy czystszy no i pamiec mniej zasmiecona

Link do komentarza
Udostępnij na innych stronach

Mam problem.

A mianowicie - piszę właśnie program zaliczeniowy, taką bazę danych studentów z dodawanie/usuwaniem/edycją/sortowaniem i co tam jeszcze chcecie rekordów, które są zapisywane do pliku. Z tym jakoś sobie poradzę natomiast dla własnej przyjemności chciałbym tam dodac troche lepszą "obsługę" menu. Bo cały program robie w konsoli i trochę prostacko wygląda: wybierz 1 żeby dodac studenta do bazy, wybierz 2.....

Chciałym, żeby można było poruszac się za pomocą kursorów i zatwierdzac wybór enterem. Szukałem po sieci ale nigdzie nie mogłem tego znaleźc.

I druga sprawa, też dotycząca owej bazy. Tym razem chodzi o edycję -> w momencie kiedy wybieram rekord do edycji chciałbym, żeby pokazywało się

imie: "imie delikwenta" i na końcu migający kursor (ta kreska _)

I żeby w tym momencie była pełna swoboda edycji to znaczy żeby można było to pokazane imie wykasowac i napisac coś nowego, ewentualnie klepnięcie w entera oznaczałoby brak zmiany.

Zdaję sobie sprawę, że ta druga sprawa może byc trochę dłuższa/trudniejsza ale może ktoś ma jakieś gotowe wzorce, które mógłby udostępnic albo chociaż adres do jakiejś stronki. Thx

Link do komentarza
Udostępnij na innych stronach

frosty: masz szczescie pomoge Ci :D

w obu problemach wszystko sprowadza sie do uzycia funkcji getch() (zakladam ze programujesz w c++)

robisz najpeirw zmienna char np "znak" nastepnie:

robisz duza petle najlepiej while(znak!=27) (27 to kod ASCII dla esc)

potem jakies funkcje dodatkowe np clrscr() i przede wszystkim instrukcja:

znak=getch();

nastepnie switch zalezny od "znak" i juz reszta nalezy do ciebie np:

case 87: (87 to chyba jedna ze strzalek ale glowy nie dam musisz sam sprawdzic)

i tu wpisujesz zmiane wygladu ekranu po nacisnieciu danego klawisza

musisz oczywiscie zapamietywac stan ekranu, czyli gdzie znajduje sie kursor i w zaleznosci od tego jesli wcisnieto enter cos tam sie dzieje

jesli chodzi o edycje tekstu to oprocz rozpoznawania wcisnietego klawisza tak jak wczesniej musisz sie bawic dynamiczna tablica zapamietujaca tekst na ekranie. Musza byc przynajniej dwie: ta ktora przechowuje i buforowa do zmiany (tablice nie musza byc koniecznie dynamiczne - mozesz zrobic na sztywno, najlepiej dwuwymiarowe: 80x25 lub 80x50 - zalezy ktorej rodzielczosci uzywasz jakiego kompilatora. Jesli zrobisz na sztywno to w sumie chyba obejdzie sie bez tablicy buforowej)

Dalej juz z gorki: jesli ktos wcisnie np backspace to zastepujesz ostatni znak w danym wierszu spacja, jesli enter to przesuwasz wskaznik na nowy wiersz, jesli jakas litere to poprostu ja wpisujesz na ostatnie miejsce itd;

specjalnie napisalem ogolnikowo zebys sie troszke pomeczyl - tak sie szybciej nauczysz, ale jesli mialbys problemy lub prawdziwego lenia to daj znac, moze cos sie da wyszperac z pamieci mego kompa:D

Link do komentarza
Udostępnij na innych stronach

Big thx za pomoc, i dzięki ale wolę się raczej pomęczyc bo satysfakcja jest większa. I przy okazji następne pytanko: Jaką książkę polecalibyście dla kogoś kto już skończył Symfonię C++? Myślę o Arkana C++ ale może znacie coś lepszego (a może i tańszego :D ).

PS. dziś znalazłem trochę wolnego czasu i już mniej więcej zrobiłem menu - ale to cholerstwo ma funkcji i pętli :lol:

PS 2 I kolejne pytanko :lol: - jestem na etapie usuwania rekordów. I sprawa wygląda tak:

otwieram sobie plik z danymi, wyszukuje konkretny rekord i ustawiam w tej linii "kursor" -> czy jest jakieś polecenie usuwające tą linię? Sam nie wiem coś w stylu delline() ? :-k No bo jedynym innym wyjściem jakie mi przychodzi do głowy jest wpisanie całej bazy do jakiejś wielgachnej macierzy char-ów i później nadpisanie pliku z pominięciem danego wiersza. Może ktoś orientuje się w temacie?

Link do komentarza
Udostępnij na innych stronach

Gość Enduro-boy

Chłopaki poważna sprawa i zarazem proźba :?

Może mi ktoś wytłumaczyć i dać jakiś przykład programu z wykorzystaniem 'Case' bo ja nie umiem 'Case' a na jutro do budy mi to potrzebne,bardzo prosze...

Link do komentarza
Udostępnij na innych stronach

Hmmm jak rozumiem ma to byc jakiś łatwiutki i prościutki programik...

#include <iostream>

using namespace std;

int main()

{

int cos;

cout<<"Przykładowy program dla switch/case"<<endl;

cout<<"Wybierz opcje (1,2 lub 3)"<<endl;

cin>>cos;

switch(cos)

{

case 1 : cout << "wybrales opcje pierwsza"; break;

case 2 : cout << "wybrales opcje druga"; break;

case 3 : cout << "wybrales opcje trzecia"; break;

default : cout << "nie ma takiej opcji"; break;

}

system ("PAUSE");

return 0;

}

Nie jest to dzieło mojego życia i mam nadzieję, że nie ma tam żadnych błędów. Po prostu pokazałem Ci o co tu chodzi.

PS. Text radzę zmienic :D.

PS2. Panowie (i panie?) trzeba się wziąśc do roboty i cosik zaczac pisac w tym topicu...

}

Link do komentarza
Udostępnij na innych stronach

Prosze bardzo. Moj ostatni projekt w tym semestrze:

Prosty system wieloprocesorowy. Przyjac nastepujace zalozenia:

- System moze zawierac dowolna liczbe procesorow

- Z procesorem sa zwiazane operacje jakie moze on wykonywac i np. czas niezbedny do ich wykoniania.

- System moze realizowac kilka zadan jednoczesnie. Zadania sa zdefiniowane jako ciag operacji dwuargumentowych.

- Symulacja moze polegac np. na przedstawieniu czasu wykoniania poszczegolnych zdan i listy procesorow zaangazowanych do ich wykonania.

Piszac to mamy popisac sie pelna znajomoscia C++ (dziedziczenie, funkcje wirtualne, przeciazenie operatorow, biblioteka STL, watki (co to sa watki?), obsluga bledow).

Moje pomysly:

- Procesory:

-- najprostszy procesor umie tylko pobierac rozkazy i je zwracac.

-- bardziej skomplikowane umieja np.: dodawac, mnozyc

-- sa tez procesory programowalne (np a@b = (a+B)/a)

-- procesory moga miec pamiec (moga zapamietac jedna liczbe)

-- procesory zawsze pamietaja wynik ostatniej operacji i moga go uzyc w nastepnej

-- poprzez dziedziczenie tworzymy procesory o wybranych cechach np umiejacy dodawac i programowalny, albo mnozacy z pamiecia

- Operacje:

-- Proste struktury: CONTROL(char/bitset), DATA1 (int/double), DATA2(int/double), OPERATOR(char)

-- Znak sterujacy - czy dane to liczba, wynik ostatniej operacji, zapamietane dane, reset procesora itp.

-- Operator +. *. @ (progarmowalny), M (zapamietaj wynik ostatniej operacji).

- Zadania:

-- Wektor operacji, poruszamy sie po nim za pomoca iteratorow (wykorzystamy biblioteke STL)

- System nadzorujacy:

-- Tutaj nie mam pomyslu. Laborant wspominal o tym ze mozna np uznac ze system wieloprocesorowy sam w sobie jest procesorem - ale jakos mi to sie nie widzi.

Musze przygotowac cala dokumentacje projektu, natomiast napisac mam jedynie procesory (i pokazac ze dzialaja, przetestowac je, pokazujac wyniki na konsoli i zapisujac w logu)

Nie mam pomyslu na wykorzystanie wyjatkow.

I co to sa watki w C++ bo nie moge znalezc (chyba ze laborantowi chodzilo o wyjatki).

Macie jakies pomysly??

PS: Termin oddania 13.stycznia :P

Link do komentarza
Udostępnij na innych stronach

Pisze druga odpowiedz, zeby nie zagmatwac topicu.

Co do silni, to naturalne jest rozwiazanie problemu rekurencyjnie.

Podobnie jak rozwijanie w szeregi, liczby Fibbonaciego, wieze w Hanoi itd.

Co do ksiazek. Polecam:

- Stroustrupa (Język C++, WNT), moze nie najlatwiejszy, ale pozwala poznac pelne bogactwo C++

- Lippman (Podstawy C++, WNT), nazwa mylaca, obok Stoustrupa prawdopodobie druga najwazniejsza ksiazka, prostsza niz Stroustrup.

- Eckel (Thinking in C++, 2 tomy, Helion), zeby wiedziec jak zastosowac zdobyta wiedze.

- Symfonia/Pasja C++ - mialem okazje tylko przegladac. Fajnie napisane jednak wiecej nic nie moge powiedziec. Na bank dobre dla poczatkujacych.

Link do komentarza
Udostępnij na innych stronach

Gość
Temat jest zablokowany i nie można w nim pisać.


  • Kto przegląda   0 użytkowników

    • Brak zalogowanych użytkowników przeglądających tę stronę.

×
×
  • Utwórz nowe...