Zaloguj się, aby obserwować  
Bartuc

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

1979 postów w tym temacie

Aj, no i samemu zapomniałem się spytać.
Jest jakiś możliwie wydajny sposób aby znaleźć dwa najwyższe elementy w tablicy? Sam najwyższy to nie problem, to mogę zrobić już na etapie wprowadzania danych...Ale potrzebuję jeszcze drugiego w kolejności i tu zaczynają się schody, bo wolałbym nie implementować pełnoprawnego sortowania bąbelkowego itp. Choć jeśli nie mam wyboru, to to zrobię.

Errata do poprzedniego posta:
Mały błąd w kodzie:
powinno być po cin >> rozmiar:
rozmiar--; (tak aby liczyć od 1 a nie od 0)
i w pętli for pozbyć się tego -1.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Zwykłe szukanie najwyższej, ale na dwie zmienne wynikowe. Tzn: najwyższą do tej pory wrzucasz na drugie miejsce i zastępujesz ją nową najwyższą i porównujesz dalej.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 27.10.2010 o 20:54, hans_olo napisał:

Zwykłe szukanie najwyższej, ale na dwie zmienne wynikowe. Tzn: najwyższą do tej pory
wrzucasz na drugie miejsce i zastępujesz ją nową najwyższą i porównujesz dalej.


Że też na to nie wpadłem...dzięki ;P

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

hmm... Dzięki, ale trochę tu za dużo rzeczy, których nie znam... głupio mi z takiego czegoś korzystać:P Jakakolwiek zawartość nawiasu int main jest mi obca a te arg i * też nie wiem co to:). Ale dzięki.

@Adikos
Dziękuję:).

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 27.10.2010 o 22:30, tomoliop napisał:

hmm... Dzięki, ale trochę tu za dużo rzeczy, których nie znam... głupio mi z takiego
czegoś korzystać:P Jakakolwiek zawartość nawiasu int main jest mi obca a te arg i * też
nie wiem co to:). Ale dzięki.


Tej zawartości int main to zasadniczo w ogóle nie musiałoby być. WxDev C++, którego używam, po prostu sam dorzuca te dodatkowe wartości.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Słuchajcie, zaczynam dopiero pisanie w C, żeby było śmieszniej, wykładowca nie zamierza tego języka tłumaczyć, tylko kazał zrobić zadanie. No ale już sobie praktycznie poradziłem, improwizując składnię C w biegu. Mam tylko jedno pytanie. Zadanie polega na policzenie całki sinusa x pod wykresem. I użytkownik ma wpisać liczbę naturalną będącą przedziałem całkowania. I teraz jak zrobić, żeby w razie wpisania liczby nienaturalnej albo litery, program wydał stosowny komunikat? Albo jeszcze lepiej, żeby zapytał ponownie o liczbę. Bo z tego co mówił wykładowca, to C "łyka wszystko" i wpisanie na zmienną double litery nie zostanie samoistnie zerrorowane. Byłbym wdzięczny za pomoc, bo program mam na środę.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 30.10.2010 o 20:49, Erton napisał:

I teraz jak zrobić, żeby w razie wpisania liczby nienaturalnej albo litery,
program wydał stosowny komunikat? Albo jeszcze lepiej, żeby zapytał ponownie o liczbę.

Podejrzewam, ze nie jest to najlepsze rozwiązanie ale w ostatecznosci mozesz zrobic tak:
wczytujesz liczbe po znaku i jesli trafiasz na znak poza przedzialem [0..9] to zwracasz komunikat/prosisz o powtorne wpisane liczby.

Dnia 30.10.2010 o 20:49, Erton napisał:

Bo z tego co mówił wykładowca, to C "łyka wszystko" i wpisanie na zmienną double litery
nie zostanie samoistnie zerrorowane. Byłbym wdzięczny za pomoc, bo program mam na środę.

Probujac np. przypisac do int wartosc double dojdzie do rzutowania niejawnego (liczba zostanie przycieta do czesci calkowitej).

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

/.../
To akurat dość prosto zrobić (kod zrobiłem w C++, ale powinieneś go zrozumieć):

#include <cstdlib>
#include <iostream>

using namespace std;

int main(int argc, char *argv[])
{
int a;
if (cin >> a)
{
cout << "wpisano liczbe";
}
else
{
cout << "to nie jest liczba!";
}
system("PAUSE");
return EXIT_SUCCESS;
}

Kwestia użycia jednej instrukcji if przy wprowadzaniu danych.

@ macned
Przy twoim sposobie musiałbyś najpierw sprawdzać znak po znaku w tablicy typu char i gdy wszystkie znaki pasują do wzorca, to przerzucić to dopiero do double'a.

EDIT
Mały błąd.
To wyklucza tylko litery, na liczby z ułamkami nie zadziała. Kwestia kolejnego if-a z tym by sprawdzał czy to co wpisałeś (np. 2.3) jest równe z floor(a) (czyli 2). Jeśli tak, to ok. Jeśli nie, to nie wpisałeś liczby naturalnej.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 31.10.2010 o 12:41, ziptofaf napisał:

@ macned
Przy twoim sposobie musiałbyś najpierw sprawdzać znak po znaku w tablicy typu char i
gdy wszystkie znaki pasują do wzorca, to przerzucić to dopiero do double''a.


Nie myślałem o tym żeby w tablice to wrzucać, tylko zrobić coś takiego:

char c;
int n = 0;
while (( c = getchar() ) != EOF)
{


if ((c >= ''0'') && (c <= ''9''))
{
n = 10*n;
n = n + (c - ''0'');
}
else
{
//blad
}

}

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 13.11.2010 o 13:45, eNcore napisał:

Witam :) Jakie polecacie środowisko do C pod Windows''a?

MSVC++ Express, chyba że nie chcesz tak ciężkiego środowiska, to CodeLite + MinGW (w jednej paczce też jest).

@Harrolfo
Nie ma czegoś takiego jak Borland Dev C++, to raz.
Chodziło Ci pewnie o Bloodshed Dev C++, ale to straszny staroć, dlatego odradza się jego używanie, to dwa.
http://revo.pl/index.php/blog/detailed/70

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 13.11.2010 o 18:04, KapiX napisał:

Nie ma czegoś takiego jak Borland Dev C++, to raz.
Chodziło Ci pewnie o Bloodshed Dev C++, ale to straszny staroć, dlatego odradza się jego
używanie, to dwa.
http://revo.pl/index.php/blog/detailed/70


Owszem, że staroć ale na tyle prosty i przejrzysty że idealnie nadaje sie dla początkującego, uczącego się programisty. A takim zapewne jest eNcore - gdyby nie był nie pytałby się o środowisko. W MSV początkującemu problem może stworzyć sama kompilacja gdy podczas nauki najważniejsza jest umiejętność sprawnego posługiwania się narzędziami a nie ich niezwykle profesjonalne możliwości.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 13.11.2010 o 18:16, o_Orange napisał:

Owszem, że staroć ale na tyle prosty i przejrzysty że idealnie nadaje sie dla początkującego,
uczącego się programisty. A takim zapewne jest eNcore - gdyby nie był nie pytałby się
o środowisko. W MSV początkującemu problem może stworzyć sama kompilacja gdy podczas
nauki najważniejsza jest umiejętność sprawnego posługiwania się narzędziami a nie ich


Niestety nie jestem początkującym programistą :( Po prostu byłem ciekawy Waszej opinii :). Wcześniej pisałem w C++ w Qt od Nokii (czasami problematyczne, średnio polecam), jednak wymagają teraz ode mnie czystego C, więc stąd pytanie o IDE.

@Kapix

Dzięki za link do ciekawego blogu :)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 13.11.2010 o 18:16, o_Orange napisał:

W MSV początkującemu problem może stworzyć sama kompilacja gdy podczas
nauki najważniejsza jest umiejętność sprawnego posługiwania się narzędziami a nie ich
niezwykle profesjonalne możliwości.

Patrząc z perspektywy czasu, przesiadka na VC++ była dla mnie trudna właśnie ze względu na to, że zaczynałem od Deva, dlatego uważam, że lepiej początkującemu dać VC++ albo CodeLite (Code::Blocks, cokolwiek bardziej rozbudowanego niż Dev) i powiedzieć "jak klikniesz build to się skompiluje". Na początek wystarczy, a przy okazji uczeń będzie mógł oswajać się z interfejsem. Dasz takiego "prostszego" Deva, to przesiadka na coś innego (która prędzej czy później będzie musiała mieć miejsce) będzie tragedią.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 13.11.2010 o 19:06, KapiX napisał:

Patrząc z perspektywy czasu, przesiadka na VC++ była dla mnie trudna właśnie ze względu
na to, że zaczynałem od Deva, dlatego uważam, że lepiej początkującemu dać VC++ albo
CodeLite (Code::Blocks, cokolwiek bardziej rozbudowanego niż Dev) i powiedzieć "jak klikniesz
build to się skompiluje". Na początek wystarczy, a przy okazji uczeń będzie mógł oswajać
się z interfejsem. Dasz takiego "prostszego" Deva, to przesiadka na coś innego (która
prędzej czy później będzie musiała mieć miejsce) będzie tragedią.

Przecież w MS VS też wystarczy dać "Build Project", albo po prostu "Run".
Jedyna "przewaga" Deva to to, że jeśli mamy programik mieszczący się w jednym pliku, nie musimy tworzyć projektu. Ale samo stworzenie projektu w VS to też dwa razy kliknięcie Next.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 13.11.2010 o 19:19, Vel_Grozny napisał:

Przecież w MS VS też wystarczy dać "Build Project", albo po prostu "Run".

Niby tak, tyle że byłem przerażony wielkością Visuala, dlatego piszę o oswajaniu się z interfejsem. Dodatkowo dochodzi zamęt w głowie związany z nazewnictwem - Visual po angielsku, Dev po polsku (i jego pamiętne Odpluskiwanie). Potem trochę popracowałem w VC++ i już nie mam z nim najmniejszych problemów, ale początki były nawet jeśli nie straszne, to... dziwne. Dodam jeszcze, że pierwsza wersja Visuala, z którą miałem do czynienia to VC++ 2005 Express, a jak wiadomo w nim nie dołączali headerów WinAPI, więc część aplikacji nie chciała się kompilować (a w Devie działały). Nie miałem wtedy dostępu do internetu, więc nie mogłem ich dociągnąć, i Visual wydał mi się trochę ułomny, myślę że to też miało wpływ na odbiór tego narzędzia. Teraz może rzeczywiście przejście nie byłoby tak problematyczne.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Witam. Szukam osoby zaznajomionej w języku C i w strukturach. Dokładniej to poszukuje jakiegoś dobrego przykładu w C w którym występują głównie struktury.
Mam projekt zrobić bazę biblioteczną w strukturach, itd. lecz książkę do C, którą mam w ogóle nie rozumiem.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Witam. Mam problem z podana częścią programu. Dlaczego mi scanf nie działa? Wpiszę 1 i robi mi fukcję na default.

printf("Witamy w bazie danych\n");
printf("Co chcesz zrobic? 1-dodanie ksiazki, 2-usuniecie, 3- edycja, 4-wypisanie bazy\n");
scanf("%d",a);
switch(a)
{
case 1:
dodaj();
break;
case 2: itd.

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ć