GRY-Online.pl --> Archiwum Forum

(Programowanie w C/C++ i nie tylko)----(Dla laików i ekspertów)----(cz.9)

16.11.2006
18:03
smile
[1]

Sir Skull [ Charr Shaman ]

(Programowanie w C/C++ i nie tylko)----(Dla laików i ekspertów)----(cz.9)

cout << "--------------------------[Przydatne strony]............... ";

"NEW - Nowe Linki";

[!!!] [Kurs C#]
[!!!] [.NET QuickStart Tutorials]


"[PL]";

[Tutorial winapi]
[Tutorial winapi]
[Programowanie w praktyce - piszemy gry logiczne]
[Kurs C++]
[Podstawy C++]
[Kurs C++]
[m.in. kursy C++: /pliki do pobrania/teksty/.../]
[Kurs C++]
[materiały o C++ z Politech. Wroc.]


[O programowaniu]
[Kursy, nie tylko Cpp]
[C++, Kursy, Algorytmy, Artykuły, Zagadki]



[materiały o C++ z Politech. Wroc.]




[Podstawy C++]
[Programowanie w C/C++ pod DOS, WIN, LINUX]
[Ciekawe rzeczy do ściągnięcia]




"[ANG]";









cout << " ...............[DOWNLOAD]............... ";

//(Dev-C++ 4.9.9.0 PL - kompilator C/C++)
// "Thinking in C++" Tom 2
// "Thinking in C++" Tom 3
// Darmowe pubikacje elektroniczne o programowaniu
//Borland C++ 3.1





cout << " ...............[INNE]............... ";

czasopismo WARP



cout << " ...............[Literatura programisty]............... ";

Symfonia C++ J.Grębosza
Thinking in C++
Pasja C++ J.Grębosza
Mój pierwszy program wydawnictwa HELP
Książeczka "Programowanie w C++" od Komputer Swiat - Dla BARDZO początkujących ( )
"C++ Styl Programowania" Tom'a Cargill'a.
"Język ANSI C" Kernighan, Ritchie.
"PHP i MySQL. Dynamiczne strony WWW. Szybki start"
"PHP. Tworzenie stron WWW. Szybki start" []

cout << " ...............[Poprzedni wątek]............... ";
https://forumarchiwum.gry-online.pl/S043archiwum.asp?ID=5539138&N=1

16.11.2006
18:05
[2]

loksp [ ...silent hill... ]

ktos mi pomoze???

16.11.2006
18:10
[3]

Regis [ ]

loksp -> Nie. Wroc jak napiszesz cokolwiek sam i bedizesz mial KONKRETNY problem. Odwalanie zadan domowych za tych ktorym sie nie chce, to nie tutaj.

18.11.2006
14:39
smile
[4]

fifalk [ fifalkowiec ]

za rada Lookasha - pomoze ktos: https://forumarchiwum.gry-online.pl/S043archiwum.asp?ID=5660457&N=1 ?

18.11.2006
23:27
smile
[5]

fifalk [ fifalkowiec ]

tak tylko wpadlem napisac, ze moje pytanie nieaktualne :-)

21.11.2006
13:42
smile
[6]

«Malakai» [ Pretorianin ]

Witam mam do napisania na za 2 tygodnie projekt (w C, bez ++). Dodaje jeszcze ze jestem ciemny w te klocki... Temat projektu to ---->

Chodze na wszystkie wyklady i cw z pp i cos tam kojarze ale nie mam w ogole pomyslu jak to zaczac, jakich instrukcji uzyc w tym projekcie :(

Moje podstawowe pytania to:
- czego trzeba uzyc zeby program mozna bylo uruchamiac z parametrem (<rzym.exe> liczba)?
- jak do diabla mam zrobic zeby zamienial mi liczby arabskie na rzymskie, bo chyba nie przeciez skorzystac z stalej #define? :/


Prosilbym kogos o wytlumaczenie mi tego jak dla kompletnego debila :) I jesli mozna o podanie przykladow (nie zwiazanych z moim konkretnym projektem), a ja droga dedukcji postaram sie dojsc jak to przekminic na moj projekt...

Nie prosze o zrobienie projektu za mnie! Z checia (mniejsza, lub wieksza) napisze go sam, chcem poprostu miec jakis punkt oparcia zeby wiedziec przynajmniej na czym to ma polegac (jak to ma wygladac)...

Z gory dziekuje za pomocne posty, a reszty nie bede komentowal...

BLAGAM POMOZCIE :(

21.11.2006
14:07
[7]

fifalk [ fifalkowiec ]

co do 1 pytania, to wg mnie chodzi o wykorzystanie main w postaci
int main(int argc, const char* argv[] )

liczby wydaje mi sie, ze trzebaby podzielic na jednosci, 10, 100 i pozniej to pozamieniac na odpowiedniki rzymskie

main przyklad:
#include <stdio.h>
int main( int argc, const char* argv[] )

// Prints each argument on the command line.
for( int i = 0; i < argc; i++ )

printf( "arg %d: %s\n", i, argv );

21.11.2006
14:13
[8]

fifalk [ fifalkowiec ]

kurcze, nie da sie poprawic, zeby wylaczyc znaczniki.... tutaj ten przyklad:
#include <stdio.h>
int main( int argc, const char* argv[] )

// Prints each argument on the command line.
for( int i = 0; i < argc; i++ )

printf( "arg %d: %s\n", i, argv[i] );

21.11.2006
17:44
smile
[9]

«Malakai» [ Pretorianin ]

Ok teraz moje pytanie drugie w jaki sposob mam pozamieniac arabskie na rzymskie? Bo rozumiem ze bede musial to zrobic tak jak sa pozapisywane, czyli pierwsza 10, pozniej 50, 100, 1000, 10 000 itd, ale nie wiem jak tro zrobic... Wie ktos?

22.11.2006
19:29
smile
[10]

«Malakai» [ Pretorianin ]

^^UP^^ Pomoze ktos? :(

22.11.2006
21:14
[11]

maVes [ Generaďż˝ ]

Malakai - mi przychodzi do głowy tylko jeden pomysł jak to zrobić.

Zauważ że w rzymskim systemie liczbowym jest 7 znaków, ale występują też takie kombinacje jak IV, więc je też musimy wziąć pod uwagę.

Po rozpisaniu wygląda to tak:
1 I
4 IV
5 V
9 IX
10 X
40 XL
50 L
90 XC
100 C
400 CD
500 D
900 CM
1000 M

z tego robimy dwie tablice - jedną typu int, a drugą string. Jak łatwo zauważyć, obydwie będą miały po 13 elementów. Następnie liczbę przesłaną do funkcji porównujemy po kolei od największej wartości w tabeli, do najmniejszej. Jeżeli liczba jest większa lub równa wartości z tabeli, to pomniejszamy przesłaną liczbę o tę wartość, a do jakiegoś wcześniej utworzonego stringu dopisujemy znaczek z tablicy (tej drugiej). Jeżeli pętla zakończy się, zwracamy string z wynikiem.

Wiem że może niejasno to napisałem, ale to już praktycznie całe rozwiązanie zadania. fifalk wyżej napisał już jak odbierać argumenty przesłane do programu.

22.11.2006
22:45
smile
[12]

«Malakai» [ Pretorianin ]

Doceniam to ze chciales mi pomoc, ale ja nadal nie rozumiem :( Jesli to nie problem to czy moglbys podac jakis przyklad juz dzialajacego przypisania? Z okreslonymi tymi tablicami i stringami, bo tak bedzie latwiej mi to skumac...

22.11.2006
23:02
smile
[13]

fifalk [ fifalkowiec ]

«Malakai» --> nie obraz sie, ale w google sa algorytmy zamiany arabskie -> rzymskie. sam z reszta pisales, ze nie chcesz, zeby ktos za Ciebie zrobil ten program ;-)
np. tu: (przyklad z pascala, ale latwo sie polapac w kodzie w tym jezyku)
tu: (c++ - chociaz jak zobaczylem kod, to jest to program dosc... hm... "malo algorytmiczny" ;-)

22.11.2006
23:18
[14]

Kijano [ Generaďż˝ ]

tu masz z 2 tablicami kod do zamieniania arabskich na rzymskie na odwrót już sobie poradzisz :)


#include<stdio.h>
#include<stdlib.h>
#include<string>

static int tab1[13] = ‹ 1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1 ›;
static char* tab2[13] = ‹ "M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I" ›;

void zamien( int x, int n )

int g = x/(tab1[n]);
if( g > 0 )
for( int i = 0; i < g; i++ )‹
printf("%s", tab2[n] );

x = x - g*(tab1[n]);
if( x > 0 && n < 13 )
zamien( x, n+1 ); /* n +1 -> kiedy zaczynasz od 1000; n-1 -> kiedy zaczynasz od 1 */


int main()

/* przykladowa liczba to 1212 */
zamien( 1212, 0 ); /* 0 -> zaczynaj od 1000 ;12 -> zaczynaj od 1 */
printf("\n");

#if SYSTEM==SYSV
system("PAUSE");
#else
return 0;
#endif

23.11.2006
00:00
smile
[15]

«Malakai» [ Pretorianin ]

Acha czyli jak mam rozumiec teraz te liczby arabskie z pierwszej tablicy tab1 sa przypisane tym z 2 tablicy czyli tab2 w tym kodzie:

static int tab1[13] = ‹ 1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1 ›;
static char* tab2[13] = ‹ "M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I" ›;



Wytlumaczcie mi na bierzaco czy dobrze rozumuje (jesli gdzies sie pomyle to mnie poprawcie), bo pozniej bede musial wytlumaczyc co, dlaczego i jak to dziala...

Tutaj program ta liczbe z tablicy 1 podmienia na liczbe jej przypisana z tablicy 2 tak?


int g = x/(tab1[n]);
if( g > 0 )
for( int i = 0; i < g; i++ )

printf("%s", tab2[n] );


Tylko teraz co dokladnie robi ta 2 petla?

x = x - g*(tab1[n]);
if( x > 0 && n < 13 )
zamien( x, n+1 );


23.11.2006
13:35
[16]

Kijano [ Generaďż˝ ]

1) Tak tablice sa odpowiednio przypisane do siebie
2) program dzieli liczbe na poszegolny element w tablicy 1. Jesli po takim dzieleniu g >0 to wypisuje odpowiednio przypisana cyfre
3) To nie jest petla od naszego x odejmuje g(liczbe calkowita) pomnozona przez wartosc jej odpowiadajaca. If odpowiada za to czy program ma skoncyzc dzialanie(x=0) czy nadal liczyc przy czym zmienia sie n(czyli element w tablicy )

23.11.2006
13:45
[17]

fftc [ Generaďż˝ ]

Program w pascalu do obliczania pierwiastków równania kwadratowego. Mam coś takiego i nie mogę się doszukać błędów.. help:)

PROGRAM PIERW;
USES CRT;
VAR
A, B, C, DELTA, X1, X2:REAL;
BEGIN
CLRSCR;
WRITE('A: ');
READ(A);
IF A=0 THEN
WRITELN('TO NIE JEST ROWNANIE KWADRATOWE ')
ELSE
BEGIN
WRITE('B: ');
READ*(B);
WRITE('C: ');
READ<'C: ');
DELTA:=B*B-1*A*C;
IF DELTA<0 THEN
WRITELN9'BRAK PIERWIASTKOW RZECZYWISTYCH!!')
ELSE
IF DELTA=0 THEN
BEGIN
X1;=B/(2*A);
WRITELN('X0=',X1);
END
ELSE
BEGIN
X1:=(-B-SQRT(DELTA))/(2*A);
X2:=(-B+SQRT(DELTA))/(2*A);
WRITELN('X1=',X1);
WRITELX('X2=',X2);
END;
END;
READKEY;
END.

23.11.2006
13:54
[18]

fftc [ Generaďż˝ ]

Przepraszam za beznadziejną formę kodu ale nie uwzględniło spacji:/ Nie zdążyłem edytować..

23.11.2006
21:09
[19]

Pirix [ ! KB ! Góry górą ]

A czy delta to nie jest czasem b*b-4ac? Ty masz w kodzie b*b-1ac

24.11.2006
15:07
smile
[20]

«Malakai» [ Pretorianin ]

Witam ponownie :>

1. Zrobilem juz cos takiego:

#include<stdio.h> // funkcje printf i scanf
#include<stdlib.h>
#include<string.h>
#include<conio.h> // funkcja getch i clrscr

static int tab1[13] = ‹ 1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1 ›; // tablica z liczbami arabskimi
static char* tab2[13] = ‹ "M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I" ›; // tablica z liczbami rzymskimi

// algorytm zamieniajacy liczby arabskie na rzymskie

void zamien( int x, int n )

int g = x/(tab1[n]);
if( g > 0 )
for( int i = 0; i < g; i++ )

printf("%s", tab2[n] );

x = x - g*(tab1[n]);
if( x > 0 && n < 13 )
zamien( x, n+1 ); /* n +1 -> kiedy zaczynasz od 1000; n-1 -> kiedy zaczynasz od 1 */


int main(int argc, char* argv[])

// program wlasciwy


int L1;
clrscr();
printf("\rProgram zamieniajacy liczby arabskie na rzymskie:\r\n\n");
printf("\rWprowadz calkowita liczbe arabska z przedzialu od 1 do 9999: ");
for(int i=1; i<argc; i++) // program wczytuje parametry przy uruchamianiu

printf("\n arg %d: %s ", i, argv);

scanf("%d",&L1);
if (L1>0 && L1<10000)


printf("\r\n%d -> ", L1);
zamien( L1, 0 ); /* 0 -> zaczynaj od 1000 ;12 -> zaczynaj od 1 */



else
printf("\r\nNieprawidlowa liczba!");
printf("\r\n\nNacisnij dowolny klawisz aby zakonczyc dzialanie programu.\n\n");

getch();
return 0;


Program wypisuje mi na ekranie liczbe ktora wprowadzam wpisujac parametr np: arab2rzym.exe 60, to pokazuje mi ta liczbe ktora wpisalem, ale za cholere nie moge jej polaczyc z tym zeby od razu mi ja zamienial na rzymska :/ Probowalem wszystkich znanym mi sposobow (wskazniki, przypisanie itp.) i nie udalo mi sie :( Blagam ma ktos jakis pomysl jak to zrobic?

2. Drugie moje pytanie brzmi: co trzeba wpisac w Run -> Arguments zebym mogl w procesie krokowym sledzic na bierzaca jak zmienia sie jakas zmienna na przyklad i ? Z gory dzieki za odpowiedz :)

Edit:
fftc --> w swoim kodzie masz w pewnym miejscu READ<'C: '); moze to m.in. przez to? Ja sie tam nie znam jakby co :P

24.11.2006
16:03
[21]

fifalk [ fifalkowiec ]

1 - nie wglebialem sie w kod, bo te robaczki z c zamiast zwyklego cout z c++ mnie odstraszaja ;-), ale np. zmien funkcje zamien tak, zeby zwracala tablice char i wyswietlajac komunikat zrob
printf(zamien(...))
2- jakie srodowisko?

25.11.2006
17:53
[22]

«Malakai» [ Pretorianin ]

Ok tylko teraz jak zmieniam tablice na int to po wpisaniu w funkcji zamien wywala mi jakis blad :/

Srodowiski to Borland C for DOS...

26.11.2006
14:35
[23]

diabelek1 [ szczęśliwy ]

Witam, mam pytanko dotyczace C++.

Jak wczytac dowolny plik do programu? Otoz pisze program do kompresji/dekompresji. Wczytywanie plikow tekstowych i skopresowanie ich nie stwarza zadnego problemu. Natmiast jak czytuje grafike, to zaleznie od pliku zosatje wczytanych tylko kilka pierwszych bajtow. Poki co korzystam z:

if (OpenDialog1->Execute())

FILE *plik;
char temp;
sourceName=OpenDialog1->FileName;
plik = fopen(sourceName.c_str(),"r");
while(fscanf(plik, "%c", &temp)!=EOF)

source->Text=source->Text+temp;



source to jest obiekt typu TEdit (program pisze w bulderze)

26.11.2006
15:39
smile
[24]

slowik [ NightInGale ]

moze i tutaj dam zapytanie :-)
https://forumarchiwum.gry-online.pl/S043archiwum.asp?ID=5687619&N=1

30.11.2006
16:51
[25]

Karl_o [ maniaC ]

ja mam taka mala prosbe, otoz moglby mi ktos pokrotce wyjasnic jak dziala typ wyliczeniowy enum? Najlepiej na jakims prostym przykladzie. Z gory dziekuje.

30.11.2006
17:42
[26]

Karl_o [ maniaC ]

^up

30.11.2006
21:47
[27]

fifalk [ fifalkowiec ]

Karl_o --> generalnie chodzi o to, zeby np. zamiast uzywac zapisow typu
dzien_tygodnia = 1;
uzywac zapisow bardziej zrozumialych typu:
dzien_tygodnia = poniedzialek.
tutaj masz ladnie opisane z przykladami:

10.12.2006
13:12
[28]

orofarek [ Legionista ]

Czesc, mam pewien problem z programikiem. Mianowicie ma on za zadanie sprawdzic, czy zawartosci dwoch tablic, jesli sa tej samej dlugosci, sa takie same i wypisac TAK lub NIE. Wymyslilem cos takiego:

if (dlugosc1==dlugosc2)

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

if (liczba1<i>==liczba2<i>)
temp=1;
if (liczba1<i>!=liczba2<i>)

temp=0;
break;


if (temp==1)
printf("%s","TAK");
else printf("%s","NIE");


gdzie dlugosc1 i dlugosc2 to dlugosci tablic odpowiednio liczba1 oraz liczba2. Nie wiem czemu, ale program nie wchodzi w ogole do fora. Jakby go ignorowal. Co bym do petli for nie wpisal, program zawsze wypisuje NIE, nawet jesli powinien wpisac TAK. Za zmienne na pewno podstawiane sa prawidlowe wartosci, bo sprawdzalem je wielokrotnie i na rozne sposoby. Nie wiem tylko dlaczego program olewa tego fora. Ktos moze pomoc?

Nawiasy kwadratowe zastapilem <>.

10.12.2006
18:33
[29]

hotDog [ Outsider ]

Używasz gdzieś wcześniej zmiennej "i"?

zdefiniuj nową zmienną lokalną "i" lub "j" dla for'a

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

lub

for (int j=0; j<dlugosc1; j++)


bo z tego co widzę to prawdopodobnie wcześniej gdzieś używasz "i" i ona już ma wartość równą lub większą od zmiennej dlugosc1 i dlatego for w ogóle się nie wykonuje.

12.12.2006
00:02
[30]

Katane [ Useful Idiot ]

Witam.

Jak powszechnie wiadomo, na ogol wszystkie metody klas opartych na szablonach definiuje sie w plikach naglowkowych. Podobno prawie kazdy kompilator udostepnia zmienna czasu kompilacji, ktora sprawia, ze kompilator akceptuje definicje tych funkcji w plikach cpp - tak jak wtedy, gdy nie uzywamy szablonow. Czy ktos moze tego uzywal w g++ i moze mi podac to polecenie? Oszczedzi mi tym samym przekopywania sie przez dokumentacje :) Bylbym bardzo wdzieczny.

12.12.2006
19:11
[31]

cwirek [ Centurion ]

Mam malutki problem, muszę napisać program wypełniający wielokąty danym kolorem. Problem jest w tym, że chcę żeby użytkownik sam wpisywał kolor wypełnienia. Niestety nie wiem jak podstawić wpisaną przez użytkownika wartość, tak żeby została podmieniona w programie.
Tak ustalam kolor rysowania:
Form1->Canvas->Pen->Color=clRed;
Wpisany przez użytkownika kolor pobieram z Edita.
Przy próbie podstawienia tego koloru:
Form1->Canvas->Pen->Color=clRed=Form1->Edit1->Text;
co oczywiste nie jest możliwe kompilator wyrzuca błąd:
"Cannot convert 'AnsiString' to 'TColor'".
Jest jakiś inny sposób na podstawienie tekstu z edita albo jak mnożna skonwertować ten tekst na 'TColor'.

12.12.2006
19:38
[32]

cwirek [ Centurion ]

Pomoc już nie jest potrzebna, znalazłem funkcję konwertującą. Poniżej ją zamieszczam, może komuś się przyda:
AnsiString ansi_string = "clBtnText";
TColor color = StringToColor(ansi_string);
AnsiString color_string = ColorToString(clWhite);

13.12.2006
21:02
[33]

Moshimo [ FullMetal ]

Problem :/.
Potrzebuje wykonac program, ktory wczyta jako obiekt klasy string jakies zdanie z klawiatury. Nastepnie podzieli je na konkretne wyrazy i jeszcze pare innych rzeczy.
Aby dojsc do dzielenia, pomyslalem, ze bede po kolei sprawdzal kolejne literki obiektu i gdybym trafil na spacje, to bym jakos zapisywal wyraz w innej zmiennej czy cos..
Problem sie niestety juz pojawia w samej spacji, gdy zalozmy wpisze (za pomoca cin) do obiektu o nazwie zdanie: "jakies zdanie"
i pozniej probuje sie odwolac do poszczegolnych literek za pomoca zdanie[0], zdanie[1] itd..
to wyswietla mi sie
j
a
k
i
e
s

N
S
E
R
Nie rozumiem skad te koncowe litery? Takze gdy chce wyswietlic cale zdanie, to wypisuje mi tylko "jakies", jakby kompilator spacje traktowal jako symbol konca lancucha..
Moglby mi to ktos wytlumaczyc jakos? Bardzo prosze.

13.12.2006
21:32
[34]

hotDog [ Outsider ]

Strumień cin spacje lub przejście do nowej linii (enter) traktuje jako znak końca i przerywa wczytywanie.


Musisz użyć funkcji getline lub podobnych, np.

13.12.2006
21:37
smile
[35]

Moshimo [ FullMetal ]

Zgadza sie :).
Dziekuje Ci serdecznie

17.12.2006
19:44
smile
[36]

fifalk [ fifalkowiec ]

w c/c++ pisalem glownie pod windowsem. mam taki problem w linuksie - prosty kod:

struct mojtyp

int nr;
int nr2;
›;

int main(int argc, char* argv[])

mojtyp a; //<--- blad


nie kompiluje sie pod gcc - dostaje komunikat, ze mojtyp jest undeclared. inne kompilatory (win) lykaja ten kod bez problemow. co jest nie tak?

17.12.2006
19:46
[37]

hotDog [ Outsider ]

Spróbuj skompilować pod g++ zamiast gcc

18.12.2006
01:41
[38]

slowik [ NightInGale ]

fifalk===>to prawa dzialac niema zdefiniowales strukture a nie wlasny typ

zmienne pozniej deklarujesz w sposob: struct mojtyp zmienna;

albo tworzysz odrazu typ czyli : typedef struct ‹› mojtyp;
i wtedy dziala: mojtyp zmienna;

18.12.2006
11:51
smile
[39]

fifalk [ fifalkowiec ]

hotDog --> tak, pod g++ sie kompiluje, tylko ze musze to pozniej przekompilowac pod gcc - takie wymagania co do zadania.... :-/

slowik --> a jednak w VS i g++ dziala bez definiowania typu :-) dzieki za pomoc - zrobilem tak jak pisales i smiga :-)
edit: chociaz teraz widze, ze w VS mialem projekt jako c++ - moze tu jest ten szczegol.

18.12.2006
13:20
[40]

umek [ Szczęśliwy Konfident ]

Witajcie. Mam zadanie na infę, w którym muszę albo a. dodać do siebie 2 liczby w systemie trójkowym, albo b. przeliczyć liczby z systemu trójkowego na dziesietny i z powrotem... wiecie, jak to zrobić?

18.12.2006
14:32
smile
[41]

hotDog [ Outsider ]

fifalk --> heh zawsze czegoś nowego się człowiek nauczy :-)

umek --> na litość... 23 sekundy szukania w google:

18.12.2006
16:50
smile
[42]

slowik [ NightInGale ]

fifalk===>jest jednak roznica pomiedzy c a c++ ;-)

19.12.2006
13:52
[43]

umek [ Szczęśliwy Konfident ]

wybaczcie, faktycznie, poszedłem na łatwiznę... thx za odp

19.12.2006
16:12
smile
[44]

hotDog [ Outsider ]

Internet rozleniwia ;-)

19.12.2006
16:19
[45]

Scatterhead [ łapaj dzień ]

fifalk ->

Ten błąd to pozostałości po C. Żeby korzystać dalej w programie z poprostu z typu mojtyp - możesz dodać linijkę:


typedef struct mojtyp mojtyp

(mam nadzieję że się nie pomyliłem w składni, dawno temu to robiłem)

21.12.2006
21:58
[46]

Jan Maria Rakieta [ Konsul ]

Pytanie o Pythona. Jak skompilować projekt?

Znalazłem np. kod źródłowy kalkulatora razem z obrazkiem: niestety nie mam pojęcia co zrobić, aby widzieć kalkulator jak na dołączonym obrazku?

Dzięki.

21.12.2006
22:01
smile
[47]

slowik [ NightInGale ]

Rakieta===>google i 'lamerskie wprowadzenie do pythona' ;-) i www.python.org sciagniej sobie interpreter

kompilacja tego to juz troche wiecej zabawy ja uzywam do tego bat'a i kilku dodatkowych bibliotek pyton'a

21.12.2006
22:14
[48]

Jan Maria Rakieta [ Konsul ]

Mam interpreter, mam nawet lamerskiego PythonWina ;-P ale nie mam pojęcia o komiplacji. W LWP nie ma ani słowa o kompilacji, CTRL+F + "kompilacja" = zero wyników, coś tam tylko o tym wspominają, zupełnie jakby to była przy Pythonie czarna magia. Widzę po tym co napisałeś, że tak jest naprawdę. Jakich bibliotek używasz i jakiego bata? :) Już wbrew pozorm trochę piszę (kilka godzin ^^), nawet kalkulator nasmarowałem (i działał!). Trochę mnie przytłoczyło to, że zamiast tego skryptu można przecież wpisać "2+2" i osiągnie się taki sam wynik, ale... :-P

21.12.2006
22:40
[49]

slowik [ NightInGale ]

te 2+2 to uroki interpretowania skryptu :-) jak kompiluje ? gdzies znalazlem go i opis czego wymaga potrzebowac napewno bedziesz py2exe gtk jakiegos 7zip'a moge na maila podrzucic go jesli chcesz

21.12.2006
22:42
smile
[50]

Jan Maria Rakieta [ Konsul ]

Jakbyś mógł byłbym bardzo wdzięczny :)

[email protected] ;)))

29.12.2006
19:48
[51]

Veladorn [ Legionista ]

Witam,

mam pewien (zdawałoby się) trywialny problem - przepisanie danych (typu int) z jednego pliku, do dwóch innych z podziałem na te ze znakiem i bez. O ile, w przypadku klasycznego C nie ma tu większej filozofii, to jeśli idzie o C++ - stoję w miejscu.

Próbowałem korzystać z metod ifstream, ale większość z nich działa z użyciem typu char, a to mi nie odpowiada. Również "typowe" przypisanie strumienia (obiektu klasy ifstream, przypisanego do mojego pliku) do zmiennej nie działa, ponieważ ostatni element pliku zostaje przepisany dwukrotnie. Powoli kończą mi się pomysly, więc byłbym wdzięczny za ewentualne sugestie.

Pozdrawiam,
veladorn.

29.12.2006
20:07
[52]

Pirix [ ! KB ! Góry górą ]

Witam

Dawno tu nie zaglądałem, ale konieczność mnie zmusiła do wizyty w kąciku.
Mam taki problem. Program, który piszę łączy kilka podprogramów za pomocą menu. Jeden z podprogramów zamienia znaki tabulacji w pliku na trzy znaki spacji. I dopóki był to osobny program nie było problemu. Gdy stał się on funkcją w programie zbiorczym to problem wystąpił. Plik, w którym ma nastąpić zmiana tabulacji na spacje podaje użytkownik w trakcie działania programu. Podobnie jest z plikiem, do którego program zapisuje wynik działania.
Problem polega na tym, że plik wynikowy po zakończeniu działania programu pozostaje pusty. Nie widzę błędu w kodzie - może ktoś z Was go znajdzie. Fragment kodu odpowiadający za zmiany znaków pozostał bez żadnych zmian z pierwszej wersji, gdy był to osobny program - wtedy wszystko działało.

Kod funkcji zamieniającej tabulacje na spacje:

#include<stdio.h>
#include<stdlib.h>

FILE *wej;
FILE *wyj;

int tab()

char wejt[20];
char wyjt[20];

printf("plik wejsciowy: \n");
scanf("%s", &wejt);
printf("plik wyjsciowy: %s\n", wejt);
scanf("%s", &wyjt);

wej = fopen(wejt, "r");
wyj = fopen(wyjt, "w");
int c;


if (!wej)

printf("Nie udało się otworzyć pliku %s!\n", wej);
fclose(wej);
exit(1);

if (!wyj)

printf("Nie udało się otworzyć pliku %s!\n", wyj);
fclose(wyj);
exit(1);


while (!EOF)

c = fgetc(wej);


if(c == '\t')

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

fputc(' ', wyj);


else

fputc(c, wyj);




fclose(wej);
fclose(wyj);

menu();



Próbowałem pobierać nazwy plików wejściowego i wyjściowego za pomocą funkci gets() lub fgets() jednak wtedy program nie czekał na wpisanie tych nazw nawet. Dopiero wersja ze scanf() zadziałała.

29.12.2006
20:51
[53]

slowik [ NightInGale ]

Veladorn===>a czegos takiego jak odczyt binarny probowales ?

Pirix===>moze po prostu do funkcji przekazuj wskaznik do pliku nad ktorym pracujesz lub przed wywolaniem funkcji od tabulacji zamknij plik nad ktorym pracujesz przemiel go i ponowinie otworz

30.12.2006
11:13
[54]

Pirix [ ! KB ! Góry górą ]

slowik---> przed wywołaniem funkcji tab() nie jest używany żaden inny plik. Dopiero po uruchomieniu tej funkcji użytkownik ma podać jaki plik chce zmieniać. Nie mogę go zapytać o to wcześniej bo nie wiem, czy będzie chciał uruchamiać ten podprogram czy też inny.

30.12.2006
14:00
[55]

slowik [ NightInGale ]

Pirix===>rozumiem ze ten podprogram jest odzielnie kompilowany

30.12.2006
15:37
[56]

nagytow [ Firestarter ]

Pirix -->

Troche czasu minelo od kiedy programowalem w C, ale z tego co pamietam, to tam nie ma stalej EOF. W zwiazku z tym program nigdy nie wchodzi do petli while. Moja modyfkacja:

while ((c = fgetc(wej))!=EOF)

if(c == '\t')

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

fputc(' ', wyj);


else

fputc(c, wyj);



Dodatkowo przy wyswietlaniu bledow przy otwieraniu plikow, wg mnie powinno byc tak, ze jesli jest blad otwarcia pliku wej, to uzywasz fclose(wyj), bo wej i tak nie zostal otwarty, a wyj byc moze tak.

30.12.2006
18:23
[57]

Pirix [ ! KB ! Góry górą ]

slowik--->tak, każdy jest oddzielnie kompilowany.

nagytow ---> w c jest stała EOF, i jak wcześniej pisałem ta wersja funkcji działała prawidłowo gdy była oddzielnym programem, aczkolwiek spróbuję zastosować Twoją sugestię. Co do zamykania pliku podczas błędu otwarcia to faktycznie wprowadzę drobne zmiany i dodam zamykanie również drugiego pliku.

06.01.2007
19:04
[58]

Moshimo [ FullMetal ]

Mam takie pytanko, czy da sie tak zrobic, zeby w instrukcji switch...case ktorys case obslugiwal np dwie liczby? W sensie ze przykladowo gdy wybierzemy 4 lub 5, to wywola sie jeden case.

06.01.2007
19:13
[59]

Sir Skull [ Charr Shaman ]

Moshimo --> Wszystko się da.

case 'cos":
case 'cos innego':
wykonajCos();

06.01.2007
19:16
[60]

Moshimo [ FullMetal ]

wykonajCos();
Nie do konca rozumiem. Jakim poleceniem mam sie cofnac do poprzedniego case'a?

06.01.2007
19:24
[61]

Sir Skull [ Charr Shaman ]

W moim przykładzie wykonajCos() wywoła się dla 'cos' i dla 'cos innego'. Taki jest switch po prostu.

06.01.2007
19:30
[62]

Moshimo [ FullMetal ]

Aha czaje. No fakt, dosyc przyjemne rozwiazanie :). Dzieki!

06.01.2007
23:18
smile
[63]

Moshimo [ FullMetal ]

Znow mam problem. Nie mam pojecia jak w C wyslac do funkcji macierz - tablice dwuwymiarowa. Jednowymiarowa wysyla bez problemu - poprzez wskaznik. Ale przy dwuwymiarowej juz krzyczy kompilator, ze jest blad, a konkretniej:
cannot convert `int (*)[2]' to `int*' for argument `1' to `int funkcja(int*)'
Kompilowane w DevC++. Niestety nie mowi mi zbyt duzo ten komunikator. Poratuje mnie ktos?
edit. hmm podwojny mowisz? probowalem ale tez cos sie krzaczylo. Pokombinuje jeszcze.

06.01.2007
23:20
[64]

maczu [ Konsul ]

dawno nie bawilem sie w C, nie chce zadnych demagogii pisac, ale moze podwojny wskaznik..? jest cos takiego **tablica ?

07.01.2007
01:20
[65]

hotDog [ Outsider ]

Wklej kod to będzie łatwiej trochę.

07.01.2007
16:24
[66]

Moshimo [ FullMetal ]

Kod ponad 200 linijek, wiec tak w skrocie:
Mam zadeklarowana tablice dwuwymiarowa macierz1[8][8] przechowujaca macierz zadeklarowana przez uzytkownika (moze do byc dowolna macierz o rozmiarach maksymalnie 8x8).
Nastepnie wklepuje sie tam dane.
I problem jest zeby policzyc odwrotna, gdyz:
Sa na to dwa sposoby:
1. Doczepia sie do niej macierz jedynkowa i probuje sie tak zrobic, zeby to w tej pierwotnej byla macierz jedynkowa - poprzez operacje na wierszach (dodawanie, mnozenie) - automatycznie te same operacje robi sie na doczepionej macierzy. To co wychodzi na koncu z doczepionej to jest wlasnie macierz odwrotna.
Caly algorytm w zasadzie na to mam, jednak jest problem, gdy pojawiaja sie 0 na przekatnej pierwotnej macierzy. Wtedy trzeba poprzestawic wiersze na inne miejsce, zeby nie bylo zadnego 0 na przekatnej. I wlasnie nie mam pojecia, jak to zrobic. Jaki algorytm zapisac, zeby komputer na pewno sprawdzil wszystkie mozliwosci.
2. Korzysta sie z pewnego wzoru, ktory wymaga dzielenia podstawowej macierzy na mniejsze (tzw. dopelnienia macierzy) i wyliczanie z nich wyznacznika. Aby wyliczyc wyznaczniki takich mini-macierzy (tych wyznacznikow jest duzo, bo az tyle ile pol pierwotnej macierzy), najlepiej byloby je wyliczyc w funkcji. Ponownie, samo wyliczenie wyznacznikow umiem zrobic - jesli mam dana macierz. Tu sie wlasnie pojawia problem wyslania macierzy do funkcji, gdyz motyw z dwiema gwiazdkami nie dziala za bardzo :/.
deklaracja funkcji tak wyglada:
float wyznacznik(float *macierz,int il_wierszy, int il_kolumn);
wywolanie
wyznacznik(macierz1,il_wierszy1,il_kolumn1);
Niestety kompilator krzyczy o bledzie, tak jak napisalem wyzej.
Sorki ze tak duzo suchej teorii, ale nie wiem czy jest sens wklepywac caly kod, gdyz problem jest natury wymyslenia sposobu na to.
edit. prawdopodobnie wpadne dopiero w nocy, tylko wtedy bede mial jeszcze czas zeby nad tym posiedziec. Za wszelka udzielona pomoc bede bardzo wdzieczny.

07.01.2007
18:34
[67]

DarkStar [ magister inzynier ]

stworz tablice dynamicznie:

float ** tablica = new float * [8];
for(int i = 0; i < 8 ; i++)

tablica[ i ] = new float[8];


deklaracja funkcji powinna wygladac tak:
void funkcja(float ** tab);

wywolanie:
funkcja(tablica);


nie zapomnij na koniec skasowac tablicy

08.01.2007
10:33
[68]

Pirix [ ! KB ! Góry górą ]

DarkStar--->Moshimo pisze to w C a tam nie ma operatora new. Musiałby chyba użyć zamiast tego malloc();

08.01.2007
10:44
smile
[69]

przemek__ [ PRZEMEK ]

if(zaladowano==0)

while(blad==1)




blad=0;

printf("\n\rPodaj liczbe A:");
if(scanf("%lu",&a)!=1)

blad=1;
fflush(stdin);


printf("\n\rPodaj liczbe B:");
if(scanf("%lu",&b)!=1)

blad=1;
fflush(stdin);


if(a>1000000||b>1000000)
blad=1;

if(a==0||b==0)
blad=1;

if(blad==1)

printf("\nBLAD: wprowadziles bledne dane\n");
printf("\nPodaj dane ponownie (2 LICZBY!)\n");
fflush(stdin);




----------------------------------

Program jest odporny na wprowadzanie liter za sprawą if(scanf("%lu",&a)!=1),
jednak nie wiem czemu, gdy podana liczba A jest liczbą ułamkową to jest zaokrąglana do całości,
a pobieranie liczby B jest pomijane !? Za to jeżeli A jest liczba całkowitą to B jest ładnie zaokrąglana itd. Co zrobić, aby po zaokrągleniu liczby A, nie było pomijane wczytywanie liczby B ???? Liczby A,B to całkowite.

08.01.2007
11:02
[70]

nagytow [ Firestarter ]

Zmien wczytywanie %lu na %f. Zaokraglenie mozesz pozniej sobie zrobic.

09.01.2007
18:40
[71]

Icm [ Konsul ]

Napisać program, który wczytuje napisy podawane przez użytkownika (dopóki nie zrezygnuje on z ich wprowadzania), a następnie podaje liczbę wystąpień wszystkich wprowadzonych napisów. Np. po wprowadzeniu napisów Aaa, Bbb, Aaa, Ccc, Aaa, Bbb powinniśmy otrzymać raport: Aaa 3, Bbb 2, Ccc 1.

Mam takie zadanko do napisania w javie ale mniejsza o język chodzi mi o pomysł. Jak wyciągnąć ilość takich samych wyrazów?

Proszę o pomoc :)

09.01.2007
19:01
[72]

Regis [ ]

Moze cos z HashSet albo Hashmap? O ile pamietam - nie uzywalem tego nigdy - to kazdy string wygeneruje Ci innego hasha (za pomoca metody hashcode), wiec po prostu sprawdzasz (chyba metoda contain) czy w tablicy jest juz element o takim indeksie i jesli tak, to zwiekszasz pole jej odpowiadajace o 1.

Zaznaczam ze pisze 'w ciemno' - byc moze napisalem jakas bzdure w kwestii tego contain, ale generalnie ja bym wlasnie probowal sie oprzec na hashowaniu.

Ew. mozna po prostu wpakowac wszystkie kolejne wyrazy do listy i potem je zliczyc na koniec (bierzesz pierwszy element, sprawdzasz wystapienia takich samych el. i usuwasz potem wszystkie takie same, przechodzac do kolejnego el.)

09.01.2007
19:24
[73]

nagytow [ Firestarter ]

Zalezy jak bardzo to ma byc optymalne, efektywne itp. Najprostsza metoda to chyba zrobic tablice asocjacyjna i zwiekszac jej wartosci. Np:

Aaa -> tab[Aaa]++
Bbb -> tab[Bbb]++
itd.

Potem wystarczy wypisac klucze i wartosci z tablicy.

09.01.2007
20:29
[74]

hotDog [ Outsider ]

Miałem podobne zadanie na zajęciach w poprzednim semestrze.


Zadanie 6b
Zaprojektowac, zaimplementowac oraz przetestowac program pozwalaj , acy
wyznaczyc statystyk, e wyst,epowania znakow ASCII w ci , agu znakow pobranym
ze standardowego wejscia. W rozwi , azaniu pos lu_zyc si , e zasobnikiem asocjacyjnym
map<T, D>.
Zadanie dodatkowe
Program z zadania 6b przebudowac w celu wyznaczania statystyki wyst ,epowania
s low ignoruj , ac wielkosc znakow oraz znaki przestankowe.


rozwiązanie:

#include<iostream>
#include<string>
#include<map>
#include<iterator>


using namespace std;


typedef map<string, int> stat;


int main()


stat s;

string c;

string::size_type pos = c.find_first_of(" ./,\|:;");
while(cin >> c)
s[c]++;

while (pos != string::npos) ‹
//erase
pos = s.find_first_of(" .", pos + 1);


stat::const_iterator i = s.begin();
while (i != s.end())
‹ cout << (*i).first << ": " << (*i).second << " "; i++; ›

return 0;

09.01.2007
20:36
smile
[75]

przemek__ [ PRZEMEK ]

Panowie, dzisiaj 5tka i 4ka z kolokwium (C) :)

Ale nie spoczywam na laurach ;) Jeszcze nie raz będę prosił was o radę i nie raz postaram się pomóc.

Pozdrawiam :)

12.01.2007
06:27
[76]

Moshimo [ FullMetal ]

Panowie, ostatni problem z tym programem.
Wczytywanie z pliku.
Potrzebuje zrobic tak, by macierz (max rozmiary 8x8) byla wpisana w plik, np:
1 0 3
4 -5 6
-7 8 0
Musimy odczytac ten plik i pobrac z niego zmienne do kolejnych elementow tablicy (zalozmy ze mamy z gory dana tablice macierz1[8][8] przewidujaca ewentualny maksymalny rozmiar macierzy.
Szczerze mowiac nie wiem kompletnie jak to zrobic. Wiem juz, jak wczytac plik, ale nie umiem isc strumieniem wdluz i pobierac zmiennych, jak i przejsc do nastepnej linii :/. Niestety nie mam juz kiedy sie na to doksztalcic, dlatego wychodze z prosba do Was, czy moglibyscie napisac przykladowo, jak to powinno wygladac. Wiem ze to lamersko tak o caly kod prosic, ale juz jestem troche zdesperowany.. pozdrawiam

12.01.2007
09:03
[77]

hotDog [ Outsider ]

Zapisuj na początku pliku 2 zmienne dodatkowe - liczba wierszy i liczba kolumny. Po ich wczytaniu odczytasz resztę.


przykładowy plik z macierzami:

3 3

1 0 3
4 -5 6
-7 8 0

1 0 3
4 -5 6
-7 8 0

1 0 3
4 -5 6
-7 8 0


po wczytaniu dwóch pierwszych liczb, czyli po plik >> wiersze >> kolumny;

teraz piszesz pętlę while(!plik.eof()) (czy jakoś tak - nie pamiętam dokładnie)

robisz 2 pętle for z warunkami - pierwsza( i < wiersze), druga zagnieżdżona (i <kolumny)

wczytujesz w każdej dane z pliku do macierzy

zamykasz while'a i po sprawie.

12.01.2007
17:42
smile
[78]

Moshimo [ FullMetal ]

Dzieki bardzo!

18.01.2007
18:37
[79]

milanista [ Brother Of Metal ]

prosze o pomoc przy PHP

mam nastepujacy problem:
mam formularz z buttonem, przekazujacy dane do pliku .php , po kliknieciu ktorego chcialbym zeby uruchomiona zostala instrukcja. I tu pytanie - jakiego warunku uzyc do if-a zeby okreslić wcisniecie tego przycisku?

czyli:

if (button jest wcisniety)

intrukcje


wiem ze to sa podstawy ale jestem z tego zupelnie zielony ;(
z gory dzieki za pomoc

18.01.2007
18:52
smile
[80]

Arxel [ Legend ]

Hm... Ostatnio w szkole zaczęliśmy C++ (nareszcie.. :D)
Korzystamy z Visual C++ ale ja zainstalowałem sobie dev c++ (przyzwyczajenie)
I pojawił się problem. po wykonaniu programu pojawia się wynik i znika okno...

return 0;

nie pomaga...
Znalazłem na sieci jakąś inna komendę, że pojawia się napis Aby zakończyć kliknij dowolny przycisk czy jakoś tak :)

Wie ktoś dlaczego okno się zamyka przy return 0; ? Kiedyś też o to pytałem i w domu normalnie chodziło...
Co do samego programiku to było to bodajże obliczanie miejsc zerowych funkcji kwadratowej. Niestety nie mam go u siebie w domu;]

18.01.2007
18:57
[81]

Regis [ ]

Arxel --> A dlaczego ma sie nie zamykac przy return 0? Jedno z drugim nie ma nic wspolnego. Po return 0 program konczy dzialanie i tyle go widzieli. Ja zawsze przed return pisze while(1). To wybitnie nieelegancka metoda, wiekszosc kompilatorow mnie mocno za to opieprza (ale program kompiluja), ale do testowania programow nadaje sie w sam raz.

18.01.2007
19:02
smile
[82]

Arxel [ Legend ]

ehh..
Jaki ja głupi :D
Faktycznie jest while(1), a nie żadne return 0 :D
Ok Dzięki za pomoc;]
W sumie nie byłoby pytania jakbym odpalił dev c++ i sprawdził na swoje dawne programiki :P

18.01.2007
19:05
[83]

Sainim [ Chor��y ]

Arxel -> Zawsze możesz użyć funkcji specjalnie do tego przeznaczonej: system("pause");

18.01.2007
20:17
[84]

Pirix [ ! KB ! Góry górą ]

Arxel---> można też uruchamiać taki program z wiersza poleceń - wtedy nie trzeba nic do zatrzymywania go na ekranie. A do zatrzymania można też użyć getchar() o ile dobrze pamiętam.

18.01.2007
21:51
[85]

maVes [ Generaďż˝ ]

Ja zawsze do zatrzymania programu używam cin.get(); Po wciśnięciu dowolnego klawisza program wykonuje się dalej.

21.01.2007
20:19
smile
[86]

hotDog [ Outsider ]

Witam!

Szukam dobrego debuggera na gwałt! :-)


Potrzebuję prędko (zaliczenia, zaliczenia!) jakiegoś dobrego i sprawdzonego debuggera, który mi powie czy i gdzie są jakieś wycieki pamięci - coś na kształt Valgrinda na linuxie.

Muszę oddać projekt, a niestety piszę go w bibliotece SDL, której nie mogę zainstalować pod linuxem i muszę pracować na windowsie :C

Polećcie coś do leaków

21.01.2007
20:29
smile
[87]

Sir Skull [ Charr Shaman ]

hotDog --> Ściągnij triala Rational Purify.

24.01.2007
07:31
smile
[88]

Aceofbase [ El Mariachi ]

Drodzy koledzy mam straszliwy, naglacy problem ;/ mam na zaliczenie napisac program - pol-ang slownik; zdecydowalem sie na operacje na stringach, mam jednak ciezka zagwozdke:

W jaki sposob wczytac dane z pliku tekstowego do tablicy stringow tak aby jedna komorke zajmowal jeden wyraz? W pliku mam wszystkie wypisane w jednej linii, oddzielone sa jedynie spacja
Jak ma wygladac funkcja/czesc kodu odopowiedzialna za to?

Jezeli ktos ma jakies inne pomysly czy sugestie tez milo ich wyslucham, szczegolnie ze mam na to jeszcze ok. 9 godzin...

24.01.2007
09:03
[89]

fanlegii79 [ Generaďż˝ ]

Slwonik na tablicy? hmmm, Slownik powinienes zrobic na drzewie sufixowym.

24.01.2007
09:12
[90]

Aceofbase [ El Mariachi ]

dwie tablice - komorki jednej z nich sa przyporzadkowane do komorek drugiej

T1[1]="kot" i T2[1]="cat" itepe

i nie jestem do konca pewien czy wiem nawet co to jest drzewo sufixowe, a juz z pewnoscia czegos takiego uwzgledniac w projekcie nie musze ;] 1 semestr w koncu (i mam nadzieje ze nie ostatni )

24.01.2007
19:08
[91]

fanlegii79 [ Generaďż˝ ]

Drzewno suffixowe znalazlem w podreczniku z pierwszego semestru :)
Jaki jezyk? Rozumiem ze masz dwa pliki w jednym slowa po polsku drugim angielsku, kazdy plika ma jedna linie i sa oddzielone spacjami?

24.01.2007
20:39
[92]

Aceofbase [ El Mariachi ]

heheh, juz sobie (dzieki nieodzownej pomocy pewnego pana z forum wyspecjalizowanego w programowaniu ;)) poradzilem ;]

Jezyk C++, i tak dwa pliki w kazdym wyrazy w jednej linii oddzielone spacjami, a do wczytywania poszlo w ruch otworzenie i zamkniecie strumienia z prosciutka petla wewnatrz. Jeden przedmiot zaliczony ;p zostaly juz tylko cztery xD

24.01.2007
20:41
[93]

DarkStar [ magister inzynier ]

wlasnie, znacie jakies dobre fora poswiecone c++?

24.01.2007
20:47
[94]

Sainim [ Chor��y ]

DarkStar:

24.01.2007
21:12
[95]

Aceofbase [ El Mariachi ]

takze:


24.01.2007
21:32
smile
[96]

DarkStar [ magister inzynier ]

thx:)

26.01.2007
16:10
[97]

Taszunko_Sapa [ Junior ]

Witam. Tak się złożyło, że przyszło mi ostatnimi czasy napisać program, który przy pomocy algorytmu interpolacyjnego Neville'a ma obliczać W(-1) dla konkretnych liczb. Napisałem program w pascalu, jak poniżej z tym, że po uruchomieniu pojawia się "błąd 207: błędna operacja zmiennoprzecinkowa". Byłbym wdzięczny za pomoc w poradzeniu sobie z tym problemem.

Oto program:

program neville;
‹$N+›
uses
crt;

type real= extended;

const
n= 5;
X= -1;
xp: array[0..5] of real= (-2, -1, 2, 6, 10, 11);
yp: array[0..5] of real= (8, 5, -1, -4, 7, 3);

var
i,k: integer;
prog: array[0..n, 0..n] of real;

begin
clrscr;
writeln(' i xi y[xi]');writeln;
for i:=0 to n do
begin
writeln(i:3,' ',xp:8:1,' ',yp:8:1);
end;
writeln;
readkey;
clrscr;
for i:= 0 to n do
begin
for k:= 0 to n do
if k= 0 then prog[i,0]:= yp else
prog[i,k]:=(((X-xp[i-k])*prog[i,k-1]-(X-xp)*prog[i-1,k-1])/(xp-xp[i-1]));

end;
writeln(' k=0 k=1 k=2 k=3 k=4 k=5 ');writeln;
for i:=0 to n do
begin
for k:=0 to n-i do
write(prog[i,k]:6:3,' ');
writeln;
writeln;
end;
readkey;
end.


oraz link do algorytmu Neville'a: (na wszelki wypadek)

Prosiłbym o możliwie jak najszybszą pomoc.


26.01.2007
18:54
[98]

Qbaa [ Senator ]

Taszunko_Sapa
nie wiem co to algorytm nevilla, ale w linijce
prog: array[0..n, 0..n] of real;
walnąłem typ double zamiast real i program hula :)

29.01.2007
10:59
smile
[99]

Taszunko_Sapa [ Junior ]

Qbaa: thx wielkie za pomoc

10.02.2007
21:11
smile
[100]

ronn [ moralizator ]

Wybrałem, że będę pisał "inżynierkę" w Javie. Jako, że wczesniej nie brałem żadnego przedmiotu z Javy, a obowiązkowo programowaliśmy właściwie tylko w c/c++/assembler czy matlab, to kupilem sobie Thinking in Java. Teraz mam pytanie. Eclipse, czy netbeans, czy może nie ma to wielkiego znaczenia?

11.02.2007
03:23
smile
[101]

slowik [ NightInGale ]

a netbeans to nie przypadkiem na komore ?

11.02.2007
08:50
[102]

Katane [ Useful Idiot ]

Eclipse, czy netbeans, czy może nie ma to wielkiego znaczenia?

Przeciez to tylko edytor, sprawdz oba i wybierz ten, ktory bardziej Ci sie spodoba.

11.02.2007
14:19
[103]

ronn [ moralizator ]

No, ale czy oba są tak samo wygodne i funkcjonalne (wiem, ze to kwestia gustu)? Chyba netbeans wezmę.

Mam zamiar napisać aplikacje działającą w sieci pakietowej. Słyszeliście może o sieciach Petriego? Poszukuję jakiejś literatury na ten temat. Po polsku lepiej, mogłaby być po angielsku, ale na komputerze nie mogę długo czytać, a w ksiegarni angielska książka to będzie kilkaset złotych :/

12.02.2007
19:17
smile
[104]

ronn [ moralizator ]

Mój pierwszy banalny program w J :)

Main.java
package program_1;
import java.util.Date;

public class Main ‹

public static void main(String[] args) ‹
System.out.println("Dzisiaj jest :");
System.out.println(new Date());

NewClass test = new NewClass();
test.wypisz();




NewClass.java
package program_1;
import java.util.*;

public class NewClass ‹
static int b = 66;
static char c = 'G';

public NewClass()‹

void wypisz()‹

System.out.println("Oto wartości B i C :");
System.out.println(c);
System.out.println(b);
return;




:D Trzeba szybko iść dalej :)
Trzeba przyznac, ze ciekawa jest, nawet main to obiekt :)

13.02.2007
10:41
smile
[105]

Regis [ ]

Raczej nie obiekt, tylko klasa, ktorej statyczna metode wywolujesz w kazdym programie - wszak obiektu klasy main raczej nigdzie nie tworzysz ;)

A to ze Java jest ciekawa - zgadzam sie. Momentami mnie wkurza tym ze trzeba co chwile przeczesywac dokumentacje, zeby znalezc klase/interfejs ktory robi akurat to, czego potrzebujesz, ale poza tym jest ok ;) Szczegolnie robienie GUI w Javie jest fajne. A jeszcze jak sie to robi w NetBeansach - poezja. Prawie jak w C++ Builderze ;)

16.02.2007
22:32
[106]

SpaceCowboy [ Jenerał ]

Bawi się ktoś może w programie Keil µVision3?

Generalnie rozchodzi się o to, że robie 5efektów migania diodek na jakims porcie, i 6efekt polega na tym, że program zapętla po 5razy każdy z efektów, tzn. 5x efekt1, nastepnie 5x efekt2 itd.

Mógłby mi ktos pomóc to rozminic, bo wszelkie samoistne próby coś nie wypaliły, poza 5krotnym skopiowaniem każdego z efektów, ale to nie to chodzi, mimo że efekt jest chyba identyczny.

16.02.2007
23:15
smile
[107]

SpaceCowboy [ Jenerał ]

Ok nieaktualne. Jakoś sobie poradziłem i zamiast pętli 'while' użyłem 'for'

Wikipedia ftw!

18.02.2007
22:55
[108]

master53 [ PSP User - Sony Fan ]

Mam problem z instalacją Visual C++ 5.0 Express Edition. Pobrałem instalator z MSDN (dziwnie mały, nie całe 3 MB) i po włączeniu, pojawia się małe okienko z paskiem postępu i napisami "Setup is loading installation components. This may take a minute or two.". I tak czekam już godzinę i nic. Jak to zainstalować ?

18.02.2007
23:09
[109]

maVes [ Generaďż˝ ]

master53 -> 5.0? Toż to jakaś staroć :) Ja aktualnie używam VC++ 2005 EE - jest również darmowy, przyjemnie się w nim pracuje i nie miałem żadnych problemów z instalacją.

18.02.2007
23:43
[110]

master53 [ PSP User - Sony Fan ]

maVes ----> Och tak. Chodziło mi o 2005 :) Czy instalator ściąga jakieś pliki w trakcie instalacji z serwera MS ? Może przez to, że firewall go blokuje nie chce instalować.

19.02.2007
11:44
[111]

Regis [ ]

Tzn. sciagnales z MSDN ten plik 'Delivery Client' a potem sciagnales instalator przy jego uzyciu? Czy jak? Ja zawsze sciagalem obrazki .iso plyt, wiec nie wiem jak to przebiega przy pobieraniu samego instalatora. Ale nie licz, ze Visual ma tylko 3Mb - albo cos Ci sie zle sciagnelo i instalator nie dziala jak powinien, albo te "This may take a minute or two" zamienia sie w godziny, albo tez okaze sie ze faktycznie firewall cos blokuje.. Chyba ze to na prawde jakas "Express Edition" - notatnik z kolorowaniem skladni + kompilator C++ :P

19.02.2007
13:49
[112]

master53 [ PSP User - Sony Fan ]

Regis ----> Pobrałem instalator z tego linka ( ). Jak można pobrać obrazki .iso płyt ? Czy nie są one dostępne tylko w MSDN AA ?

19.02.2007
13:51
[113]

DarkStar [ magister inzynier ]

master53 --->

19.02.2007
13:55
[114]

master53 [ PSP User - Sony Fan ]

DarkStar ----> Dzięki ;) Pewnie z .iso będzie śmigać jak marzenie. Mam jeszcze jedno pytanko. Czy do korzystania z Visuala, potrzebna jest jakaś rejestracja ?

19.02.2007
14:07
[115]

maVes [ Generaďż˝ ]

master53 -> z tego co pamiętam, to Visual chodzi bez rejestracji przez 30 dni. Potem trzeba dokonać rejestracji, która jest darmowa :)

22.02.2007
18:17
smile
[116]

ronn [ moralizator ]

Regis --> Fakt, troche nieściśle się wyraziłem. Pisze sobie ciągle łatwe programy. Aktualnie typy wyliczeniowe. Program :

package wyliczenie;
import java.util.*;
enum smak ‹SLODKI, GORZKI, OSTRY, LAGODNY;›
class potrawa ‹
smak jaki;
public potrawa (smak jaki)‹
this.jaki = jaki;
System.out.println("Oto działa konstruktor klasy potrawa");
System.out.println("Z parametrem smak : " +this.jaki);


public void opisz_smak() ‹
System.out.println("Ta potrawa jest : ");
switch (jaki)‹

case SLODKI : System.out.println("Smak : słodki");
break;
case GORZKI : System.out.println("Smak : gorzki");
break;
case OSTRY : System.out.println("Smak : ostry");
break;
case LAGODNY : System.out.println("Smak : lagodny");
break;
default : System.out.println("Brak argumentu");


return;


public class Main ‹

public static void main(String[] args) ‹

potrawa deser = new potrawa(smak.SLODKI);
potrawa cytryna = new potrawa(smak.GORZKI);
potrawa jalapeno = new potrawa(smak.OSTRY);
potrawa herbata = new potrawa(smak.LAGODNY);
deser.opisz_smak();
cytryna.opisz_smak();
jalapeno.opisz_smak();
herbata.opisz_smak();



Tutaj mam błąd. Dlaczego nie moge wywolac metody opisz_smak() na rzecz obiektów typu potrawa?

22.02.2007
18:47
smile
[117]

ronn [ moralizator ]

Dobra, już wiem. Głowiłem się nad tym 45 minut, aż zauważyłem, że po wykomentowaniu tego fragmentu i uruchomieniu programu, konstruktor nie informuje o swoim działaniu. Wtedy zorientowałem się, że błąd musi być z gatunku debilnych i w rezultacie zauważylem, że w main() mam jeden nawias za wcześnie :)

25.02.2007
20:52
smile
[118]

ronn [ moralizator ]

Ok, znowu ja :)

Program :

package rzutowanie;
import java.util.*;
class amphibian ‹
int a, b;
String str;
amphibian ()‹
this.a = 3;
this.b = 99;
this.str = "Jestem płazem, a to działa mój konstruktor";


public String toString()‹
return " A = "+a+" B = "+b+"STR = " +str;

static void funkcja(amphibian a)‹
System.out.println(a);
return;



class frog extends amphibian ‹
String s;
frog()‹
String s = "Jestem żabą, podtypem płaza";



public String toString()‹
return "drugi string "+s+ super.toString();




public class Main ‹

public static void main(String[] args) ‹
frog zaba = new frog();
amphibian.funkcja(zaba);
System.out.println(zaba);




Efekt : To co chcialem, zeby dzialalo : dziala. Problem w tym, ze string "s" z klasy zaba wyswietla sie jako null po skompilowaniu, a przecież konstruktor go inicjalizuje.

01.03.2007
19:55
smile
[119]

Deton [ Konsul ]

Dopiero zaczynam sie uczyc C++, napisałem coś takiego:

#include <iostream.h>
int main() ‹
cout << "Czolem, ludziska!";


I niestety po skompilowaniu, stworzony plik .exe nie chce sie wyswietlic tzn. nic sie nie dzieje.
W kursie ( przeczytalem:

"Możliwe, że zaraz po wyświetleniu tekstu okienko konsoli zniknie, bo system zazwyczaj zamyka okna programów konsolowych, które się zakończyły. Ustaw więc w systemie tak, żeby okna nie zamykały się automatycznie, bo inaczej nie zobaczysz efektów działania twoich programów. "

Niestety nie wiem jak to zrobić, pomocy!

01.03.2007
20:03
[120]

peanut [ kriegsmaschine ]

system("PAUSE");

01.03.2007
20:14
[121]

Deton [ Konsul ]

#include <iostream.h>
int main() ‹
cout << "Czolem, ludziska!";
system("PAUSE");



TAK?

Skompilowałem to i otwiera sie okienko z napisem "Aby kontyunowac wcisnij dowolny klawisz..."
gdy wciskam to okienko sie zamyka, o co chodzi?!
Napiszcie jak powinno byc poprawnie, please?

01.03.2007
20:44
[122]

hctkko [ The Prodigy ]

a nie lepiej
getchar();
? nic dodatkowego sie nie wyswietla, system tylko czeka na wcisniecie klawisza.

czyli w sumie trzeba to zrobic tak:
#include <iostream>
#include <cstdio>
using namespace std;
int main()

cout << "Czolem, ludziska!";
getchar();
return 0;

01.03.2007
21:18
smile
[123]

Deton [ Konsul ]

Dzieje sie to samo co poprzednio...
Nie wiem co robię źle...

01.03.2007
21:31
[124]

hctkko [ The Prodigy ]

Kod jest poprawny :P Tylko nie zapomnij zmienić ">" na nawias (po int main() i na samym koncu, bo po cout jest zamierzony ;)
powiedz jeszcze jaki masz kompilator - na dev-c++ wszysko jest ok:

01.03.2007
21:49
smile
[125]

Deton [ Konsul ]

uzywam dev, tylko 5 beta, wlasnie sciagam wersje 4.

Mi sie pojawialo to okienko ale pisalo tylko:
"Aby kontyunowac wcisnij dowolny klawisz..."

Nie było ścieżki do pliku tylko o ile pamietam
C:/(..)cmd32 ;/
moze wersja dev 4 rozwiąze problem...

01.03.2007
22:13
[126]

hctkko [ The Prodigy ]

z betą 5 też miałem problemy. dlatego korzystam z 4 wersji :) a najlepszy i tak jest g++ pod linuxem ;)

01.03.2007
22:49
smile
[127]

Deton [ Konsul ]

Nie idzie mi... Co źle robię?

01.03.2007
23:12
[128]

hctkko [ The Prodigy ]

1) Włączasz Dev-c++
2) File --> New Source File
3) wpisujesz swój kod
4) Execute --> Compile and Run
5) zapisujesz plik jako cpp, plik sie kompiluje i uruchamia

02.03.2007
07:52
smile
[129]

Deton [ Konsul ]

Udało się!
Wielkie dzięki za pomoc i cierpliwość :)
Może sie jeszcze czegos naucze :P

07.03.2007
11:50
[130]

DarkStar [ magister inzynier ]

siemka

znacie jakas metode na wyciagniecie czasu systemowego z dokladnoscia do tysiecznej sekundy?

07.03.2007
12:06
[131]

Mago8 [ Pretorianin ]

Potrzebne są mi definicja obiektu i definicja implementacji w Visual Studio .NET
Jeśli ktoś wie coś na ten temat to bardzo proszę o pomoc.

13.03.2007
19:26
[132]

thenaturat [ Konsul ]

Jak zamienić duże litery w tablicy na małe, nie używając strlwr

13.03.2007
20:24
[133]

maVes [ Generaďż˝ ]

thenaturat ->

W pętli for przejeżdżasz po każdej literze i sprawdzasz warunek:

if ((str >= 'A') && (str <= 'Z'))

str += 32; // bo małe litery leżą o 32 miejsca dalej


13.03.2007
20:50
[134]

maVes [ Generaďż˝ ]

Dopiero teraz zauważyłem, że z mojego posta znikły nawiasy kwadratowe :)
Wszędzie ma być oczywiście str [j] gdzie j to licznik pętli (wcześniej napisałem zamiast j - i, co zapewne skutkuje zmianą formatowania :))

13.03.2007
21:05
[135]

Qbaa [ Senator ]

if ((str[i] >= 'A') && (str[i] <= 'Z'))

str[i] += 32; // bo małe litery leżą o 32 miejsca dalej


maVes wystarczy odznaczyć w okienku dodawania postu "znaczniki"
ps. pomysłowy sposób :)

19.03.2007
16:49
[136]

wishram [ lets dance ]

wpisuje liczbę powiedzmy 123450 do tablicy char jak potem mogę sprawdzić ile ona ma cyfr?
mógłbym jechać od końca aż nie będzie zera ale to wyjdzie mi liczba 12345.
konkretnie to muszę znaleźć dwie ostatnie cyfry liczby powiedzmy 200 cyfrowej jak to zrobić w C?

19.03.2007
16:56
[137]

peanut [ kriegsmaschine ]

char* s = new char[200]; ?

cout<< char[strlen(s)-1]<<char[strlen(s)-2]<<endl;

albo liczyc najpierw dlugosc, a potem tylko -1 i -2, ewentualnie string s i pozniej jakos cout<<s[s.length-1] czy cos, nie wiem bo wole char* ;)

19.03.2007
22:04
[138]

wishram [ lets dance ]

nic z tego nie rozumiem :( poza tym programuje w C

20.03.2007
20:48
[139]

peanut [ kriegsmaschine ]

masz tablice char czyli liter, nie cyfr. tablica znakow to tak naprawde nie tablica a wskaznik do znaku, tylko wskazujacy na odgornie zadeklarowana dlugosc obszaru w pamieci -> char*

char tablica[100] to jest to samo co char* tablica = (char *)malloc(sizeof(char)*101); 101 bo to miejsce na terminator czyli '\0'. dlatego, nie szukasz '0' tylko '\0' jesli masz char* albo char[] bo to jest to samo;)

jesli chcesz dwie ostatnie litery (nie cyfry1), to przy deklarowaniu tablicy uzupelnij ja automatycznie '\0', zeby byla pusta, inaczej pewnie sa w niej jakies ochlapy z pamieci.
pozniej 1 litera od konca:
char ostatniaLitera = tablica[strlen(tablica)-1]
char przedostatniaLitera = tablica[strlen(tablica)-2]

a pozniej rzutowanie albo bezpieczniejsze zdaje sie atoi(), ktore zamienia znak ascii na inta i masz cyfry.


21.03.2007
17:01
[140]

wishram [ lets dance ]

Co robię źle, że to nie działa?

char tablica[200];
char ostatniaLitera;
char przedostatniaLitera;

scanf("%s", &tablica);


ostatniaLitera = tablica[strlen(tablica)-1];
przedostatniaLitera = tablica[strlen(tablica)-2] ;

printf("%s", ostatniaLitera );
printf("%s", przedostatniaLitera );

21.03.2007
17:24
[141]

Regis [ ]

Do 200 elementowej tablicy wpisujesz prawdopodobnie mniej niz 200 znakow i byc moze (nie sprawdzilem, a nie pamietam dokladnie jak ma sie sprawa z takimi 'sztywno' zdefiniowanymi stringami) nie trafiasz w koniec slowa. Sprobuj zamiast "strlen(tablica)" wpisac "strchr(tablica,'\0')" - ta funkcja poda Ci miejsce wystapienia znaku konca slowa (a wiec tego co potrzebujesz) wiec cofniecie sie o jeden znak da Ci rzeczywista ostatnia litere slowa, a nie przedostatnia wartosc z tablicy.

Chociaz przyznam, ze wydawalo mi sie, ze strlen zwroci rzeczywista dlugosc slowa, a nie rozmiar tablicy.

Moze napisz co to znaczy 'nie dziala' - program sie wiesza? Wyskakuja dziwne znaczki?


21.03.2007
17:31
[142]

Regis [ ]

Edit sie skonczyl...

Ech, oczywiscie ze to nie to... Szukalem jakiegos bledu w dobieraniu sie do znakow, a zrobiles podstawowy blad przy wypisywaniu:

printf("%s", ostatniaLitera );
printf("%s", przedostatniaLitera );

POJEDYNCZE ZNAKI WYPISUJEMY PRZEZ %c

21.03.2007
17:37
[143]

wishram [ lets dance ]

po zmianie na:
ostatniaLitera = tablica[ (strchr(tablica,'\0')) -1];
przedostatniaLitera = tablica[ (strchr(tablica, '\0'))-2] ;

wyskakuje błąd kompliacji na tych liniach
array subscript is not an integer

a wcześniejszy program wiesza się

edit// %c : już działa dzięki :) uczę się C dopiero od niedawna i nawet podstaw dobrze nie znam

21.03.2007
17:57
[144]

wishram [ lets dance ]

int a,b,c;
(...)

scanf("%s", &tablica);

ostatniaLitera = tablica[strlen(tablica)-1];
przedostatniaLitera = tablica[strlen(tablica)-2] ;

a = atoi(ostatniaLitera);
b = atoi(przedostatniaLitera) ;

printf("%d\n", a);
printf("%d\n", b);

ale to już się wiesza, o co chodzi?

21.03.2007
19:15
[145]

DarkStar [ magister inzynier ]

pewnie musisz dodac jakas biblioteke - obstawiam stdlib.h

21.03.2007
19:21
[146]

wishram [ lets dance ]

dodałem ale dalej to samo

wyskakuje ostrzeżenie (x2)
[Warning] passing arg 1 of `atoi' makes pointer from integer without a cast

21.03.2007
19:30
[147]

Hansvonb [ Konsul ]

Po prostu błąd konwersji typu.

Jak zadeklarowałeś zmienne 'ostatnialitera' i 'przedostatnialitera' ?

21.03.2007
19:33
[148]

wishram [ lets dance ]

char ostatniaLitera;
char przedostatniaLitera;

21.03.2007
20:26
[149]

peanut [ kriegsmaschine ]

zadeklaruj to jako:

char *ostatniaLitera = tablica[strlen(tablica)-1];
char *przedostatniaLitera = tablica[strlen(tablica)-2];

a pozniej:
int cyfra = atoi(&ostatniaLitera);
int drugaCyfra = atoi(&przedostatniaLitera);

21.03.2007
20:33
[150]

wishram [ lets dance ]

dzięki teraz wszystko chodzi

21.03.2007
23:30
smile
[151]

Filevandrel [ czlowiek o trudnym nicku ]

Jakby ktoś mi mógł wytłumaczyć działanie poleceń fseek, fread i ftell w języku C byłbym niezmiernie wdzięczny

PS. Sprawdzałem w helpie, ale jakos nie jestem w stanie z pomoca samego tylko helpa tego zrozumieć

21.03.2007
23:33
smile
[152]

Czesiek_Alcatraz [ Senator ]

offtop mały

22.03.2007
00:00
[153]

Qbaa [ Senator ]

może ta Pani programowała, jak Ciebie nie było jeszcze na świecie, a teraz chce przejść z asma na c++? :P

22.03.2007
18:16
[154]

Sainim [ Chor��y ]

Filevandrel ->


25.03.2007
20:23
[155]

Raynor [ Big Man ]

Witam,

Studiuję informatykę na pierwszym roku. Mam w tym semestrze naukę C/C++. Są to absolutne podstawy. Pierwsze w moim życiu programy. Chcę zakupić książkę która mi w przejrzysty sposób wydłumaczy podstawy. Macie coś godnego polecenia? Może któraś z książek wymienionych w pierwszym poście? Zależy mi na ksążce łatwej do zrozumienia ale z drugiej strony nie opisującej problemów jak dla pięciolatka. :)

Profesor polecił tą książkę ale może Wy znacie coś lepszego?

25.03.2007
20:29
[156]

Regis [ ]

Bez cienai watpliwosci polece - tradycyjnie juz - "Symfonie C++" J. Grębosza - najlepsza ksiazka o podstawach C++ jaka widzialem.

25.03.2007
21:21
[157]

Qbaa [ Senator ]

ja słyszałem dużo dobrego o "C++. Potęga języka. Od przykładu do przykładu", Andrew Koenig, Barbara E. Moo
mam zamiar ją kupić

25.03.2007
21:41
[158]

peanut [ kriegsmaschine ]

jezyk c++ stroustrupa

25.03.2007
21:43
[159]

maVes [ Generaďż˝ ]

Raynor - ja również polecam Symfonię Standard, gdyż jest to naprawdę świetna książka. A jeśli nie chcesz wydawać kasy, to bardzo dobry jest Megatutorial Xiona "Od zera do gier kodera". Nie przerażaj się nazwą, gdyż tak naprawdę ten kurs opisuje bardzo dokładnie C++ od podstaw. Nie podoba mi się w nim jedynie stosowanie notacji węgierskiej, bo moim zdaniem tylko zaciemnia kod.

peanut - ta książka też jest dobra, napisana wkońcu przez twórcę C++, ale zdecydowanie nie jest to dobra pozycja dla osób które dopiero zaczynają swoją przygodę z programowaniem.

Słyszałem też wiele pozytywnych opinii o "Thinking in C++", jednak mnie ta książka wogóle nie przypadła do gustu :P

25.03.2007
21:54
[160]

peanut [ kriegsmaschine ]

jesli kupowac to akurat stroustrupa, reszte mozna pozyczyc, a thinking in cpp za darmo jest w necie. symfonie widzialem i wydala mi sie jakas taka mocno prymitywna, nie wiem czemu wam sie tak podoba;)

25.03.2007
23:32
smile
[161]

slowik [ NightInGale ]

maVes===>co jest nieczytelnego w tej notacji ? jak dla mnie jest dosc czytelna (sam uzywam GNU )

Raynor===>kumple ryli w 'szkoła programowania - język C' (tez jest do c++) i sie im to podobalo
do symfonii nic nie mam jednak powinna zostac w tej chwili troche przerobiona jednak na poczatek w sam raz

26.03.2007
00:07
smile
[162]

Raynor [ Big Man ]

Dziekuje wszystkim za tytuły. Chyba zdecyduję się na tą "Symfonię C++".

26.03.2007
15:10
[163]

maVes [ Generaďż˝ ]

slowik -> moim zdaniem taka notacja może trochę odstraszać początkujących. Uważam że stosowanie jej w takich językach jak C++ mija się z celem, co innego np. w PHP. Oczywiście z czasem każdy wyrabia swój własny styl pisania :)

Raynor -> tylko nie kupuj przypadkiem "zwykłej" Symfonii, tylko tę nową, Symfonia Standard. Najnowsze wydanie jest chyba dwutomowe.

27.03.2007
15:02
smile
[164]

âřßůž® [ Pretorianin ]

Witam

Mam prosbe. Zna ktos moze jakies ciekawe linki odnosnie javy? i nie chodzi mi tu o tutoriale z firmy sun :) tylko najlepiej polskie strony ( ale nie koniecznie) . Bardzo by mi sie przydaly te linki - dodatkowe pkty z przedmiotu :)
z gory thx

27.03.2007
15:06
[165]

Kozako2 [ Pretorianin ]

najlepiej jest i tak czytać instrukcje albo samemu wymyślać komendy ja tak sie osobiście uczę

27.03.2007
17:13
[166]

slowik [ NightInGale ]

âřßůž®===>zajrzyj tutaj (trzeba sie zarejestrowac tylko) no i podstawy jakiegos innego jezyka juz powinienes miec od poczatku moze byc troche ciezko


Kozako2===> jakie komendy !? o zgrozo ...

28.03.2007
14:39
smile
[167]

âřßůž® [ Pretorianin ]

Ponawiam prosbe o linki z tutorialami itp. do javy.

Moj cwiczeniowiec zbiera ciekawe stronki traktujace o javie, kto podesle mu linki dostaje dodatkowe punkty (moze sie wczesniej zle wyrazilem :D) - dlatego to dla mnie takie wazne ;]

28.03.2007
15:41
[168]

ronn [ moralizator ]

Jaka jest najlepsza biblioteka do rysowania 2d w Javie?

28.03.2007
16:21
[169]

Regis [ ]

Swing :P

28.03.2007
16:30
[170]

ronn [ moralizator ]

;P

[edit]

Wywaliłem problem, bo mam rozwiazanie :
float a1 = java.lang.Float.parseFloat(xA);

(pozbycie sie dwuznacznosci)

28.03.2007
21:56
[171]

Qbaa [ Senator ]

âřßůž®
- czytając "ciekawe" i "java" w jednym zdaniu przypomniałem sobie tylko o Perlinie :)
- a tylko tego linka znalazłem u siebie

28.03.2007
21:57
smile
[172]

Golem6 [ Gorilla The Sixth ]

A ja mam takie pytanie.
Zajmował się ktoś już kiedyś POV-Ray'em?

Prosty w obsłudze program do programowania obrazów. Prosty przykład mojej roboty w chwili nudy ->

28.03.2007
22:33
[173]

Regis [ ]

Ja sie zajmowalem. Ale na moim Duronie 650 ktory wtedy mialem wyrenderowanie byle gownianego kieliszka zajmowalo parenascie minut, wiec sobie darowalem ;)

28.03.2007
22:50
smile
[174]

hotDog [ Outsider ]

no Pov-Ray jest ciekawy.

Widziałem animację jednego gościa z wyższego roku i byłem pod wrażeniem możliwości Pov-Ray'a.

30.03.2007
14:18
smile
[175]

ronn [ moralizator ]

Hm, jeśli ktoś byłby w stanie pomóć. Oto kod źródłowy :

1.
public class Main ‹

public static void main(String[] args) ‹
SwingConsole.run(new Function(), 500, 450);





2.
public class SwingConsole ‹
public static void run (final JFrame f, final int width, final int height)‹
SwingUtilities.invokeLater(new Runnable()‹
public void run()‹
f.setTitle(f.getClass().getSimpleName());
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setSize(width, height);
f.setVisible(true);

›);


3.
public class Draw extends JPanel ‹
private Point2D.Double[] res;
private int points;
JTextField a = new JTextField("7", 8),
b = new JTextField("4", 8),
c = new JTextField("8", 8);
JTextField range_s = new JTextField("-100", 8),
range_e = new JTextField("100", 8);


public Point2D.Double calculate(int x)‹
String xA = a.getText();
String xB = b.getText();
String xC = c.getText();

float a1 = java.lang.Float.parseFloat(xA);
float a2 = java.lang.Float.parseFloat(xB);
float a3 = java.lang.Float.parseFloat(xC);

double r = a1*x*x + a2*x + a3;
return new Point2D.Double(x, r);



public Point2D.Double[] calculateAll()‹
String start = range_s.getText();
String end = range_e.getText();
int st = java.lang.Integer.parseInt(start);
int en = java.lang.Integer.parseInt(end);
Point2D.Double[] wyniki = new Point2D.Double[en-st];
int ta = 0;
for(int x = st; x<en ;x++)‹
wyniki[ta] = calculate(x);
ta++;

return wyniki;


public void paintComponent(Graphics g)‹
super.paintComponent(g);
Point2D.Double dane[] = calculateAll();
g.setColor(Color.GREEN);
for(int i = 0 ; i < dane.length - 1 ; i++)‹
g.drawLine((int)dane.getX(), (int)dane.getY(), (int)dane[i+1].getX(), (int)dane[i+1].getY());




public Draw()‹
set();


public void set()‹

repaint();

class Function extends JFrame ‹
private Draw dr = new Draw();
Function()‹
JButton but = new JButton("Rysuj");
setLayout(new FlowLayout());
add(dr);
add(but);
but.addActionListener(new MyListener());


class MyListener implements ActionListener ‹
public void actionPerformed(ActionEvent e)‹
set();





--

Program ma rysować wykres funkcji kwadratowej wprowadzonej przez uzytkownika. Mam kilka pytan :
1. Program, "cos-tam" rysuje, ale rozmiar jest mikroskopijny.
2. Dlaczego nie widac w ramce JTextFieldow z klasy Draw?
3. Jak to naprawić? :)

30.03.2007
18:08
[176]

ronn [ moralizator ]

Domyślam się, że przyda mi sie jakis scalling albo autoscalling, jednak na razie ciekawi mnie dlaczwgo, te pola tekstowe nie sa widoczne? Probowalem juz roznych rzeczy, umieszczalem je w odzielnej klasie dziedziczacej po JFrame.. ;/

01.04.2007
17:40
[177]

peanut [ kriegsmaschine ]

mam dziwny problem ze wskaznikami w cpp.
mam dwie klasy, ktore nie dziedzicza nic po sobie. obie posiadaja wenetrzne funkcje, a dodatkowo wskazniki na odrebne klasy, tzn. sa ze soba polaczone.

przed implementacja klasy deklaruje ich istnienie poprzez class A; class B;
problem pojawia sie przy wywolaniu funkcji dla klasy B, poprzez wskaznik na B z klasy A;
czyli mam:

class A; class B;

class A‹
B* ptrb;
ptrb->jakasfunkcja›;

class B‹
A*ptra;
jakasfunkcja()
›;

dev zglasza takie oto bledy:

\Dev-Cpp\main.cpp invalid use of undefined type `struct B'
\Dev-Cpp\main.cpp forward declaration of `struct B'

domyslam sie, ze cos jest zle zadeklarowane, ale google mi pomoc nie potrafi...

06.04.2007
23:03
[178]

Andrzej Lepparkour [ Konsul ]

Jak brzmi nazwa trybu napisowego C++?

Chciałem wprowadzić tekst przez konsolę, niestety w C++ niewiele pisałem a i kursy mi nie pomogły. Używam najnowszego DevC++ dla Windows. Wyczytałem, że wystarczy dołączyć plik nagłówkowy string.h i wrzucić na początku programu string blabla i powinno działać, niestety tak nie jest. Przykładowy kod (wprowadzenie imienia):

#include <stdio.h>
#include <iostream.h>
#include <string.h>

int main(int argc, char *argv[])


string imie;
cout << "Podaj imie: ";
cin >> imie;
getchar();

return 0;


Wyglada na to, ze typ "string" w ogole nie istnieje (przynajmniej moj kompilator go nie rozpoznaje). Pewnie trzeba zrobic jakis myk z charem, zeby moc wprowadzac przez konsole dluzsze teksty? Dzieki za pomoc.

06.04.2007
23:12
[179]

hotDog [ Outsider ]

Musisz określić przestrzeń nazw dla typu string. Robi się to pisząc: std::string

Przestrzeń nazw std odnosi się również do cout oraz cin, więc przed nimi też musisz to dopisać.

Żeby nie dopisywać std:: wszędzie tam gdzie się korzysta z tej przestrzeni, można napisać po includach (a przed main)taką linijkę:

using namespace std;

i już nie potrzeba wtedy dopisywać w kodzie std::

07.04.2007
01:06
smile
[180]

Andrzej Lepparkour [ Konsul ]

hotDog, to wina DevCpp w takim razie? Nie muszę "std" dopisywać przed cout/cin, a jak dopiszę przed "string" lub za nagłówkami mam 5 błędów.

Wersja DevCpp to stabilna non-beta 4.0... Więc pewnie ja coś robię nie tak, bo słyszałem, że ten kompiler jest całkiem przyzwoity?

Dzięki.

07.04.2007
09:35
[181]

hotDog [ Outsider ]

spróbuj:

#include <iostream>
#include <string>

07.04.2007
11:21
[182]

Andrzej Lepparkour [ Konsul ]

Dzieki, zaraz sprawdze, ale chyba to to :)

09.04.2007
15:17
smile
[183]

wishram [ lets dance ]

mam tablicę:

char tablica1[200];

potem wczytuję ją:

scanf("%s", &tablica1); //powiedzmy, że wczytuje: 1234

następnie chce dopisać na końcu np. 0
i robię:

tablica1[ strlen(tablica1) ] = 48;

otrzymuje 1234%$* i jakies krzaczaki czyli jest blad
w ostatniej komorce przechowywany jest znak null i co nie moge juz nic do niej dopisac? miejsce jest (char tablica[200]), jak to zrobic (dopisac cos do tej tablicy) czemu nie dziala?

09.04.2007
15:23
[184]

peanut [ kriegsmaschine ]

bo nie wyzerowales tablicy przed jej uzyciem. daj jakas petle na dlugosc tablicy, ktora ja uzupelni w stylu c '\0' ;)

09.04.2007
15:49
[185]

wishram [ lets dance ]

rzeczywiscie teraz dziala, dzieki :)

17.04.2007
17:23
[186]

PAW666THESATAN [ PIF PAF ]

Witam, pierwszy raz zaglądam do tego wątku ;))

Potrzebuję pomocy.. i to ogromnej. Czy ktoś mógłby mi opisać zagadnienie kolejkowania (stosu?) LIFO ? Muszę wykonać projekt, który na tym bazuje, ale nie mam zielonego pojęcia co to jest, z czym to się je i jak to stosować (jestem raczej cienki w c++), więc jeżeli jakaś dobra duszyczka mogłaby mi przybliżyć problem zagadnienia LIFO byłbym ogromnie wdzięczny :)

Mile widziany jakiś przykład :) Thanks from the mountain ! :)


EDIT: aha, interesuje mnie wytłumaczenie problemu w języku c++ strukturalnie :)

17.04.2007
17:27
[187]

ronn [ moralizator ]

LIFO to znaczy :

Last In First Out. Czyli działa jak stos. Element, który wkładasz jako ostatni, zdejmujesz jako pierwszy.



17.04.2007
17:36
smile
[188]

PAW666THESATAN [ PIF PAF ]

Oki, dzięki wielkie Ronn, na pewno się przydadzą te informacje :) Mam jeszcze kilka tygodni na zrobienie projektu, więc jak co to będę pytać :))

17.04.2007
18:26
smile
[189]

slowik [ NightInGale ]

c++ i strukturalnie ? to nie ta bajka ;-)

17.04.2007
21:13
[190]

PAW666THESATAN [ PIF PAF ]

Slowik - wiem, ale cóż poradzę... taki mam program studiów, a tam jest strukturalne :/

18.04.2007
10:35
smile
[191]

hotDog [ Outsider ]

Mam pytanie o Delphi (wersja 6), a raczej o pascala...


kod:


type
Ikonka = class
public
grafika: TImage;
guzik: TButton;
constructor Create;
procedure zaladuj;
end;


moje pytanie:

jak zdefiniować (w kodzie oczywiście) np. metodę onClick (reakcja na kliknięcie) dla TButton będącego elementem tej klasy?

20.04.2007
17:05
smile
[192]

hotDog [ Outsider ]

OK, z powyższym problemem sobie poradziłem.


Teraz mam kolejny :-)

Mam klasę Ikonka, w niej się mieści obrazek (klasy TImage) oraz przycisk (TButton). Chciałbym, aby po kliknięciu w przycisk cały obiekt typu Ikonka (czyli obrazek oraz przycisk) były niszczone. Czyli: mam obrazek a nad nim przycisk "x", gdy się kliknie w ten przycisk to usuwa się obrazek wraz z jego przyciskiem "x".

Mój kod niestety nie działa tak jak należy (wyskakuje błąd naruszenia pamięci) :-/ najgorsze jest to, że nie wiem gdzie popełniam błąd. Może ktoś z was coś wychwyci.


unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, GifImage;

type
TForm1 = class(TForm)
Image1: TImage;
Label1: TLabel;
procedure FormCreate(Sender: TObject);
procedure Image1Click(Sender: TObject);
procedure klikPrzycisku(Sender: TObject);
private
‹ Private declarations ›
public
‹ Public declarations ›
end;


type
Ikonka = class
private
grafika: TImage;
guzik: TButton;
public
constructor Create;
destructor Destroy; override;
procedure testuj;
end;


var
Form1: TForm1;

implementation

‹$R *.dfm›

constructor Ikonka.Create;
begin
grafika := TImage.Create(Form1);
grafika.Picture.LoadFromFile('bobas.gif');
grafika.Parent := Form1;
grafika.Left := Mouse.CursorPos.X - Form1.ClientOrigin.X;
grafika.Top := Mouse.CursorPos.Y - Form1.ClientOrigin.Y;

guzik := TButton.Create(Form1);
guzik.Parent := Form1;
guzik.Width := 20;
guzik.Height := 20;
guzik.Caption := 'X';
guzik.Left := grafika.Left + grafika.Width - 20;
guzik.Top := grafika.Top - 20;

end;


destructor Ikonka.Destroy;
begin
inherited Destroy;
//grafika.Free;
//guzik.Free;
self.grafika.Free;
self.guzik.Free;
inherited;
end;


procedure Ikonka.testuj;
begin
Form1.Label1.caption := 'test';
end;


procedure TForm1.FormCreate(Sender: TObject);
begin
Image1.Transparent := true;
Image1.Picture.LoadFromFile('mapa_polski.gif');
Form1.DoubleBuffered := true;
end;

procedure TForm1.Image1Click(Sender: TObject);
var i: Ikonka;
begin
i := Ikonka.Create;
i.guzik.OnClick := klikPrzycisku;
end;

procedure TForm1.klikPrzycisku(Sender: TObject);
begin
Label1.Caption := TButton(Sender).Caption;
Ikonka(Sender).testuj;
Ikonka(Sender).Free;
end;

end.

21.04.2007
20:33
[193]

peanut [ kriegsmaschine ]

byc moze ktos orientuje sie z czego powinienem skorzystac implementujac lista zbudowana na template'ach, a konkretnie jak przekazywac do metody dodajacej argumenty, ktore beda dopasowywane do aktualnego typu przechowywanych elementow?

mam przeczucie, ze chodzi o allocator<T>, ale nie wiem konkretnie jak go uzywac?

21.04.2007
23:13
[194]

slowik [ NightInGale ]

zasada taka sama jak przy reszcie template <typ> zmienna ;-)

21.04.2007
23:31
[195]

peanut [ kriegsmaschine ]

nie bardzo rozumiem te odpowiedz bo wiem jak uzywac template, nie wiem jak wymusic w templacie alokacje pamieci w konstruktorze pod dany typ T, jednoczesnie przekazujac tylko dane potrzebne do skonstruowania tego obiektu T;

template <class T >

class klasa ‹
T* ptrT;
public:
klasa(allocator<T> c)‹
ptrT = new T(c); ›
~klasa () ‹delete ptrT;›
›;

a w main cos jakby:
klasa<int > obiekt(25) ;

oczywiscie jako T intersuje mnie przekazanie dowolnego obiektu z dowolnymi parametrami konstruktora. czy to w ogole mozliwe?

22.04.2007
20:43
smile
[196]

hotDog [ Outsider ]

Ja dalej drążę temat Delphi...


Nie wiecie może jak zrealizować takie coś w postaci:

Button we własnym zdarzeniu OnClick ma wywołanie swojego własnego destruktora...

czyli jak wywołać destruktor buttona po jego kliknięciu? Jak to wykonać?

używam do tego Free();

30.04.2007
21:27
[197]

KogUteX [ cziken ]

Napisz program, który wczytuje z wejścia ciąg liczb i wypisuje go w odwróconej kolejności.
Wejście

Na wejście programu podana zostanie pewna niewielka ilość liczb całkowitych rozdzielonych spacjami.
Wyjście

Na wyjściu ma się pojawić ciąg liczbowy, którego i-ta pozycja jest równa (n+1-i)-tej liczbie wczytanej z wejścia, gdzie n to ilość wczytanych liczb. Poszczególne liczby należy rozdzielić spacjami.
Przykład

Wejście:

1 2 3

Wyjście:

3 2 1


Tak z nudów rozwiązuje sobie zadania i natknąłem się na śmieszny problem. Zadanie jest banalne, ale jak to zakodować, by program wczytał dane i przeszedł do dalszych operacji, tzn. jak mu dać znać, że już nie powinien oczekiwać na kolejne liczby. Prosiłbym o odpowiedź w prostym C :) Dzieki

30.04.2007
21:40
[198]

nagytow [ Firestarter ]

Kodu ci jeszcze nie podam, powiem tylko, ze liczby sie skoncza, jak lancuch znakow sie skonczy ;)

30.04.2007
21:45
[199]

Arxel [ Legend ]

Macie jakieś stronki z zadaniami właśnie? :) Bo te co są we wstępniaku nie zawierają żadnych zadań.

I mam pytanie. Chciałbym zrobić przypisanie literom.
a=b
b=c
c=d
etc
litery po prawej stronie wpisywałem w systemie szesnastkowym. I teraz mam problem.
Jak zrobić aby program automatycznie w locie zmieniał litery po wpisaniu jakiegoś słowa?
Np.
Podaj tekst:
abc

Po zmianie: bcd

30.04.2007
21:59
[200]

Regis [ ]

Ty to robisz w C? Zrob sobie tablice/liste i uzywaj dziesietnych kodow ascii do rozpoznawania i zamiany znakow. Pobierasz znak, zapisujesz kod ascii w jakiejs zmiennej (np. 'a') a potem tylko w petli (licznikiem jest 'x') zamieniasz znak po znaku:

tekst_docelowy[x] = tablica_zamiany_znakow[a]

Zeby rozwiazanie bylo optymalne, dobrze by bylo, zeby tablica nie zaczynala sie od 0 i ciagnela do stu ilus, ale od kodu pierwszej litery alfabetu i miala tyle elementow ile liter ma alfabet. Oczywiscie tak latwo nie ma, nie mozna indeksowac od 65 wiec lepiej sobie zrobic do tego osobna klase, przeciazyc operator [] i kazac mu automatycznie zmniejszac podany indeks o 65. Dzieki czemu podajac mu w indeksie 65 dostaniesz 0, czyli pierwszy element Twojej tablicy, 'pod ktorym' bedzie siedziec zamiennik litery A. Dzieki temu tablica bedize miala tylko tyle el. ile trzeba.

Oczywiscie jesli przypisanie ma miec postac taka jak podales (i zadna inna) to lepiej po prostu dodawac 1 do kodu ascii danego znaku i wtedy tylko przy 'z' trzeba bedize 'recznie' zamienic kod na 65.

Dobrze zrozumialem, ze o cos takiego Ci chodzi?


Co do zadan:

30.04.2007
22:08
smile
[201]

Arxel [ Legend ]

Ale ja głupi... zapomniałem napisać, że chodzi o C++, a nie C :D
Znalazłem coś podobnego na necie...
Opiera się to o przesunięcie, ale kurde tam są takie rzeczy, którysz jeszcze nie doczyałem :)
Długa nauka przede mną. Choć już dawno podchodziłem do próby napisania własnego programu kodującego :D (gorzej by było z deszyfratorem ale kit... hehe)

edit: I dzięki za zadania :)

01.05.2007
08:00
[202]

Regis [ ]

Pytajac czy chodzi o C, mialem na mysli C/C++ - tym bardziej ze napisalem o klasach, a to juz domena C++ :) Zasada pozostaje ta sama.

03.05.2007
20:13
[203]

master53 [ PSP User - Sony Fan ]

Może mi ktoś powiedzieć, jak do cholery włączyć debuger w Visualu C++ 2005 Express Edition ? Chcę sobie skompilować programik, a przyciski debugera są stale niedostępne.

Edit: -= Nieaktualne =-

04.05.2007
11:15
[204]

maev [ immamentna smuga ]

Czy moglibyście mi polecić coś na kształt QT ale dla czystego C?

Rzeczywiście nie ma prostszych biblotek niż dłubanie w winapi?

05.05.2007
00:59
smile
[205]

slowik [ NightInGale ]

wxwindows/wxwidgets ,gtk, opengl

12.05.2007
16:37
[206]

dawideo [ Legionista ]

Witam i pozdrawiam wszystkich. Muszę napisać program (a jestem bardzo początkujący) w Cktóry będzie się składał z kilku modułów. Może być to najprostszy pod słońcem. Więc niech to będzie program np do obliczania pól figur, (może dodam jeszcze objętość i więcej figur). Oto kod programu:


#include <stdio.h>
#include<stdlib.h>

int main ()


int a, b, h, P;
char klawisz;

puts("Oblicz pole:n");
puts("1 - Prostokąta:");
puts("2 - Trojkata:");
puts("3 - Trapezu");

scanf("%c", &klawisz);
system("cls");
switch (klawisz)


case '1':
printf ("Podaj bok a: ");
scanf ("%d", &a);
printf("Podaj bok b: ");
scanf ("%d", &b);
P=a*b;
printf("Pole prostokata wynosi:n%dn" ,P);
break;

case '2':
printf ("Podaj bok a: ");
scanf ("%d", &a);
printf("Podaj wysokosc h: ");
scanf ("%d", &h);
P=(a*h)/2;
printf("Pole trójkąta wynosi:n%dn" ,P);
break;

case '3':
printf ("Podaj bok a: ");
scanf ("%d", &a);
printf ("Podaj bok b: ");
scanf ("%d", &b);
printf("Podaj wysokosc h: ");
scanf ("%d", &h);
P=((a+b)*h)/2;
printf("Pole trapezu wynosi:n%dn" ,P);
break;

default:
puts("Niewłasciwy parametr");


system("pause");
return 0;



I teraz jak mam go podzielić na te moduły i napisać makefile do tego??? Szukałem w google ale mało co znalazłem (nic nie rozumiem). A może wogóle ten program jest zły. Jeśli tak to teżmnie poprawcie
Z góry dziękuje za pomoc

13.05.2007
00:07
smile
[207]

slowik [ NightInGale ]

moduly w postaci plikow naglowkowych czy moze czegos na wzor bibliotek ?

13.05.2007
00:24
[208]

dawideo [ Legionista ]

Pewnie raczej nagłówki. tak mi się zdaje (czytałem troszke po necie) ale i tak bardzo mało wiem i nie rozumiem
Chodzi mi o to że napisałem powyższy program, rozszeże go o powiedzmy obliczanie objętości + dodam kilka figur i może coś jeszcze. Ale program narazie jest w 1 pliku a ma być w kilku. Ja jak już wspomniałem jestem zupełny laik w tej dziedzinie i dopiero raczkuje.

13.05.2007
00:36
[209]

hotDog [ Outsider ]

Z kodów w poszczególnych case'ach zrób funkcje. I te funkcje osadź w oddzielnych plikach *.h (deklarację funkcji) i *.c (definicję funkcji)
I potem pliku głównym w case'ach po prostu wywołuj te funkcje.

potem wpisujesz g++ *.c -o program

(g++ - to do c++, nie wiem jak w przypadku czystego c)

Tak na szybko, jeśli o to chodzi oczywiście.

13.05.2007
09:13
[210]

dawideo [ Legionista ]

tak dokładnie o coś takiego chodzi:).Czyli poprostu stworzyć z tego funkcjie. potem stworzyć plik z rozszerzeniem *.h gdzie będą deklaracje, i plik *.c z wywołaniem funkcji. Jeszcze coś powinienem wiedzieć???

13.05.2007
10:57
[211]

Pirix [ ! KB ! Góry górą ]

Przy kompilacji czystego c używasz oczywiście gcc zamiast g++.

13.05.2007
16:51
[212]

hotDog [ Outsider ]

dawideo --> Tak, z tym, że w plikach *.c piszesz tylko definicje funkcji, a wywołujesz je w pliku głównym (w tym ze switch). To chyba wszystko co powinieneś wiedzieć. Zresztą wszystko wyjdzie w praniu. Dodatkowo pliki *.h możesz zabezpieczyć przed ponownym includowaniem umieszczając ich kod pomiędzy dyrektywami:

#ifndef _ENGINE_H_
#define _ENGINE_H_

// tutaj Twój kod

#endif


_ENGINE_H_ - to oczywiście tylko przykład, najlepiej zmień używając w tym miejscu nazwy pliku *.h, w tym przypadku jest to kod pliku engine.h

Pirix --> Właśnie, dzięki.

13.05.2007
23:34
[213]

wishram [ lets dance ]

mam taką funkcję

int suma (char tablica1[200], char tablica2[200])

........


zwraca mi ona tablice powiedzmy char wynik[200];

wczytuje dwie tablice tablica3 i tablica4

potem chcę wpisać to tablicy char oto_suma[200] to co mi wyjdzie z funkcji:
oto_suma = suma(tablica3, tablica4);

ale to nie działa
próbowałem jeszcze
strcpy(oto_wynik, suma(tablica3, tablica4);
ale nadal nie mam wyniku w oto_wynik

jak to zrobić?



14.05.2007
19:14
[214]

wishram [ lets dance ]

up
jak funkcja zwraca mi tablicę znaków char to jak mam ją przypisać do zmiennej?

14.05.2007
19:16
[215]

peanut [ kriegsmaschine ]

tablicy nie zwrocisz, co najwyzej jakis wskaznik

14.05.2007
19:19
[216]

wishram [ lets dance ]

mam tablice char wynik[200];

a na końcu funkcji
return wynik;
to wychodzi że zwraca i działa jak wezmę od razu printf("%s", i tu wywołam funkcję)
ale jak to zapisać

14.05.2007
19:24
[217]

peanut [ kriegsmaschine ]

moze dziala, ale z konwersja niejawna.
zrob sobie tak:

char* f ( char* tab1, char* tab2 ) ‹


return tab3;

char* ptr = f(a,b);

tylko musisz zaalokowac pamiec w funkcji

ps. tam nie zwracasz z funkcji czasem jakiegos autmatycznego obiektu, ktory znika po wyjsciu z fnkcji?

14.05.2007
19:38
[218]

wishram [ lets dance ]

lol zauważyłem że miałem takie coś:

int funkcja(char tab1[200], char tab2[200])

..........
return wynik;


czyli zwracałem tablice char z funkcji int..! O_O czemu to mi działało?

wypisywałem wartość int przez printf("%s", ..) i też działało

a jak teraz chce poprawić i int zamieniam na char to program sie wiesza he?


14.05.2007
19:49
smile
[219]

slowik [ NightInGale ]

poczytaj czlowiek o wskaznikach ;-)

14.05.2007
19:51
[220]

Regis [ ]

w ktorym miejscu niby zwracales tablice? Bo ja w tym kodzie widze tylko ze zwracasz wskaznik na tablice, a odbierasz go jako pojedynczy int...

14.05.2007
20:10
smile
[221]

wishram [ lets dance ]

slowik -
z chęcią tylko, że muszę to zrobić na jutro, a jeszcze mam do napisania parę rzeczy
na razie muszę to zrobić trochę na odwal, żeby działało a potem postaram się co nieco pojąć
btw. mogę sobie poczytać o wskaźnikach z książki o C++, jak programuje w C (są różnice?)

14.05.2007
20:25
[222]

slowik [ NightInGale ]

w c++ sa wygodniejsze referencje ale wskazniki dzialaja tak samo i sie tak samo uzywa :-)


robisz tak:
char * funkcja(char tab[200]) ‹return tab›
w main
char *tab
tab=funkcja(costam)

i jest cacy

14.05.2007
20:54
[223]

paladin [ Konsul ]

mam mala prosbe
kumpel mnie ciagle meczy zebym mu napisal skrypt w c++ a ja nie znam c++...
potrzebuje skrypt który zlicza liczby parzyste od 1 do 10
jakby ktos bylby taki mily :) to bylbym wdzieczny

14.05.2007
21:00
[224]

wishram [ lets dance ]

slowik ===>
zrobiłem i jest ok

ale czy moge teraz działać na tym wskaźniku tab zmieniać go dodawać do niego znaki itp.
albo dać jako argument do funkcji
funkcja(tab);?

14.05.2007
21:00
smile
[225]

hotDog [ Outsider ]

paladin --> to powiedz kumplowi, że nie znasz c++. Błyśnij dobrą poradą i odeślij go do google'i. Nikt Ci skryptu w c++ nie napisze.

14.05.2007
21:04
[226]

peanut [ kriegsmaschine ]

na wskazniku typu char* mozesz dzialac tak jak na 'tablicy znakow' z uzyciem opreatora[], byle zakresu nie przekroczyc bo nie wiadomo co sie stanie.

liczby parzyste 1-10
short s = 0;
for (short i=1;i<6;++i)‹s+=i*2;›

14.05.2007
21:05
smile
[227]

slowik [ NightInGale ]

wishram===>w tym przypadku mozesz sie bawic jak tablica :-) poczytaj tez o typach danych w c ... ;-)

hotDog===>w sumie da sie zaimplementowac w c++ jakis jezyk sryptowy i na nim oprzec ten skrypt ;-)

peanut===>jakto nie wiadomo ? :-) program pojdzie w sina dal albo zacznie jakies cuda wypluwac na ekran wlacznie z piszczacymi znakami ;-)

14.05.2007
22:50
[228]

dawideo [ Legionista ]

Czy mógłby mi ktoś pomóc. Zmieniłem (narazie) program na łatwiejszy by poczwiczyć ten make file na prosty kalkulator (dodaje, odejmuje, mnoży i dzieli dwie liczby) podzieliłem na moduły. Ale coś mi nie działa:/ Ote one

calc.c Cytat:

#include <stdio.h>

#include "mat.h"

int main (void)


double a=5, b=20;
printf ("\na =%8.2f\nb = %8.2f\n\n",a,b);
printf ("a + b = %8.2f\n", suma(a,b));
printf ("a - b = %8.2f\n", roznica(a,b));
printf ("a * b = %8.2f\n", iloczyn(a,b));
printf ("a / b = %8.2f\n", iloraz(a,b));
printf ("\n");
return 0;




mat.c Cytat:

/* mat.c*/

#include "mat.h"

double suma (double a, double b)

return a + b;


double roznica (double a, double b)

return a - b;


double iloczyn (double a, double b)

return a * b;


double iloraz (double a, double b)

return a / b;




mat.h Cytat:

#ifndef _MAT
#define _MAT

double suma (double, double);
double roznica (double, double);
double iloczyn (double, double);
double iloraz (double, double);
#endif /* _MAT*/



a oto mój makefile Cytat:

calc: calc.c mat.c mat.h
gcc mat.c calc.c -o calc

czysc
rm -f calc



Czy może ktoś mi pomóc??

14.05.2007
23:07
[229]

slowik [ NightInGale ]

gcc clac.c -o clc i po bolu :] nic wiecej nic mniej

15.05.2007
01:02
smile
[230]

hotDog [ Outsider ]

slowik --> no jakby nie patrzeć masz rację :-)))

15.05.2007
08:03
[231]

dawideo [ Legionista ]

Aha no dobra a może ktoś powiedziećczemu tak:) a nie inaczej. Sorki za głupie pytania ale nadal niezbyt kumam ten make

15.05.2007
11:34
[232]

slowik [ NightInGale ]

dawideo===>co sie napaliles na ten makefile ? jesli juz tak bardzo chcesz to wpisz ta jedna linijke i bedzie cacy

15.05.2007
15:52
[233]

dawideo [ Legionista ]

słowik===> to nie ja się napaliłem tylko mój nauczyciel:P

15.05.2007
16:57
[234]

dawideo [ Legionista ]

Mam pytanko (jeszcze jedno) wkleiłem ten Twój makefile zapisałem jako makefile.mak w konsoli napisałem make a ona mi wyżuca że nie znalazł żadneko makefile::/ potem zauważyłem że zamiast
gcc calc.c-o calc
masz
gcc clac.c-o clc
Poprawiłem to ale znowu to samo:(
P.s
czytałem gdzieś że makefile musi mieć cel, reguły i komendy. Wiem że się nie znam:) ale ja tu widze tylko komendy:]

15.05.2007
19:13
[235]

dawideo [ Legionista ]

Aha i może ta informacja pomoże. W konsoli podaje ścieżke do katalogu z programem
i gdy znajduję się już w tym katologu wydaje komende make a konsola mi na to:
No targets specified and no makefile found. Stop.
:(

15.05.2007
19:57
[236]

dawideo [ Legionista ]

Hmm chwilke się pobawiłem. I teraz konsola wywala mi coś takiego:/
awideo@dawideo:~/Desktop/kalkulator$ make calc
cc calc.o -o calc
calc.o: In function `main':
calc.c:(.text+0x4b): undefined reference to `suma'
calc.c:(.text+0x6d): undefined reference to `roznica'
calc.c:(.text+0x8f): undefined reference to `iloczyn'
calc.c:(.text+0xb1): undefined reference to `iloraz'
collect2: ld returned 1 exit status
Sorki że tak męcze (pewnie niektórzy już mnie wyklinają:]) ale dla mnie to naprawde ważne jest:/

15.05.2007
21:18
[237]

hotDog [ Outsider ]

poczytaj:



oraz:




pamiętaj i dokładnie czytaj to co jest napisane wszędzie a na pewno się przydadzą te linki :-)

zwróć uwagę na:

UWAGA Przed komendą musi obowiązkowo wystąpić znak tabulacji.

patrząc na przykład z tego drugiego linka, po linijce
hello: hello.c aux.c
powinien nastąpić enter oraz tabulator i dopiero komenda:

gcc hello.c aux.c -o hello


Oraz zmień pliku nazwę na "makefile". Wywołujesz kompilację poleceniem "make" w konsoli.

15.05.2007
21:35
[238]

EG2006_43991898 [ Nadworny krasnal ]

Poszukuje kursu delfi dla laików dopiero zaczynam zabawę z tym....

15.05.2007
22:08
[239]

Pirix [ ! KB ! Góry górą ]

dawideo---> spróbuj kompilować z dyrektywą -c. powinno pomóc. Czyli: gcc -c -o nazwa.o nazwa.c

15.05.2007
22:27
[240]

dawideo [ Legionista ]

Pirix--> próbowałem i tym sposobem na to samo wychodziło.
Troszku się pobawiłem i wyżuca mi
makefile:8: *** missing separator. Stop.
hotDog--> dzięki ten drugi ling znałem i według niego robiłem:)
Dziwi mnie tylko to że jak mam to wszystko w jednym pliku to działa bez problemowo. Dopiero jak rozbiłem na moduły to zaczeło się chrzanić:/ No nic idę męczyć dalej:)


15.05.2007
22:38
[241]

dawideo [ Legionista ]

Dobra chłopaki dzięki wam za waszą cierpliwośc dla nowicjusz, program działa bez zarzutu. Przy najbliższym spotkaniu stawiam kolejke ;)

16.05.2007
22:02
[242]

dawideo [ Legionista ]

To znowu ja słuchajcie wczoraj program działał wyśmienicie dziś chciałem go uruvhomić i lipa nie działa:/ nie wiem czemu:/
Pisze w Linuxie w narzedziu zwanym GEANY i jak prubyje uruchomić program na samym dole wyświetla mi
"Nie udało się wykonanie /home/dawideo/Desktop/calc/calc (sprawdź czy jest już zbudowany)
O co chodzi?? Przecież nie jest uruvhomiony dopiero chce go uruchomić i co to znaczy że może być zbudowany??

16.05.2007
22:14
[243]

slowik [ NightInGale ]

do czego jest ten geany ? "./calc" - tak powinien dzialac

16.05.2007
22:29
[244]

dawideo [ Legionista ]

geany To coś takiego jak w Windowsie Borland, lub Dev c++, czy inne do pisania programów, Na linuxie mam jeszce Kdevelop (ale jakoś mi nie pasi) Czyli piszesz tam program:)

16.05.2007
22:32
[245]

dawideo [ Legionista ]

"./calc nie działa:/ znów wyrzuca mi:
cc cal.o -o cal
cal.o: In function `main':
cal.c:(.text+0x4b): undefined reference to `suma'
cal.c:(.text+0x6d): undefined reference to `roznica'
cal.c:(.text+0x8f): undefined reference to `iloczyn'
cal.c:(.text+0xb1): undefined reference to `iloraz'
collect2: ld returned 1 exit status
make: *** [cal] Error 1
Ale nie rozumiem przecież wczoraj działał:/ a nic od wczoraj nie zmieniałem

16.05.2007
23:01
[246]

slowik [ NightInGale ]

hymm a kompilowales za pomoca gcc czy makefile ? po gcc jest tak samo ? moze pliki sie 'przeterminowaly' ;-)

16.05.2007
23:06
[247]

dawideo [ Legionista ]

Hmm co to znaczy przeterminowały:] przez gcc tak samo. Dla mnie dziwne że wczoraj działało a dziś nie tylko ta informacja wyskoczyła o tym "zbudowaniu"

16.05.2007
23:19
smile
[248]

slowik [ NightInGale ]

zmien nazwy plikow i skompiluj w innej lokalizacji recznie ;-)

16.05.2007
23:40
[249]

dawideo [ Legionista ]

kurcze no nie działa:(

16.05.2007
23:44
[250]

EG2006_43991898 [ Nadworny krasnal ]

post 238 plz help me

16.05.2007
23:47
smile
[251]

YackOO [ Konsul ]

Witam

Od razu zastrzegam, że w programowaniu jestem ultra-lamą i do zabawy w te klocki zmusza mnie jedynie przedmiot na uczelni

Muszę na zaliczenie stworzyć program "Gra w życie", pewnie sporo osob o tym slyszalo. Program pisany jest w języku Pascal (uzywam Delphi 7).Mam to robic powolnymi kroczkami, na razie mam zrobione takie cos:

program zycie;

‹$APPTYPE CONSOLE›

uses
SysUtils;
const rozmiar_planszy=20;
type plansza=array[1..20,1..20] of char;
var t:plansza;
procedure wypisz_tab(var tab:plansza);
var i,j:integer;
begin
for i:=1 to rozmiar_planszy do
begin
for j:=1 to rozmiar_planszy do
write (tab[i,j]);
writeln;
end;
end;



begin
wypisz_tab(t);
readln;
‹ TODO -oUser -cConsole Main : Insert code here ›
end.

Musze teraz zrobić taki myk, żebym mógł edytować plansze i wpisać w interesujace mnie miejsca punkty X. nie musze na razie określać zasad w samej grze itp. Chodzi o to, zeby nie bylo pustej tablicy po skompilowaniu, tylko zeby dodac tam kilka X'ow i zeby miejsca tych X'ow mozna bylo zmieniac. Nie trzeba zadnego ladowania z pliku itp (na razie). Nie wiem w sumie jak to zrobic i tutaj zwracam się do Was :)

17.05.2007
00:09
[252]

slowik [ NightInGale ]

dawideo===>podeslij mi kody zrodlowe obejrze je...(mail pod nick'iem)

EG2006_43991898===>delphi ? naprawde musisz sie nudzic ... wybierz cos uzyteczniejszego i przyjemniejszego ;-)

YackOO===>nie rozumiem co tak ludzi na kierunkach nieinformatycznych katuja tym pascal'em ... o tablice nie musisz sie martwic sa one dynamicznie alokowane wiec da sie zyc ;-)
ale od poczatku:
1.kartka i dlugopis(cokolwiek do pisania) w reke
2.projektujesz po kolei co ma sie dziac
3.projektuje interface(czyt do czego chcesz miec dostep)
4.rozwijasz poszczegolne galezie funkcji spelnianych przez interface
5.zaczynasz kodowac/zadawac pytania w razie problemow

bez przejscia takiej drogi ciezko bedzie ci uzyskac odpowiedz bo pytania typu 'jak powinien wygladac kod zrodlowy programu ktory mam napisac' sa conajmniej nie na miejscu

17.05.2007
07:32
[253]

dawideo [ Legionista ]

słowik---> już Ci wysyłam

17.05.2007
11:55
[254]

slowik [ NightInGale ]

dawideo===>mi wydaje sie ze makefile ma odwrotna kolejnosc ... wieczorem odpale linux'a i tam sie pobawie ... :-)

17.05.2007
20:06
[255]

dawideo [ Legionista ]

Hmmmm kurcze nadal nie działa Kompilacja konczy się sukcesem a jak chce uruchomić program to nie działa:(
słowik--> program uruchomiłem u kolegi i działał więc powinno być dobrze ale jaka może być przyczyna że u mnie nie działa???

17.05.2007
20:13
[256]

slowik [ NightInGale ]

moze wklep make clean ? jakies pliki tymczasowe moze zostaly

17.05.2007
20:19
[257]

dawideo [ Legionista ]

To już próbowałem i nic:/ nie dało. Z rozpaczy zrobiłem reinstalke Ubuntu (głupota) ale nawet to nic nie dało:/:/:/

17.05.2007
20:46
[258]

dawideo [ Legionista ]

słowik--> masz moje pliki słuchaj jak wkleje zawartość pliku mat1.c do pliku kalk.c na końcu kodu to wszystko działa bez zarzutu Natomiast jak próbuje to "normalnie" wywala mi
cc kalk.o -o kalk
kalk.o: In function `main':
kalk.c:(.text+0x4b): undefined reference to `suma'
kalk.c:(.text+0x6d): undefined reference to `roznica'
kalk.c:(.text+0x8f): undefined reference to `iloczyn'
kalk.c:(.text+0xb1): undefined reference to `iloraz'
collect2: ld returned 1 exit status
make: *** [kalk] Error 1
Mi to osobiście nic nie mówi ale może Tobie powie

17.05.2007
21:02
[259]

EG2006_43991898 [ Nadworny krasnal ]

EG2006_43991898===>delphi ? naprawde musisz sie nudzic ... wybierz cos uzyteczniejszego i przyjemniejszego ;-)

Wiem dlaczego to biorę ale niechce dostać po ranku wiec tu nie napisze :D

17.05.2007
21:05
[260]

dawideo [ Legionista ]

słowik już się nie zawracaj sobie głowy wystarczyło dodać opcje "-l". Ale dzięki za pomoc przy okazji wiele się nauczyłem:)

17.05.2007
21:44
[261]

EG2006_43991898 [ Nadworny krasnal ]

Dobra niech będzie biorę się za c++ ale jest jakiś polski kompilator?

17.05.2007
22:01
[262]

Pirix [ ! KB ! Góry górą ]

Proponuje Dev-Cpp

17.05.2007
22:05
[263]

slowik [ NightInGale ]

polski kompilator ? :-) jakby gcc nie wystarczylo ... ale pewnie jakies polskie sa

17.05.2007
22:13
[264]

EG2006_43991898 [ Nadworny krasnal ]

e dobra mam dev-c++ 5 ma polska wersje ale inny problem wpisałem
#include <iostream.h>
int main() ‹
cout << "Czolem, ludziska!";


I jak to otwieram od razu mi się zamyka :/

17.05.2007
22:53
[265]

slowik [ NightInGale ]

sie dziwie ze sie to skompilowalo
1.brakuje return 0
2. #include<iostream> bez .h
3. program nie powinien sie zatrzymywac na koncu bez wyraznego zyczenia programisty np system('PAUSE')

17.05.2007
22:55
[266]

EG2006_43991898 [ Nadworny krasnal ]

w8 w8 w8 nie tak szybko
1, gdzie to wpisać
2, to łapie
3, znowu dużo się dowiedziałem.

i laików :D

EDIT: mam już (ctrl+ f XD)

17.05.2007
23:17
[267]

.Jacek 99. [ Senator ]

Znacie dobre zrodla o programowaniu generycznym? najlepiej w C#:P

Znajomy pisze licencjat o tym a dobrych materialow ma jak na lekarstwo.

18.05.2007
10:39
[268]

EG2006_43991898 [ Nadworny krasnal ]

Dobra wam to powie więcej niż mi....

18.05.2007
12:21
[269]

slowik [ NightInGale ]

poszukaj sobie takiej ksiazki jak symfonia c++ ;-)

brakuje srednikow i po #include
using namespace std;

18.05.2007
12:31
[270]

DarkStar [ magister inzynier ]

wez wywal tego syfnego deva i zainstaluj sobie visiual studio 2005

18.05.2007
13:06
[271]

slowik [ NightInGale ]

Dark===>bo visual pozwala na wieksza ilosc niezgodnosci ze standardami ? poprawnie zapisany kod powinine dzialac na wszystkim ;-)

18.05.2007
13:35
[272]

DarkStar [ magister inzynier ]

bo jest latwe, proste i przyjemne:) chlopak pisze hello world przeciez:)

zreszta w tym programie jest blad, powinno byc system("pause");

18.05.2007
14:06
smile
[273]

slowik [ NightInGale ]

w sumie :-) o srednikach pisalem :P

ja ostatnio pisze na linux'a uzywaja nano/mcedit i recznie wszystko kompilujac ... nie jest zle ;-)

18.05.2007
15:31
[274]

Regis [ ]

Mam pytanie - mialem do napisania algorytm rozwiazujacy problem plecakowy. Zadanie samo w sobie trywialne, ale okazalo sie po fakcie (po tym jak juz napisalem program), ze musze nie tylko podac max. wartosc plecaka, ale takze elementy wchodzace w jego sklad. Jako ze zadanie rozwiazalem - nie wiedzac jeszcze o tym wymogu - na tablicy jednowymiarowej (bo niby czemu nie - po co marnowac wiecej miejsca), mam teraz problem, a w zasadzie pytanie: czy dla tablicy jednowymiarowej przy problemie plecakowym mozna przeprowadzic w jakis sposob backtracking? Oczywiscie chodzi w gre dorzucenie jakichs flag, czy nawet calej tablicy pamietajacej jakies dane wskazujace na uzyte przedmioty - grunt zebym nie musial pisac algorytmu od nowa dla tablicy dwuwymiarowej, bo zwyczajnie mi sie nie chce :P

18.05.2007
17:04
[275]

slowik [ NightInGale ]

Regis===>w jaki sposob zaimplementowales ten algorytm ? bo bez tego raczej trudno zgadnac gdzie upchnac ten 2 wymiar

jesli ten 2-gi wymiar to flagi to moze upchaj funkcje zwracajaca wartosc 'cegly' ? w miejsce starego podstawienia

18.05.2007
19:00
[276]

Regis [ ]

Standardowa implementacja tego problemu na jednowymiarowej tablicy - 'ksiazkowa', powiedzialbym nawet. Chocby taka jak tu: - pod koniec jest jak to zrobic dla tablicy jedno wymiarowej.

19.05.2007
17:22
[277]

dawideo [ Legionista ]

Witam ponownie.
Szukam odpowiednika gotoxy (x,y) dla C. pisze pod Linuksem Czym moge to zastąpić
Ncurses???? a czy jest coś jeszcze??

19.05.2007
17:37
[278]

Kijano [ Generaďż˝ ]

zrob wlasna funkcje gotoxy
np.

int gotoxy( int x, int y )

for( y = y; y >= 0; y-- )
printf("\n");
for( x = x; x>=0; x-- )
printf(" ");

19.05.2007
18:48
[279]

dawideo [ Legionista ]

Dzięki funkcja gotoxy bardzo mi pomogła mam jeszcze jeden mały problem. Chodzi mi o funkcje "rysuj"
wywala mi : " 'rysuj' was not declared in this scope" a oto kod

#include <stdio.h>
#include <stdlib.h>


int gotoxy( int x, int y )
void rysuj(int xst, int yst, int szer, int wys, char znak);

int main()

int x, y;
char znak = '*';
char klawisz;
int c, d;

x=10; //rozmaiar poczatkowy figury
y=10;
c= 15;
d= 15;

do

system("clear");
rysuj(x, y, c, d, znak);
klawisz = getchar();
if((klawisz >='0')&&(klawisz<='9')) znak = klawisz; //zmiana znaku
if(klawisz==0)


klawisz= getchar();

switch(klawisz)


case 'K': if(x>1) x--; break; //przesuwanie figury
case 'M': if((x+2*c)<79) x++; break;
case 'P': if((y+2*d)<50) y++; break;
case 'H': if(y>1) y--; break;




if(klawisz== 'a') //zmiana rozmiaru figury
if(c>5) c--;
if(klawisz== 'd')
if(c<30) c++;
if(klawisz== 's')
if(d>5) d--;
if(klawisz== 'w')
if(d<20) d++;

› while (klawisz!=27);

return 0;

int gotoxy( int x, int y )

for( y = y; y >= 0; y-- )
printf("\n");
for( x = x; x>=0; x-- )
printf(" ");



void rysuj(int xst, int yst, int szer, int wys, char znak) //rysowanie figury

int a;
int x;

gotoxy(xst, yst);

for(a=0; a<szer; a++)
printf (&znak);
gotoxy(xst+ szer, yst+ 2*wys);
for(a=0; a<(szer+1); a++)
printf (&znak);

for(a=0; a<wys; a++)

gotoxy(xst, yst+a);
printf (&znak);


for(a=0; a<wys; a++)

gotoxy(xst+ 2*szer, yst+ wys+ a);
printf (&znak);


if (szer>=wys)

for(x=xst; x<(xst+ szer); x++)

gotoxy(x, (-wys*(x-xst)+ szer*(yst+ wys))/szer);
printf (&znak);


for(x=(xst+ szer); x<(xst+ 2*szer); x++)

gotoxy(x, ((-wys*(x-xst-szer))+szer*(yst+ 2*wys))/szer);
printf (&znak);


for(x=(xst+ szer); x<(xst+ 2*szer); x++)

gotoxy(x, ((wys*(x-xst-szer)+szer*yst))/szer);
printf (&znak);


for(x=xst; x<(xst+ szer); x++)



gotoxy(x, (wys*(x- xst)+szer*(yst+ wys))/szer);

printf (&znak);





if (szer<wys)



for(a=yst; a<(yst+wys);a++)



gotoxy((-szer*(yst+wys-a)+wys*(xst+ 2*szer))/wys, a);

printf (&znak);


for(a=(yst+ wys); a<(yst+ 2*wys); a++)

gotoxy((szer*(yst+2*wys-a)+wys*(xst+szer))/wys, a);
printf (&znak);

for(a=(yst+ wys); a<(yst+ 2*wys); a++)

gotoxy((wys*xst+szer*(a-yst-wys))/wys, a);
printf (&znak);

for(a=yst; a<(yst+ wys); a++)

gotoxy((szer*(yst+wys-a)+wys*xst)/wys, a);
printf (&znak);





19.05.2007
18:53
[280]

dawideo [ Legionista ]

Oki poradziłem sobie:) już działa no prawie bo zamiast rysować mi figure się uruchamia i jakaś kropka przez chwile lata po ekranie a potem czysty ekran. O co chodzi?????
P.s Program przerobiłem z C++ na C (może ta informacja pomoże:)

19.05.2007
20:55
smile
[281]

maVes [ Generaďż˝ ]

dawideo - nie chce mi się analizować kodu tej funkcji, ale wydaje mi się że w tym wypadku taka postać funkcji gotyxy nie spełni swojego zadania, bo ona działa na takiej zasadzie, że wszystko przed miejscem w które wskakujesz "zasłaniają" spacje i entery.

Druga sprawa to to, że takie wywołania funkcji
gotoxy(5,5);
gotoxy(1,5);

Spowoduje przeskok w punkt (1,10). Wyjściem byłoby czyszczenie ekranu, ale wtedy nadal pozostanie problem z zamalowywaniem.
Poza tym wypisywanie dużych ilości znaków na ekran konsoli samo w sobie jest wolne, czego dowodem jest to latanie kropki.


[edit]

Znalazłem takie coś, pisze coś o Linuxie, więc możesz spróbować :)

19.05.2007
21:06
[282]

dawideo [ Legionista ]

Dzięki bardzo :) Figura już jest na ekranie:) teraz tylko musze wykombinować jak ją przesówać ( w c++ działało) oraz zwiększanie i zmniejszanie no i ogranicznia do brzegów ekranu:)

21.05.2007
22:44
[283]

dawideo [ Legionista ]

Jaki jest odpowiednik sqrt (C++) w C i w jakiej biblotece się znajduje???

21.05.2007
22:51
[284]

Sir Skull [ Charr Shaman ]

dawideo --> Również sqrt. Znajduje się w math.h

21.05.2007
22:57
[285]

dawideo [ Legionista ]

Hmm tak też myślałem ale program mi nie działa:/ To też się spytałem. Więc możę ktoś powie w czym tkwi problem??
#include <stdio.h>
#include <stdlib.h>
#include <math.h>


int main(int argc, char *argv[])

double a,b,c;
double delta;
double x1,x2;



printf( "\nWczytywanie trójmianu ax^2 + bx + c =0");
printf (" Podaj a");
scanf ("%lf", &a);
printf("Podaj b");
scanf ("%lf", &b);
printf("Podaj c");
scanf ("%lf", &c);
if (a==0)
printf( "\nTo nie jest trójmian kwadratowy\n");
else

delta = b*b - 4*a*c;
if (delta>0)

x1=(-b-sqrt(delta))/(2*a);
x2=(-b+sqrt(delta))/(2*a);
printf( "Trójmian ma dwa miejsca zerowe:");
printf ("x1=%lf\n",x1);
printf ("x2=%lf\n",x2);

else
if (delta==0)

x1=(-b)/(2*a);
printf( "Trójmian jedno miejsce zerowe:");
printf("x0=%lf\n",x1);


else
printf( "\nTrójmian nie ma miejsc zerowych!\n");

return 0;

21.05.2007
23:13
[286]

Sir Skull [ Charr Shaman ]

Co nie działa? U mnie działa :)

22.05.2007
10:21
[287]

dawideo [ Legionista ]

Wywala mi undefined reference to `sqrt' biblioteke math mam zainstalowaną więc nie mam pojęcia o co chodzi

22.05.2007
15:42
[288]

maVes [ Generaďż˝ ]

dawideo - math.h to tylko nagłówek z deklaracjami funkcji. Błąd 'undefined reference' oznacza że musisz dolinkować odpowiednią bibliotekę (praktycznie w każdym środowisku robi się to nieco inaczej więc z tym Ci nie pomogę).
Chociaż trochę mnie to dziwi, bo wszystkie standardowe biblioteki C/C++ powinny być zintegrowane z każdym środowiskiem tak, że włączamy tylko nagłówek i o resztę się nie martwimy.

22.05.2007
17:30
[289]

dawideo [ Legionista ]

Też mnie to dziwi to też myslałem że trzeba jakąś inną bibloteke dodatkowo:/ A może ktoś ma jakieś pomysły:)

22.05.2007
20:22
[290]

dawideo [ Legionista ]

Już sobie poradziłem Nie wiem od czego to zależy ale wyczytałem iż w takich przypadkach kompiluje się w ten sposób:
gcc -o nazwa_pliku.c -lm nazwa_pliku. (z dodatkowym -lm)
Ale pojawił się kolejny problem otóż tworze makefile i podczas kompilacji wywala mi
"troj.c:7: error: expected identifier or ‘(’ before ‘double’ '
"troj.c:40:3: warning: no newline at end of file"
Oto ten modół:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include "def.h"


double (double a, double b, double c, double delta, double x1, double x2)

printf( "\nWczytywanie trójmianu ax^2 + bx + c =0\n");
printf (" Podaj a= ");
scanf ("%lf", &a);
printf("Podaj b= ");
scanf ("%lf", &b);
printf("Podaj c= ");
scanf ("%lf", &c);
if (a==0)
printf( "\nTo nie jest trójmian kwadratowy\n");
else

delta = b*b - 4*a*c;
if (delta>0)

x1=(-b-sqrt(delta))/(2*a);
x2=(-b+sqrt(delta))/(2*a);
printf( "Trójmian ma dwa miejsca zerowe:\n");
printf ("x1= %lf\n",x1);
printf ("x2= %lf\n",x2);

else
if (delta==0)

x1=(-b)/(2*a);
printf( "Trójmian jedno miejsce zerowe:");
printf("x0=%lf\n",x1);


else
printf( "\nTrójmian nie ma miejsc zerowych!\n");

››

Że niby oczekuje gdzieś "(" ale moim zdaniem jest ok.

22.05.2007
20:42
[291]

DarkStar [ magister inzynier ]

po pierwsze nie mozesz nazwac funkcji double, poniewaz ta nazwa jest zastrzezona dla typu.
po drugie funkcja musi zwracac jakas wartosc, w twoim przypadku nic nie zwraca wiec powinna byc void.

22.05.2007
20:51
[292]

dawideo [ Legionista ]

Chyba źle się zrozumieliśmy:) to jest tylko jeden modół całego programu W main mam funkcję void itp a zresztą sami sprawdzcie na moją czache to powinno działać no ale cóż Oto mój progs:
#include <stdio.h>
#include <stdlib.h>
#include "def.h"

int main ()

puts("Prosty program matematyczny obliczający uk równań, pierwiastki równania kwadratowego");

scanf("%c", &klawisz);
system("clear");
switch (klawisz)


case '1':

puts("Rozwiąż uk równań");
uk (a,b,c,d,e,f,W,Wx,Wy,x,y);

break;

case '2':
puts ("Wyznacz pierwiastki równania");
troj (a,b,c,delta,x1,x2);
break;
default:
puts("Niewłasciwy parametr");

return 0;


#include <stdio.h>
#include <stdlib.h>
#include <tgmath.h>
#include "def.h"


double (double a, double b, double c, double delta, double x1, double x2)

printf( "\nWczytywanie trójmianu ax^2 + bx + c =0\n");
printf (" Podaj a= ");
scanf ("%lf", &a);
printf("Podaj b= ");
scanf ("%lf", &b);
printf("Podaj c= ");
scanf ("%lf", &c);
if (a==0)
printf( "\nTo nie jest trójmian kwadratowy\n");
else

delta = b*b - 4*a*c;
if (delta>0)

x1=(-b-sqrt(delta))/(2*a);
x2=(-b+sqrt(delta))/(2*a);
printf( "Trójmian ma dwa miejsca zerowe:\n");
printf ("x1= %lf\n",x1);
printf ("x2= %lf\n",x2);

else
if (delta==0)

x1=(-b)/(2*a);
printf( "Trójmian jedno miejsce zerowe:");
printf("x0=%lf\n",x1);


else
printf( "\nTrójmian nie ma miejsc zerowych!\n");

››
Pierwszego modułu (uk równań ) nie wrzuciłem bo działa poprawnie, mam również nagłówek def.h w którym umieściłem deklaracje, więc coś musi być w tym module odpowiadającym za obliczanie trójmianu (tak przynajmniej sądze

22.05.2007
21:10
[293]

DarkStar [ magister inzynier ]

nie czaje tego kodu, to wszystko jest w funkcji main?

22.05.2007
21:14
[294]

dawideo [ Legionista ]

Main to główny (program) w innym pliku znajduje się funkcja licząca uk równań, a w 3 pliku znajduje się funkcja licząca trojmian. Funkcje wybieramy za pomocą case.

22.05.2007
21:18
smile
[295]

DarkStar [ magister inzynier ]


double (double a, double b, double c, double delta, double x1, double x2)

printf( "\nWczytywanie trójmianu ax^2 + bx + c =0\n");
printf (" Podaj a= ");
scanf ("%lf", &a);
printf("Podaj b= ");
scanf ("%lf", &b);
printf("Podaj c= ");
scanf ("%lf", &c);
if (a==0)
printf( "\nTo nie jest trójmian kwadratowy\n");
else

delta = b*b - 4*a*c;
if (delta>0)

x1=(-b-sqrt(delta))/(2*a);
x2=(-b+sqrt(delta))/(2*a);
printf( "Trójmian ma dwa miejsca zerowe:\n");
printf ("x1= %lf\n",x1);
printf ("x2= %lf\n",x2);

else
if (delta==0)

x1=(-b)/(2*a);
printf( "Trójmian jedno miejsce zerowe:");
printf("x0=%lf\n",x1);


else
printf( "\nTrójmian nie ma miejsc zerowych!\n");

››
Pierwszego modułu (uk równań ) nie wrzuciłem bo działa poprawnie, mam również nagłówek def.h w którym umieściłem deklaracje, więc coś musi być w tym module odpowiadającym za obliczanie trójmianu (tak przynajmniej sądze


a ten twor do czego ma sluzyc?:) i czy jest w tym samym pliku co main?

22.05.2007
21:34
[296]

dawideo [ Legionista ]

To jest funkca licząca trojmian, wywołujesz ją w funkcji main za pomocą case "2" (zobacz main) to co wywołujesz za pomocą casse "1" działa dla przykładu wrzuce i ten moduł)
#include <stdio.h>
#include <stdlib.h>
#include <tgmath.h>
#include "def.h"

double uk (double a, double b, double c,double d, double e, double f,double W, double Wx,double Wy,double x, double y)

printf( "Program UK&pound;AD RÓWNA&Ntilde;" );

printf( "\nWczytywanie pierwszego równania ax+by=c\n" );
printf( "a = ");
scanf("%lf", &a);
printf( "b = ");
scanf("%lf", &b);
printf( "c = ");
scanf("%lf",&c);

printf( "\nWczytywanie drugiego równania dx+ey=f\n");
printf( "d = ");
scanf("%lf", &d);
printf("e = ");
scanf("%lf", &e);
printf( "f = ");
scanf("%lf", &f);


W = a*e-d*b;
Wx = c*e-b*f;
Wy = a*f-c*d;

if (W==0)

if ((Wx==0) && (Wy==0))
printf( "\nUklad nieoznaczony.\n");
else
printf( "\nUkład sprzeczny.\n");

else

x=Wx/W;
y=Wy/W;
printf( "x=%lf\n",x);
printf("y=%lf\n", y);




Makefile stworzyłem również jak chcesz zobaczyć oto on:

CFLAGS=-g
LFLAGS=
CC=gcc
OBJS=main.o uk.o troj.o
prog: $(OBJS)
$(CC) $(LFLAGS) $(OBJS) -o main
main.o: main.c def.h
gcc -c main.c
uk.o: uk.c def.h
gcc -c uk.c
troj.o: troj.c def.h
gcc -c troj.c


clean:
rm -f *.o

22.05.2007
21:58
[297]

dawideo [ Legionista ]

Oki chłopaki już mam aż dziw że wcześniej tego nie zauważyłem :)
zamiast double (double...)
powinno być double troj (double...)
Sorki za kłopot

22.05.2007
22:51
[298]

DarkStar [ magister inzynier ]

dawideo --->
ten program nie zadziala dopuki nie poczytasz o funkcjach, ich argumentach i zwracanych wartosciach

24.05.2007
20:45
smile
[299]

Father Michael [ Iscariot Paladin ]

Potrzebuje malej pomocy. W C++ jestem totalnym laikiem, ale musze napisac program na zaliczenie zajec na studiach. Kompiluje sobie w Dev-C++ i wszystko idzie swietnie, ale napotkalem na maly problem. Kompilator domaga sie abym dla klasy napisal konstruktor. Szukalem w necie, po roznych tutorialach i wszedzie pisza aby w definicji destruktora wpisac po prostu 'delete zmienna'. Jednak to nie dziala.

Mam klase Kontrahent, ktora zawiera zmienne nazwa, adres, nip. Tworzac nowy obiekt tej klasy, zmiennym tym sa przypisywane wartosci. Jaka powinna byc definicja destruktora?

Kontrahent::~Kontrahent‹
??


I od razu na wszelki wypadek spytam czy dobrze w ogole go wywoluje:
Kontrahent firma;
firma.~Kontrahent();

Dziekuje z gory za pomoc :)

24.05.2007
21:14
[300]

fanlegii79 [ Generaďż˝ ]

To zalezy jakie zmienne ma twoj obiekt, jeżeli alokowane statycznie (czy jak to zwal) jak np int czy char[256], to nic nie musisz robić. natomiast jak twój obiekt jako zmienne ma wskaźniki na inne obiekty, tworzone za pomoca new w konstruktorze, lub wskazniki do dynamicznie allokowanych tablic mallockiem, to musisz je zwolnic za pomoca delete, albo free, odpowiednio.

24.05.2007
21:18
[301]

Father Michael [ Iscariot Paladin ]

Dwie zmienne typu string.

Konkretnie to wywala mi taki blad:
mam w switch'u umieszczone w jednym z case'ow tworzenie nowego obiektu klasy. Po utworzeniu obiektu standardowo jest break; i kolejny case. Jednak kompilator pokazuje, ze w miejscu, gdzie jest wpisany kolejny case, jest blad: crosses initialization of 'Kontrahent nowy' oraz Warning: destructor needed for 'nowy'.
Tak wiec wnioskuje, ze error zniknie gdy przed breakiem umieszcze destruktor obiektu klasy.

24.05.2007
21:35
[302]

fanlegii79 [ Generaďż˝ ]

Stworz obiekt przed switchem, a w switch tylko moze ustawiaj mu zmienne jakimis metodami.
Do czego służy switch?

25.05.2007
00:58
smile
[303]

Father Michael [ Iscariot Paladin ]

Wcisnalem tworzenie obiektu, razem z paroma innymi linijkami kodu, do funkcji i dopiero ta funkcje wywoluje w switchu. I problem zniknal :|

Dzieki za pomoc :)

26.05.2007
18:52
[304]

dawideo [ Legionista ]

Witam
Mam mały problem, chodzi o to iż chciałbym aby kod działał tak że jak wprowadze błędne dane to aby poprosił mnie bym wprowadził jeszcze raz niestety coś mi nie wychodzi:/ Oto kawałek kodu




printf("Program liczy dwumian Newtona\nPodaj liczby naturalne n oraz k: ");
scanf("%d %d", &n, &k);

if (n >= k) ‹
/* Uwaga, w int miesci sie max silnia(12) */
printf("Dwumian Newtona z n=%d i k=%d wynosi %d\n", n, k,
silnia1(n) / (silnia1(n - k) * silnia1(k)));
› else
while (n<k)
printf("n musi byc wieksze lub równe k\n");

return 0;


Zastosowałem tu pętle while ale na ekranie pojawia mi się setki razy napis "n musi byc wieksze lub równe k" A powinnienen tylko raz a potem chciałbym wprowadzić znowu dane

26.05.2007
20:28
[305]

Haron [ the boatman ]

hej
spróbuj tak:
do‹
printf("Program liczy dwumian Newtona\nPodaj liczby naturalne n oraz k: ");
scanf("%d %d", &n, &k);

if (n >= k) ‹
/* Uwaga, w int miesci sie max silnia(12)
printf("Dwumian Newtona z n=%d i k=%d wynosi %d\n", n, k,
silnia1(n) / (silnia1(n - k) * silnia1(k)));
› else
printf("n musi byc wieksze lub równe k\n");
›while(n<k);
return 0;


ew. pierwszego printf możesz wyrzucić przed do-while, to program nie będzie powtarzał tego tekstu.

27.05.2007
12:10
[306]

peanut [ kriegsmaschine ]

heil,
zastanawiam sie nad wyborem jakiejs biblioteki do pisania gui, laze po forach w necie, ale generalnie nigdzie nie moge znalezc jakiegos sensownego porownania wxwdigets / qt / gtk.

na podstawie tego co na razie wyczytalem, najlepiej uzywac wxwidgets. w zwiazku z tym, czy ktos moglby na podstawie wlasnego doswiadczenia wypowiedziec sie w tym zakresie? (przeznaczenie to windows)

27.05.2007
18:29
[307]

dawideo [ Legionista ]

Czy może mi ktoś wytłumaczyć jak się rysuje te schematy algorytmów (tak to się chyba nazywa) chodzi mi o to co się składa z prostokatów i odwróconych kwadratów połączonych strzałkami przy których jest tak lub nie:) Wkońcu napisałem ten program (ten składający sięz kilku modułów) i teraz musze każdy moduł rozrysować ale nie mam pojęcia jak to się robi.:/

27.05.2007
19:45
[308]

maVes [ Generaďż˝ ]

peanut - kilka dni temu postanowiłem się zmierzyć z wxWidgetsami. Przeczytałem ze 2 króciutkie tutoriale typu "hello world" i to już wystarczyło żeby dalej radzić sobie z samą dokumentacją :) Pisze się całkiem przyjemnie, chociaż denerwuje strasznie to, że ta biblioteka używa własnych klas, a nie tych z STLa.
Wcześniej wcześniej zetknąłem się tylko z WinApi więc nie mam zbytnio do czego porównywać, ale chyba już zostane przy tym wxWidgets.

dawideo - chodzi Ci o schematy blokowe? Tutaj masz opis:

31.05.2007
13:47
smile
[309]

Król Afryki [ Centurion ]

Nigdy tego nie robiłem - czy ktoś mi wytłumaczy (wystarczy fajny link, może być anglojęzyczny) jak pod WINDOWS dodać dodatkową bibliotekę/API? (można API stosować naprzemiennie z biblioteką, czy to dwie różne sprawy? czytam Wikipedię i z pozoru podobne ;)).
Chodzi mi o jakiś ~ogólny opis, bo rozumiem, że wszystkie biblioteki mają dołączane pliki README? Chyba, że instalka to indywidualna sprawa każdej biblioteki - to jeszcze jestem w stasnie pojąć, tego co umieściłem w ostatnim akapicie - nie do końca.

Sprawa wygląda tak:

- uczę się MySQL,
- uczę się C++,

Postanowiłem połączyć obie te rzeczy i zacząć pisać aplikacje w C++ współdziałające z MySQL. Przeczytałem, że najlepiej wrzucić sobie MySQL++.

Pobrałem kod źródłowy MySQL++, bo to chyba najlepsze wyjście - kod źródłowy mogę skompilować na ~dowolnym OS-ie, więc postanowiłem, że warto się tego nauczyć.

Trochę to źrodło pomotane, masa plików, ale tak już chyba wyglądają źródła :P

Odpaliłem plik README i znalazłem linijkę, w której napisano, że "README.vc - for Visual C++".

Dobra to da się skompilować tylko w Visual C++ - może mi ktoś powiedzieć dlaczego? I dlaczego autorzy nie umieszczają w takim wypadku wersji dla Windows już skompilowanej? Problem polega na tym, że ja Visual C++ nie mam a używam DevC++. Czy z większością API tak jest, że wymagają określonego kompilatora?

31.05.2007
15:52
[310]

maVes [ Generaďż˝ ]

jak pod WINDOWS dodać dodatkową bibliotekę/API?
dołączenie biblioteki zwykle wiąże się z dołączeniem odpowiednich nagłówków oraz dolinkowaniem plików tejże biblioteki (w każdym środowisku robi się to inaczej, np. w Devie wchodzisz do opcji projektu i w polu konsolidator wpisujesz nazwy plików).

Dobra to da się skompilować tylko w Visual C++ - może mi ktoś powiedzieć dlaczego?
Wydaje mi się, że powodem tego jest fakt, że każde środowisko posiada własne formaty zapisu projektów. Luźne pliki cpp, porozrzucane w wielu folderach trudno byłoby połączyć w całość jako projekt, a i to nie dawałoby gwarancji, że będzie działać. Dlatego dostarczane są gotowe projekty dla wielu środowisk.

I dlaczego autorzy nie umieszczają w takim wypadku wersji dla Windows już skompilowanej?
Tu również nie mam pewności, ale powodem jest chyba wielkość plików wyjściowych,. U mnie wspomniany wcześniej wxWidgets po kompilacji zajmuje blisko 500MB. Skompilować można na kilka sposobów, w zależności od potrzeb, więc w sumie byłoby do ściągnięcia ładnych kilka GB...

Problem polega na tym, że ja Visual C++ nie mam a używam DevC++.
Może więc warto zainteresować się Visualem? Nie wiem od jak dawna zajmujesz się programowaniem, ale dla mnie teraz pisanie czegoś większego w Devie to po prostu męka. Używam go tylko do małych programików pisanych na szybko, bo nie wymaga tworzenia całego projektu.

31.05.2007
22:22
[311]

Bajt [ Ariakan ]

Witam, mam maly problem. Pisze program z wykorzystaniem list jednokierunkowych. Jedna z funkcji to sortowanie, ktore chcialbym moc przeprowadzic wzgledem kazdego (osobno oczywiscie) pola struktury. Nie chce jednak przepisywac tego samego kodu pare razy zmieniajac tylko odnosnik do danego pola. Jak to uproscic?
Mam np. cos takiego

if(p->next->nazwisko > max->nazwisko)
‹ ... ›

Chcialbym, zeby w zaleznosci od parametru z funkcji, zamiast do pola "nazwisko", bylo odwolanie do czegos innego np. imie, adres. Nie mam za bardzo pomyslu jak to zrobic, uzyc jakiejs zmiennej, wskaznika?
Troche pogmatwalem, ale mam nadzieje, ze wiadomo o co mi chodzi :P
Pozdrawiam i dzieki z gory

31.05.2007
22:55
[312]

Drag [ Pretorianin ]

Moze to sie przyda:

--

#include <iostream>

using namespace std;

struct Test

int p1;
int p2;
int p3;
›;

template<typename T>
void compare(Test *a, T Test::* fa, Test *b, T Test::* fb)

cout << (a->*fa == b->*fb) << endl;


int main(int argc, char *argv[])

Test a = ‹1, 2, 3›;
Test b = ‹4, 2, 5›;

compare(&a, &Test::p1, &b, &Test::p1);
compare(&a, &Test::p2, &b, &Test::p2);
compare(&a, &Test::p3, &b, &Test::p3);

return 0;


--

Nie wiem czy kod robi dokladnie to co chciales ale chodzilo mi o sama idee zastosowania T Test::* jako parametru funkcji.

Pozdrawiam :)

01.06.2007
00:54
[313]

Drag [ Pretorianin ]

(^Poprzedni post byl do Bajta^)

Father Michael -> mozesz tez sprobowac tak:

--

switch(..)
case x:

...

break;

--
konkretnie chodzi o ujecie w ‹› fragment kodu w ktorym tworzysz obiekt i korzystasz z niego.

01.06.2007
15:01
[314]

Father Michael [ Iscariot Paladin ]

Spoko, juz dalem sobie rade :)

Teraz szukam jak moge wyprowadzic wartosc zmiennej poza petle.

02.06.2007
00:24
[315]

peanut [ kriegsmaschine ]

uzywac wskaznikow? to ma byc multithreadowe?

02.06.2007
18:25
[316]

Arxel [ Legend ]

Potrzebuje pomocy :D
Mile widziane wszelka forma pomocy.
Chce zrobić program-test.
Jak taki program miałby wyglądać:
Wersja podstawowa:
Wprowadzamy pytania do bazy, w jakiś sposób zaznaczamy tą prawidłową i po uruchomieniu programu mamy test wybory a,b,c,d i możliwość jednej odpowiedzi. Brak możliwości powroty do poprzednich pytań, brak limitu czasu. Po prostu mamy pytanie i jak odpowiemy to mamy kolejne etc.

Wersja rozbudowana:
Wprowadzamy pytania do bazy, zaznaczamy prawidłową odpowiedź. Po urucomieniu programu komputer generuje losowo pytania w jakiej mają być wyświetlane (żeby za każdym razem pytania pokazywały się w innej kolejności) i tasuje odpowiedzi, czyli jeśli prawidłowa jest a to po przetasowaniu odpowiedź a (wg bazy) jest na miejscu c. Aby nie można było zapamiętywać odpowiedzi w stylu a,a,c,d,a,b,d etc... W ostateczności limit czasu powiedzmy 1 minuta na każde i również brak możliwości powrotu do poprzedniego...

Naturalnie program nie ma być wyświetlany w okienku DOSowym :P
Przyglądałem się budowie testów na prawo jazdy, ale są tak zbudowane, że nie jestem w stanie tego pojąć :D

Są może na necie takie mini programy? Zetknął się już ktoś z czymś takim? Pod jakimi hasłami szukać? Program musze mieć do wtorku za 2 tygodnie. :)
Can anybody help me?

02.06.2007
19:45
[317]

maVes [ Generaďż˝ ]

Arxel - z chęcią bym Ci pomógł, ale na razie nie wiem w czym tkwi Twój problem :) Nie wiesz jak się za to zabrać? W czym to napisać? Jak zrobić to czy tamto? Zbyt ogólnie napisałeś to.. Jak chcesz to odezwij się na GG(często jestem niewidoczny) i tam spróbuję pomóc.

02.06.2007
20:00
smile
[318]

slowik [ NightInGale ]

w poprzednim semestrze 'pisalem' wejsciowki na czyms takim :P moze nawet gdzies jeszcze to mam ... :-)

02.06.2007
20:06
smile
[319]

Arxel [ Legend ]

O, byłoby fajnie ;]

02.06.2007
21:19
smile
[320]

slowik [ NightInGale ]

powinno juz byc

02.06.2007
21:55
[321]

Arxel [ Legend ]

Hm... Nic nie doszło :P

Ok mam. było w spamie ;]

02.06.2007
22:01
smile
[322]

Arxel [ Legend ]

Czas edycji się skończył...

slowik - Jestem Twoim dłużnikiem... Masz u mnie piwo.
Tylko powiedz mi, jak to teraz zmodyfikować? :P Bo plików źródłowych nie ma... A jest kilka niepotrzebnych opcji, które mógłbym wyrzucić :)

A czy kolejność odpowiedzi jest losowana czy zawsze taka sama?
I jakie jest hasło do zakończenia programu? hehehe

02.06.2007
23:21
smile
[323]

slowik [ NightInGale ]

tylko piwo ? :P to jest dosc rozbudowany program ;-) a ze nie moj ;P

04.06.2007
20:29
[324]

wishram [ lets dance ]

czy jest jakaś metoda na wczytywanie z pliku ale jakby ze standardowego wejścia (w C)?

chodzi mi o to żeby wczytać dane z pliku, ale bez ingerowania w kod programu
(oprócz dodanie pewnie jakiś linijek na początku)

04.06.2007
20:55
[325]

maVes [ Generaďż˝ ]

wishram -> Zakładam że używasz Windowsa:

start->uruchom->cmd

Wchodzisz do katalogu gdzie masz program i piszesz: program.exe < abc.in > abc.out
Program przekieruje plik abc.in na standardowe wejście (czyli cout albo scanf) a wynik działania zapisze do bliku abc.out.
Nazwa plików oczywiście nie ma znaczenia.

04.06.2007
21:02
smile
[326]

wishram [ lets dance ]

wielkie dzięki

14.06.2007
21:14
[327]

Haron [ the boatman ]

piszę program w javie. mam pytanie, jak zrobić instalator? taki standardowy, do wyboru ścieżka zapisu i instalacja JRE 6, gdy potrzebny.
czy jest do tego jakiś builder? można to jakoś zrobić szybko łatwo i prosto?

16.06.2007
23:17
[328]

yestri [ Pretorianin ]

np. install creator

17.06.2007
00:31
[329]

Haron [ the boatman ]

zachowałem się jak lama. od czego są google? przez ten projekt mi się mózg gotuje.

dzięki yestri

17.06.2007
21:27
[330]

Gotman [ Generaďż˝ ]

Witam. Podczas czytania Symfonii C++ Standard [która moim zdaniem jest świetna] trafiłem na instrukcję: system("pause");
Piszę teraz programiki na DOS'a i chcę, żeby ta komenda zatrzymała działanie programu bo jak wiadomo w XP gdy nie dostanie tej komendy to od razu wyłącza program i nie widać efektu końcowego. Kompiluję w C++BuilderX i mam problem gdzie wpisać tą instrukcje. W książce pisze: "na końcu programu, tuż przed klamrą kończącą funkcje main" czyli rozumiem że ma to wyglądać tak:

coś tam coś tam kod programu
system("pause");

^^^ tutaj miał być ten znaczek ] z wciśniętym shiftem, który kończy main, tylko chyba GOL go nie pokazuje :P

jednak Builder wykazuje to jako błąd i gdy uruchamiam program to nie działa ta instrukcja. Czy ktoś mógłby mi pomóc i powiedzieć gdzie ją wpisać? Bedę bardzo wdzięczny.
Pozdrawiam

17.06.2007
21:48
[331]

Haron [ the boatman ]

to zależy czy taka komenda jest akurat w bibliotece.
niektóre komendy np. clrscr dostępne tylko w pakietach borlanda.

wstaw mu na koniec getchar(); może conajwyżej wyrzucić warninga 'code has no effect', ale poskutkuje. możesz spróbować też getche(); o ile jest w bibliotekach twojego kompilatora.

17.06.2007
22:36
[332]

maVes [ Generaďż˝ ]

Gotman - spróbuj dołączyć nagłówek cstdlib i wtedy użyć funkcji system().
cin.get() powinno dać podobny efekt.
Jeszcze jeden ze znanych mi sposobów to dołączenie pliku conio.h i wywołanie funkcji getch() (albo _getch() - nie pamiętam).

17.06.2007
22:36
[333]

Gotman [ Generaďż˝ ]

Dzięki za pomoc.
Jak wpisałem getchar(); to nie wykazywało tego jako błąd ale dalej nie działa, bo program sie zamyka i nie widać wyniku, dla którego ten program został w sumie napisany.
Po wpisaniu getche(); kompilator wykazuje błąd i też nic nie działa. Cóż, bede próbował dalej. Gdyby ktoś miał jakieś pomysły - będę wdzieczny za każdą pomoc :)
Pozdrawiam

Chwilka, właśnie teraz zauważyłem post maVes'a :)

17.06.2007
22:53
[334]

Gotman [ Generaďż˝ ]

Dziękuję maVes :)
z cstdlib nie działało, za to z conio.h i getch(); zadziałało :)
dziękuję, pozdrawiam i życzę milego wieczorku :)

17.06.2007
23:58
smile
[335]

slowik [ NightInGale ]

nie komendy a funkcje !!!!...

w stdlib system chyba sie znajduje i wystarczy na koncu dac 2x getchar (dlaczego? pierwszy czysci bufor z ostatniego enter'a ...) albo fflush(stdin) i pozniej getchar

18.06.2007
01:30
[336]

Qbaa [ Senator ]

może ktoś wskazać poprawną odpowiedź? ja zgłupiałem :)

Dziedziczenie w programowaniu obiektowym pozwala na
A. łączenie obiektów.
B. usunięcie z istniejącej klasy zbędnych elementów.
C. tworzenie nowej klasy na podstawie jednej lub kilku już istniejących.
D. kopiowanie cech jednego obiektu do innego.

18.06.2007
02:00
[337]

Haron [ the boatman ]

wkipedia prawdę Ci powie:


Dziedziczenie (ang. inheritance) to w programowaniu obiektowym operacja polegająca na stworzeniu nowej klasy na bazie klasy już istniejącej.

najlepszą odpowiedzią będzie C. należy dodać, że potomek ma wszystkie cechy rodzica + swoje własne dodatkowe.

18.06.2007
10:30
[338]

fanlegii79 [ Generaďż˝ ]

C, tylko dowalili tam wielodziedziczenie czego żaden popularny język nie obsługuje.

18.06.2007
15:01
[339]

Qbaa [ Senator ]

ok, dzięki. właśnie zmyliło mnie "lub kilku już istniejących"

18.06.2007
16:47
[340]

Haron [ the boatman ]

szybkie pytanie. jak w javie przekształcić obiekt String na liczbę całkowitą?

18.06.2007
17:29
[341]

maVes [ Generaďż˝ ]

Haron -> wystarczyło wyszukać na Googlach:

Java - Converting String to int

int i = Integer.parseInt(str);

lub

int i = Integer.valueOf(str).intValue();

18.06.2007
18:57
[342]

Haron [ the boatman ]

dzięki maVes.
przejrzałem cała klasę Integer i nie znalazłem metody parseInt. widocznie przeoczyłem. o tym drugim sposobie nie wiedziałem, dopiero zaczynam w Javie. ;)

Edyta poprawiła literówki :)

18.06.2007
21:36
[343]

maVes [ Generaďż˝ ]

Haron - ja Javy w ogóle nie znam, ale zamierzam się nauczyć w wakacje :)

A tak przy okazji - kiedy następna część wątku? Ta mi się już długo ładuje :)

19.06.2007
00:48
[344]

Haron [ the boatman ]

mam jeszcze jedno pytanie odnośnie drukowania.
chodzi o dpi.
w wkipedii pisze:
dpi (ang. dots per inch) – liczba plamek przypadająca na cal długości. Jednostka stosowana do określenia rozdzielczości drukarek, ploterów, naświetlarek itp. Pojęcie to jest bardzo rozpowszechnione i często stosowane także jako potoczny zamiennik określeń pokrewnych: ppi (pixels per inch – pikseli na cal)

szczególnie mnie interesuje "potoczny zamiennik ppi".
stąd moja wątpliwość. jeżeli mam obrazek dajmy na to 200x200 pikseli, to czy gdy będzie on drukowany w rozdzielczości 600dpi, czy innej to jego wymairy na kartce nie powinny się zmienić, tak? zmieni się tylko dokładność oddania obrazku? czy zmieni się też jego rozmiar na kartce?
na mój chłopski rozum jeżeli będzie zmieniać się wartość dpi, zmienia się liczba plamek na cal, to liczba plamek na piksel też będzie się zmieniać, ale sama ilość pikseli na cal nie powinna się zmienić? jeśli jestem w błędzie, to proszę o poprawienie.

19.06.2007
09:54
[345]

You tube my space. [ Konsul ]

Hej :)

Jaką książkę/kurs WWW możecie polecić do nauki pisania w Visual Studio 2005? Chodzi mi głównie o wykorzystanie MFC, czyli pisanie aplikacji okienkowych. Fajnie by było, gdyby kurs był w formie tutoriali, czyli teraz robimy coś tam i używamy do tego czegoś tam ;)Gdzieś znajdę taki fajny kurs jakich setki do np. Delphi? Sprawdzałem strony Microsoftu, ale straasznie dużo jest tam informacji i nie natknąłem się na takie tutoriale, które by mnie interesowały (a jedynie suche specyfikacje). Dzięki :)

19.06.2007
10:44
smile
[346]

You tube my space. [ Konsul ]

Chyba nie doceniałem MSDN ;) W każdym razie jeśli ktoś ma jakieś fajne rzeczy na temat VC++ to chętnie przejrzę :)

21.06.2007
20:17
[347]

Gotman [ Generaďż˝ ]

Ok, problem rozwiązany :)

21.06.2007
20:28
[348]

Gotman [ Generaďż˝ ]

Witam ponownie :)
Mam pytanie:
jeśli C++BuilderX w takiej linijce:

std::cout << "Na jakiej wysokosci lecimy? [w metrach] : ";

wywala błąd to czy świadczy to o tym, że jest coś z nim nie tak [z kompilatorem of course :)]?
Oto raport z błędu:

"source.cpp": E2141 Declaration syntax error in function main() at line 6

Z góry dziękuję za pomoc. Jeśli ktoś do oceny potrzebuje większej ilości kodu, to podam.
Pozdrawiam

21.06.2007
20:38
[349]

maVes [ Generaďż˝ ]

Gotman - podaj więcej kodu, najlepiej cały.

21.06.2007
20:44
[350]

Gotman [ Generaďż˝ ]

#include <iostream>
int main()

int wys, punkty_karne
std::cout << "Na jakiej wysokosci lecimy? [w metrach] : ";
std::cin >> wys;
//rozwazamy sytuacje
if(wys < 500)

std::cout << "\n" << wys << "metrow to za nisko! \n";
punkty_karne = 1;

else

std::cout << "\n Na wysokosci" << wys << "metrow jestes juz bezpieczny";
punkty_karne = 0;

//oceniamy
std::cout << "Masz" << punkty_karne << "punktow karnych. \n";
if( punkty_karne)
std::cout << "Popraw sie!";

21.06.2007
20:44
[351]

maVes [ Generaďż˝ ]

Brakuje średników, czyli tak jak podejrzewałem :)

Powinno być: int wys, punkty_karne;

22.06.2007
07:20
[352]

Gotman [ Generaďż˝ ]

Oł, my mistake :)
Dziękuję i pozdrawiam.

© 2000-2026 GRY-OnLine S.A.