Skocz do zawartości

Kilka banalnych pytań, związanych z C++


Draconis

Rekomendowane odpowiedzi

Witam

 

W C++ pisałem kilka lat temu, lecz zmieniłem język, którym się posługiwałem na VB.net, gdyż uznałem go za odpowiedniejszy, niestety (a może i stety) muszę wrócić do C++, gdyż zamierzam zdać na maturze, a od 2009 Visual Basic przestał być dostępny, dodatkowo będę zdawać na Dev-C++.

 

Aby sobie poprzypominać C++ próbuję napisać kilka prostych programów, lecz przy pierwszym (pierwszym trochę bardziej skomplikowanym od pobrania liczby z klawiatury i jej napisaniem na ekranie :)) zaczynam mieć problemy.

Ok, starczy mojego drobnego użalania się.

  if (n>1)
    { 
            while (n>1)
            { p=n%k;
              if (p=0)
              {
                      n=n/k;
                      cout << k << ", ";
              }
              if (p!=0)
              {
                       k=k+1;
              }
                           
            }   
    
    }

Powyżej jest wycinek z kodu (wiem, że ta metoda, nie jest najlepszym rozwiązaniem problemu), projekt się kompiluje prawidłowo, wszystkie zmienne są zadeklarowane, n jest wprowadzane z klawiatury, a k wynosi 2. Zgodnie z moimi przewidywaniami po podaniu np. liczby 6 powinno wyświetlić 2, 3 na ekranie. Czemu po podaniu dowolnej liczby program się zapętla nie podając żadnych wyników.

Odnośnik do komentarza
Udostępnij na innych stronach

while( n > 1 )
{

    p = n % k;

    if( p == 0 )
    {
        
            n = n / k;
            cout << k << ", ";

    }
    else
    {
    
        k++;
    
    }

}

Odnośnik do komentarza
Udostępnij na innych stronach

Dzięki, pozapominałem najprostsze rzeczy np. takie że porównanie wymaga dwóch znaków "=" a nie jednego, inkrementacją(czy jak się to pisze) nie lubię się posługiwać, mam taki nawyk.

Będę w tym temacie zadawał w przyszłości dalsze pytania (w końcu temat jest w liczbie mnogiej)

Odnośnik do komentarza
Udostępnij na innych stronach

  • Filar Społeczności
Dzięki, pozapominałem najprostsze rzeczy np. takie że porównanie wymaga dwóch znaków "=" a nie jednego, inkrementacją(czy jak się to pisze) nie lubię się posługiwać, mam taki nawyk.

Będę w tym temacie zadawał w przyszłości dalsze pytania (w końcu temat jest w liczbie mnogiej)

Jak nie chcesz pisać k++ to pisz k+=1;

Odnośnik do komentarza
Udostępnij na innych stronach

ja jestem za to ciekaw czy kompilator dla trzech wariantow inkrementacji:

i++;

i+=1;

i=i+1;

robi jakies roznice w kompilowaniu. znaczy i tak calosc to powinna sie sprowadzac do asmowego 'add i 0x1', jakim jest inkrementacja. Jesli dla niego to roznica sposobow wykonywania to szybciej bedzie dzialac inkrementacja nizeli i=i+1. ale to i tak malo wazny szczegol, z reguly programy nie sa az tak powolne aby sposob inkrementacji sie liczyl, ale jako ciekawostke bylbym chetny sie dowiedziec jak to z tym jest.

Odnośnik do komentarza
Udostępnij na innych stronach

  • Filar Społeczności
ja jestem za to ciekaw czy kompilator dla trzech wariantow inkrementacji:

i++;

i+=1;

i=i+1;

robi jakies roznice w kompilowaniu. znaczy i tak calosc to powinna sie sprowadzac do asmowego 'add i 0x1', jakim jest inkrementacja. Jesli dla niego to roznica sposobow wykonywania to szybciej bedzie dzialac inkrementacja nizeli i=i+1. ale to i tak malo wazny szczegol, z reguly programy nie sa az tak powolne aby sposob inkrementacji sie liczyl, ale jako ciekawostke bylbym chetny sie dowiedziec jak to z tym jest.

jak masz sporo pętli for z dużą ilością obiektów to może się to przydać. (znaczy, wiedza, które się wykonuje najszybciej)

o ile jest jakaś różnica of kors

 

Trochę na necie poszukałem i wychodzi (chyba), że różnica może być co najwyżej w czasie kompilacji.

 

chyba, że ktoś chciałby zwiększać liczbę o więcej niż 3, wtedy między i++++++++, a i+=4 są różnice.

Odnośnik do komentarza
Udostępnij na innych stronach

ja jestem za to ciekaw czy kompilator dla trzech wariantow inkrementacji:

i++;

i+=1;

i=i+1;

robi jakies roznice w kompilowaniu. znaczy i tak calosc to powinna sie sprowadzac do asmowego 'add i 0x1', jakim jest inkrementacja. Jesli dla niego to roznica sposobow wykonywania to szybciej bedzie dzialac inkrementacja nizeli i=i+1. ale to i tak malo wazny szczegol, z reguly programy nie sa az tak powolne aby sposob inkrementacji sie liczyl, ale jako ciekawostke bylbym chetny sie dowiedziec jak to z tym jest.;

 

Na 99% te trzy inkrementacje w visualu są tak samo szybkie(przynajmniej w tej formie).

Odnośnik do komentarza
Udostępnij na innych stronach

Może bez optymalizacji kompilator by wygenerował inny kod dla każdej z tych konstrukcji, tak to to wszystko zostanie uznane za jedno i to samo i kompilator wygeneruje zależnie od kontekstu kod najlepszy dla danego trybu optymalizacji (rozmiar, szybkość). Tak więc to niema znaczenia z którego wariantu się tu skorzysta, to samo tyczy się:

chyba, że ktoś chciałby zwiększać liczbę o więcej niż 3, wtedy między i++++++++, a i+=4 są różnice.
Odnośnik do komentarza
Udostępnij na innych stronach

calkowite:

c=a^b

zmiennoprzecinkowe:

c=a;

if(b==0)

c=1;

else

for(int i=1;i<b;i++)c*=a;

Odnośnik do komentarza
Udostępnij na innych stronach

sry, przeczytalem potegowanie :D

 

a ten znak ^ to nie pamietam czy dobry, ale operator bitowy << poteguje 2

Odnośnik do komentarza
Udostępnij na innych stronach

  • 3 tygodnie później...

Kolejne pytanie.

Używam biblioteki winbgim, czy jest możliwe stworzenie w niej aplikacji z dwoma (lub więcej) oknami graficznymi działającymi niezależnie od siebie i jeżeli tak to w jaki sposób je rozróżnić w kodzie)

 

edit

Używam biblioteki conio.h a konkretnie funkcji getch(), tylko, że w przypadku zmiany znaku lub naciśnięcia >1 naraz, program się zacina na ułamek sekundy co jest denerwujące, więc pytanie brzmi, czy jest jakaś praktyczniejsza metoda operacji na klawiszach w podstawowych bibliotekach?

 

edit

Zrobiłem swoją pierwszą minigrę w C++ i oczywiście chcę się nią pochwalić, mimo iż do tego się nie nadaje, Jest to moja wersja gry Lightcycle, więc chyba wszyscy wiedzą o co chodzi. W aktualnej wersji nie ma przeciwników. Najlepszy wynik jest zapisywany do pliku. O prymitywności tej wersji świadczy też to że po spakowaniu zajmuje ok 300kb

Pobierz

 

edit

$Wrzuciłem wam wersję z błędnym sprawdzaniem więc proszę byście w pseudomenu nie wciskali niczego, co nie jest wymienione.

Odnośnik do komentarza
Udostępnij na innych stronach

  • 1 miesiąc temu...

Witam, niestety to znowu ja.

Tym razem mam kolejny banalny kłopot z fstream, a właściwie nie wiem jak wykonać pewną czynność a mianowicie zapisanie i wczytanie do/z pliku tablicy dwuwymiarowej, z zastrzeżeniem, że wartości mają być ułożone graficznie w sposób odpowiadający tablicy (nie jestem pewien jak to napisać)

czyli, żeby np. prostą tablicę uzyskaną kodem:

  int test[9][9];
  int x,y,z;
  z=0;
  for(x=0;x<10;x++)
  {
    for(y=0;y<10;y++)
    {
      test[x][y]=z;  
      z++;           
    }                
  }

zapisać do pliku w formie

1 2 3 4 5 6 7 8 9 10
11 12 13 14 15 16 17 18 19 20
21 22 23 24 25 26 27 28 29 31 itd.

Co jestem w stanie zrobić przy użyciu fstream, głównie chodzi mi o działanie w przeciwną stronę, czyli mamy plik w postaci np.

1 5 8 9
4 8 6 4
8 9 4 5
8 9 6 4

i chcę to zapisać do tablicy. W tym wypadku np. test2[3][3] tak by np. test2[1][0] przyjęło wartość bodajże 5 a test2[0][1] 4.

Pozdrawiam

Odnośnik do komentarza
Udostępnij na innych stronach

1. Wczytać do tablicy jednowymiarowej a potem przerzucić do 2-wymiarowej.

2. zapisać && wczytać binarnie(opening mode -> binary).

3. "Latać" po pliku po kolejne indexy(wolne..)

 

Ogólnie jeśli chcesz all czysto tekstowo to wczytaj całość a potem przetwarzaj choćby z stringstream.

Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...