Zaloguj się, aby obserwować  
Bartuc

Język C / C++ / C# / Java - pytania, problemy...

1979 postów w tym temacie

Dnia 26.11.2007 o 19:14, pretorianie napisał:

A nie da się sprawdzić po prostu czy liczba da się podzielić przez 2 a wynik z dzielenia będzie
liczbą całkowitą?

hehe, jedno i to samo, tylko że zamiast tej liczby właściwej sprawdzasz czy reszta jest liczbą całkowitą.

PS.
jak już pisałem, to:
if (a!=(int)a) cout<<(int)a+1;
else if (a=(int)a) cout<<a;
jest prawidłowe, tylko ja sprawdzając czy działa dawałem np. "1,4" a prawidłowo powinno być "1.4" i dlatego myślałem że nie działa :)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Najłatwiej sprawdzić sobie kody programikiem takim jak poniższy:
#include <conio.h>
#define ESC 0x1b
void main(void)
{
int c;
puts("Klawisz ESC konczy program");
do
{
if((c = getch()) == ''\0'')
printf("Kod znaku: 0h, %02Xh\n", c = getch());
else
printf("Kod ASCII znaku: %02Xh\n", c);
}while(c != ESC);
}

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Czy ktoś z Was słyszał o takim języku jak Objektive-C? Jest to język obiektowy wykorzystywany głównie w systemie Mac OS X. ale nie tylko (chociaż tam głównie się go stosuje). Moje pytanie odnosi się do jakiejkolwiek literatury na temat tego języka. Czy ktoś może mi pomóc?

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

witam czy ktoś mógł by mi pomóc ? nie wiem jak zabrac sie i jak zrobic zadanie z C++

funkcje porządkującą trzy liczby w kolejnosci rosnącej...

bardzo prosze o szybką w miare odpowiedz

dzieki !
aha i jeszcze jedno prosze od razu wytłumaczyc co i jak i dlaczego.. w tym programie chce to nie tylko miec ale takze zrozumiec.. dzieki jeszcze raz..

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Zakładam, że podstawy C++ znasz i nie trzeba ci tłumaczyć co to jest zmienna, tablica, pętla i takie tam, a wytłumaczenie ma dotyczyć tylko samego algorytmu.

=============== program.cpp =================
#include <iostream>
using namespace std;

void sortuj(float tab[]) //funkcja sortująca tablice 3 elementową
{
float pom; //zmienna pomocnicza do zamiany liczb w tablicy
if (tab[0] > tab[1]) //sprawdza czy 1 liczba jest większa od 2. jeśli tak zamienia je
{
pom = tab[0]; //do zmiennej pom zapisuję informacje o jednej z wartości z tablicy, żeb jej nie stracić
tab[0] = tab[1];
tab[1] = pom;
}
if (tab[0] > tab[2]) //ten warunek sprawdza czy 1 liczba jest większa od 3 i zamienia je jeśli trzeba - po tym na 1 miejscu (a zerowym w tablicy) mamy już na pewno najmniejszą
{
pom = tab[0];
tab[0] = tab[2];
tab[2] = pom;
}
if (tab[1] > tab[2]) //teraz sprawdza czy 2 liczba jest większa od 3 i zamienia je jeśli trzeba - po tym ciąg już będzie posortowany
{
pom = tab[1];
tab[1] = tab[2];
tab[2] = pom;
}
}

int main()
{
float tab[3]; //tworzy trójelementową tablice w której przechowywane będą nasze liczby

for (int n=0; n<3; n++) //pętla do pobrania wartości 3 liczb do tablicy
{
cout<<"Podaj "<<n+1<<". liczbe do porownania: ";
cin>>tab[n];
}

sortuj(tab); //uruchomienie funkcji sortującej

cout<<endl<<"Te liczby posortowane: ";
for (int n=0; n<3; n++) cout<<tab[n]<<", "; //pętla do wyświetlania posortowanej tablicy

cout<<endl;
system("PAUSE");
}
===================== koniec=====================

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 06.01.2008 o 19:52, vBoguSv napisał:

Zakładam, że podstawy C++ znasz i nie trzeba ci tłumaczyć co to jest zmienna, tablica, pętla
i takie tam, a wytłumaczenie ma dotyczyć tylko samego algorytmu.

=============== program.cpp =================

Dnia 06.01.2008 o 19:52, vBoguSv napisał:

===================== koniec=====================

tak na szybko... wiekie wielkie dzieki.. zaraz wrzuce i przestudiuje sobie to wszystko

wielkie dzieki !
do moderatora : piwo dla tego pana raz prosze :P

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Dnia 06.01.2008 o 19:52, vBoguSv napisał:

=============== program.cpp =================
#include <iostream>
using namespace std;

>
a powiedz mi co to jest te using ... powyzej ?
jakby co ja uzywam tclite

Dnia 06.01.2008 o 19:52, vBoguSv napisał:

void sortuj(float tab[]) //funkcja sortująca tablice 3 elementową
{
float pom; //zmienna pomocnicza do zamiany liczb w tablicy
if (tab[0] > tab[1]) //sprawdza czy 1 liczba jest większa od 2. jeśli tak zamienia
je
{
pom = tab[0]; //do zmiennej pom zapisuję informacje o jednej z wartości z tablicy,
żeb jej nie stracić
tab[0] = tab[1];
tab[1] = pom;
}
if (tab[0] > tab[2]) //ten warunek sprawdza czy 1 liczba jest większa od 3 i zamienia
je jeśli trzeba - po tym na 1 miejscu (a zerowym w tablicy) mamy już na pewno najmniejszą
{
pom = tab[0];
tab[0] = tab[2];
tab[2] = pom;
}
if (tab[1] > tab[2]) //teraz sprawdza czy 2 liczba jest większa od 3 i zamienia je
jeśli trzeba - po tym ciąg już będzie posortowany
{
pom = tab[1];
tab[1] = tab[2];
tab[2] = pom;
}
}

int main()
{
float tab[3]; //tworzy trójelementową tablice w której przechowywane będą nasze liczby

for (int n=0; n<3; n++) //pętla do pobrania wartości 3 liczb do tablicy
{
cout<<"Podaj "<<n+1<<". liczbe do porownania: ";

tutaj mi sie pojawia error ze coś te n+1 jest multiple.. ?!

Dnia 06.01.2008 o 19:52, vBoguSv napisał:

cin>>tab[n];
}

sortuj(tab); //uruchomienie funkcji sortującej

cout<<endl<<"Te liczby posortowane: ";
for (int n=0; n<3; n++) cout<<tab[n]<<", "; //pętla do wyświetlania posortowanej
tablicy

cout<<endl;
system("PAUSE");
}
===================== koniec=====================

tak ogólnie to chyba juz .. wiem co i jak.. ale kurde czy bedą czasy kiedy ja bede pisał taki program bez zająknięcia.... ? ehhhh

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 06.01.2008 o 20:35, Chester001 napisał:

a powiedz mi co to jest te using ... powyzej ?

using namespace std; to informacja dla kompilatora, że od tego miejsca będziesz poruszał się w standardowej przestrzeni nazw i korzystał ze zdefiniowanych tam funkcji itp. - dla początkującego ważne jest tylko to, że dzięki temu ma mniej pisania, bo np. zamiast std::cout wystarczy samo cout.

Ale w tym kompilatorze jest to zbędne, bo to właściwie kompilator C, a tam, chyba (bo języka nie znam), przestrzeni nazw nie było. Tak mi się wydaje, bo po wywaleniu tej linijki (i wprowadzeniu innych zmian pod ten kompilator) się kompiluje normalnie.

Dnia 06.01.2008 o 20:35, Chester001 napisał:

jakby co ja uzywam tclite

Nie znam go, ale ściągnąłem, żeby zobaczyć co to i nie wygląda zbyt przyjaźnie - no i ma długą brodę ze starości. Jeśli nie musisz na nim pracować przerzuć się na Dev C++ albo MS Visual C++ 2008 Express Edition. Wtedy ten kod, który ci dałem zadziała bez żadnych zmian.

Dnia 06.01.2008 o 20:35, Chester001 napisał:

tutaj mi sie pojawia error ze coś te n+1 jest multiple.. ?!

Ten błąd pojawia się trochę dalej. Przy drugiej pętli - a znaczy tyle, że twój kompilator nie jest zgodny ze standardem C++. Chodzi o to, że nie uwzględnia zakresu istnienia zmiennych i uważa, że już wcześniej deklarowałeś zmienną "n" (mimo, że zgodnie ze standardem ona już nie istnieje) to nie możesz zdeklarować jeszcze raz zmiennej o takiej samej nazwie. Wystarczy że w tej drugiej pętli, wszystkie "n" zmienisz na "m" i będzie działać.

A w tej linijce wyrzuca błąd nieznanego operatora - wystarczy "n+1" wziąć w nawias i przy "(n+1)" będzie działać.

A i jeszcze musisz wywalić linijkę system("pause"); bo to polecenie z tych udostępnianych przez windowsa, a tclite jest dosowy i go nie zna.

Dnia 06.01.2008 o 20:35, Chester001 napisał:

tak ogólnie to chyba juz .. wiem co i jak.. ale kurde czy bedą czasy kiedy ja bede pisał taki
program bez zająknięcia.... ? ehhhh

Akurat to nie jest jeszcze żaden program. I takie coś pisze się po kilku godzinach czytania o C++ - jeśli na prawdę chcesz się tym zająć, to na początek polecam np. Symfonię C++ Grębosza.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Dnia 06.01.2008 o 21:52, vBoguSv napisał:

> tak ogólnie to chyba juz .. wiem co i jak.. ale kurde czy bedą czasy kiedy ja bede pisał
taki
> program bez zająknięcia.... ? ehhhh
Akurat to nie jest jeszcze żaden program. I takie coś pisze się po kilku godzinach czytania
o C++ - jeśli na prawdę chcesz się tym zająć, to na początek polecam np. Symfonię C++ Grębosza.


mam całe 3 tomy tego w domu :P
tylko jest jedna mała sprawa...
mi jakoś bardzo bardzo i bardzo trudno przychodzi nauka.. tj zrobie wszstko aby sie nie uczyc..
to nie ode mnie zalezy tak juz mam ze ehh no trudno mi usiąść do ksiazki poczytac i jeszcze zapamietac to i.. uzyc . c++ T 1 przeczytałem do połozy ale zbym ja z tego coś pamietał to inna sprawa :/

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 06.01.2008 o 22:09, Chester001 napisał:

no trudno mi usiąść do ksiazki poczytac i jeszcze zapamietac to i.. uzyc
z. c++ T 1 przeczytałem do połozy ale zbym ja z tego coś pamietał to
inna sprawa :/

Bo pewnie masz złe podejście - nie chodzi o to, żeby czytać, zapamiętać i potem używać. Powinieneś czytać i od razu używać (np. robiąc ćwiczenia z końca rozdziału), a zapamiętywanie przychodzi z praktyką. Najpierw będziesz pisał z książką, potem już tylko zaglądał co jakiś czas, a na sam koniec najważniejsze rzeczy będziesz pamiętał, a resztę samemu szukał np. przeglądając kody bibliotek standardowych. O ile wcześniej nie rzucisz programowania, bo okaże się, że jednak wcale ciebie to nie bawi.

I przerzucenie się na bardziej cywilizowany kompilator też jest konieczne - nie nauczysz się pisać dobrych programów, zgodnych w jak największym stopniu ze standardem i zasadami dobrego programowania, jeżeli nie będziesz korzystał z odpowiednich narzędzi.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Dnia 06.01.2008 o 22:21, vBoguSv napisał:

I przerzucenie się na bardziej cywilizowany kompilator też jest konieczne - nie nauczysz się
pisać dobrych programów, zgodnych w jak największym stopniu ze standardem i zasadami dobrego
programowania, jeżeli nie będziesz korzystał z odpowiednich narzędzi.

wiesz wszystko ok tylko ze ja ten kompilator mam na studium :/
za kilka tygodni ?! przejdziemy na nowsze... ehhh...

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

#include <iostream.h>
#include <conio.h>
#include <stdarg.h>

void sortuj(float tab[]) //funkcja sortująca tablice 3 elementową
{
float pom; //zmienna pomocnicza do zamiany liczb w tablicy
if (tab[0] > tab[1]) //sprawdza czy 1 liczba jest większa od 2. jeśli tak zamienia je
{
pom = tab[0]; //do zmiennej pom zapisuję informacje o jednej z wartości z tablicy, żeb jej nie stracić
tab[0] = tab[1];
tab[1] = pom;
}
if (tab[0] > tab[2]) //ten warunek sprawdza czy 1 liczba jest większa od 3 i zamienia je jeśli trzeba - po tym na 1 miejscu (a zerowym w tablicy) mamy już na pewno najmniejszą
{
pom = tab[0];
tab[0] = tab[2];
tab[2] = pom;
}
if (tab[1] > tab[2]) //teraz sprawdza czy 2 liczba jest większa od 3 i zamienia je jeśli trzeba - po tym ciąg już będzie posortowany
{
pom = tab[1];
tab[1] = tab[2];
tab[2] = pom;
}
}

int main()

{
float tab[3]; //tworzy trójelementową tablice w której przechowywane będą nasze liczby
\
for (int m=0; m<3; m++) //pętla do pobrania wartości 3 liczb do tablicy
{
cout<<"Podaj "<<n+1<<". liczbe do porownania: ";
cin>>tab[n];
}

sortuj(tab); //uruchomienie funkcji sortującej

cout<<endl<<"Te liczby posortowane: ";
for (int n=0; n<3; n++) cout<<tab[n]<<", "; //pętla do wyświetlania posortowanej tablicy

cout<<endl;
getch();
}

zmieniłem i jak zadziała to pokazuje 3 liczby takie same .. po przecinku.. :/

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 07.01.2008 o 21:00, Chester001 napisał:

zmieniłem i jak zadziała to pokazuje 3 liczby takie same .. po przecinku.. :/


Skoro zmieniłeś nazwę zmiennej obsługującą pętle, to też powinieneś zmienić w jej wnętrzu n na m - bo n już nie ma w tym miejscu. I w takim przypadku twój kompilator prawdopodobnie tworzy n z wartością 0 i przez to tylko do pierwszej komórki tablicy (tej z indeksem 0) wczytujesz trzy liczby, a potem zamiast sortowania mamy kopiowanie ostatniej wprowadzonej wartości do pozostałych komórek. Gdybyś wprowadził trzy liczby ujemne, to prawdopodobnie program wypisałby jako posortowany ciąg trzy zera.

for (int m=0; m<3; m++) //pętla do pobrania wartości 3 liczb do tablicy
{
cout<<"Podaj "<<(m+1)<<". liczbe do porownania: ";
cin>>tab[m];
}

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Prościej pisze się tak:

#include <iostream.h>
using namespace std;

void sortuj(float tab[])
{
if( tab[0] > tab[1] ) swap<float>(tab[0], tab[1]); //na początku najmniejsza z pierwszych dwóch
if( tab[0] > tab[2] ) swap<float>(tab[0], tab[2]); //na początku najmniejsza z trzech
if( tab[1] > tab[2] ) swap<float>(tab[1], tab[2]); //na końcu największa z trzech
}

void main()
{
float tab[3]; //tworzy trójelementową tablice w której przechowywane będą nasze liczby
int n;
for (n = 0; n < 3; ++n) //pętla do pobrania wartości 3 liczb do tablicy
{ cout<<"Podaj " << (n+1) << ". liczbę do porównania: "; cin >> tab[n]; }
sortuj(tab);
for ( cout << "\nTe liczby posortowane: ", n = 0; n < 3; ++n) ) cout << tab[n] << " ";
cin.ignore(MAX_INT).get(); //opróżnia cout i nic nie robi czekając na wciśnięcie klawisza
}

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 06.01.2008 o 22:09, Chester001 napisał:

mi jakoś bardzo bardzo i bardzo trudno przychodzi nauka.. tj zrobie wszstko aby sie nie uczyc..

Spróbuj takiego podejścia: zastanów się nad pewnym praktycznym problemem (np. wymagającym dużej ilości obliczeń i zaprzęgnij do niego komputer). Przećwiczysz pętle, instrukcje warunkowe, typy danych - rzeczy nieodzowne w programowaniu.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Modkowie to moją dobrze, bo po edycji swoich postów nie mają o tym wzmianki (i potem mogą się wypierać, że czegoś nie napisali). ;) Właśnie miałem pisać, że z rozpędu za bardzo chciałeś uprościć program i łącząc dwa wyrażenia warunkowe sortowanie potrafiło dać dziwne efekty. Ale zanim zdarzyłem o tym napisać, w kodzie już rozdzieliłeś 1. i 2. ifa ;]

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 07.01.2008 o 23:35, vBoguSv napisał:

Modkowie to moją dobrze, bo po edycji swoich postów nie mają o tym wzmianki (i potem mogą się wypierać, że czegoś nie napisali

Tu większe znaczenie ma, żeby napisany tekst był poprawny. :) A co do modyfikacji, to każda zmiana łącznie z tymi moderatorskimi jest zapisywana we właściwościach posta.

Dnia 07.01.2008 o 23:35, vBoguSv napisał:

Ale zanim zdarzyłem o tym napisać, w kodzie już rozdzieliłeś 1. i 2. ifa ;]

No widzisz, jakbyś zdążył dopisać posta, to nie byłbym w stanie poprawić standardowym sposobem. A co do else, to mam taki nawyk, żeby robić ciągi else if. W tym wypadku oczywiście błędne.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 08.01.2008 o 00:21, Olamagato napisał:

Tu większe znaczenie ma, żeby napisany tekst był poprawny. :)

Tak, to przede wszystkim. :) Sam się teraz zastanawiam, dlaczego nie wyrzuciłem zamiany wartości do osobnej funkcji - coś ostatnio nie myślę najlepiej. Chociaż ja, gdybym jednak wtedy pomyślał o stworzeniu funkcji zamien to trzymałbym się jednak referencji - raz, że bezpieczniejsze (bo nie trzeba pamiętać o wyłuskiwaniu), a dwa, imho kod bez gwiazdek jest czytelniejszy i łatwiejszy w odbiorze. A w tym konkretnym przypadku, wykorzystanie wskaźników nie daje nam żadnej przewagi nad referencją.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 08.01.2008 o 00:30, vBoguSv napisał:

ja, gdybym jednak wtedy pomyślał o stworzeniu funkcji zamien to trzymałbym się jednak referencji

Jest standardowy szablon funkcyjny swap (i makro w C też) oparty na referencji.

Dnia 08.01.2008 o 00:30, vBoguSv napisał:

imho kod bez gwiazdek jest czytelniejszy i łatwiejszy w odbiorze.

Ok, zmienię na kod purystycznie C++ idealny. :)

Dnia 08.01.2008 o 00:30, vBoguSv napisał:

A w tym konkretnym przypadku, wykorzystanie wskaźników nie daje nam żadnej przewagi nad referencją.

Mniej pisania przy wywoływaniu. :) Ale generalnie masz rację. Za dużo piszę kodu asemblerowego i inteligentnych wskaźników.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Czy jest jakiś szybki sposób na znalezienie wszystkich dzielników danej liczby (rzędu do połowy miliona)? Sposób z wyszukiwaniem ich po kolei (sprawdzaniem kolejnych liczb od 2 do połowy wartości liczby) nie jest raczej dobry.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Utwórz konto lub zaloguj się, aby skomentować

Musisz być użytkownikiem, aby dodać komentarz

Utwórz konto

Zarejestruj nowe konto na forum. To jest łatwe!


Zarejestruj nowe konto

Zaloguj się

Masz już konto? Zaloguj się.


Zaloguj się
Zaloguj się, aby obserwować