Lekcja 12

Wszystkie informacje związane z Kurs C++ - POZIOM 2

Moderator: Moderatorzy

Lekcja 12

Postprzez mnabialek Śr paź 25, 2006 14:50 pm

W tym temacie można zgłaszać uwagi, błedy lub niejasności dotyczące 12 lekcji kursu C++ na stronie http://www.ithelpdesk.pl.
Promocja na abonament w serwisie - kup lub poleć innym - szczegóły na Abonament w serwisie
Avatar użytkownika
mnabialek
Administrator
Administrator
 
Posty: 656
Dołączył(a): Śr paź 25, 2006 14:05 pm
Lokalizacja: Częstochowa

Postprzez Armon N gru 31, 2006 18:31 pm

Kod: Zaznacz cały
#include <iostream>

using namespace std;

int main()
{
  double calkowita[6]; // tablica 6 liczb typu double

  cout <<"Podaj pierwsza liczbe: ";
  cin >>calkowita[0]; // pobieramy pierwszy element do tablicy
  cin.ignore();
  cout <<"Podaj druga liczbe (rozna od zera): ";
  cin >>calkowita[1]; // pobieramy drugi element do tablicy
  cin.ignore();

  //do pozostalych elementow tablicy przypiszemy wyniki dzialania na elementach

  calkowita[2]=calkowita[0]+calkowita[1];
  calkowita[3]=calkowita[0]-calkowita[1];
  calkowita[4]=calkowita[0]*calkowita[1];
  calkowita[5]=calkowita[0]/calkowita[1];
  //calkowita[6]=calkowita[0]+calkowita[1];  blad - calkowita[6] nie istnieje!!!

  cout <<"Podane liczby to: "<<calkowita[0]<<' '<<calkowita[1]<<'\n'
       <<"Ich suma wynosi: "<<calkowita[2]<<'\n'
       <<"Ich roznica wynosi: "<<calkowita[3]<<'\n'
       <<"Ich iloczyn wynosi: "<<calkowita[4]<<'\n'
       <<"Ich iloraz wynosi: "<<calkowita[5]<<'\n';

  cout <<"\nNacisnij ENTER aby zakonczyc\n";
  getchar();
  return 0; 
}



Jest to kod skopiowany z kursu. Mam takie pytanie... tablica calkowita[6] nie istnieje i jest blad, natomiast jesli usune komentarze bledu nie bedzie, a co nadodatek mozna tej zmiennej uzyc. Co najsmieszniejsze jeszcze do kilku tablic wzwyż można coś przypisać, a później wypisać (co prawda nie do wielu), czemu dokładnie to uznawane jest za błąd?? Dotychczas myślałem, że przykładowo tablica:

tab[5] to moge jej przypisać 6 elementów, bo są ułożone od 0 do 5. No i to dziala poprawnie, gdzie moze wystapic blad w przyszlosci? Bardzo prosze o wytlumaczenie ;). Bo te moje rozumowanie działa jakoś poprawnie...

(tzn. że jest o jedna tablice wiecej z powodu tablicy zerowej, ale takze istnieje dalej tablica ostatnia...).

Pozdrowienia
Armon :)
Life is brutal and full of zasadzkas but sometimes is good while and for this good while warto life ;)
http://videokurs.pl :-)
Avatar użytkownika
Armon
zaawansowany
zaawansowany
 
Posty: 388
Dołączył(a): Wt paź 31, 2006 23:45 pm

Postprzez mnabialek N gru 31, 2006 18:43 pm

Jest o tym wspomniane w jednej z lekcji kursu.

Zapisując coś do elementów tablicy, które nie istnieją, zamazujemy coś w pamięci operacyjnej. Może się zdarzyć, że dla kilku komórek w danym programie nie stanowi to problemu i rzeczywiście nie widać od razu błędnego działania, jednak w większym programie, takiego błędu można szukać bardzo bardzo długo.

Dlatego należy bardzo uważać i pamiętać o indeksowaniu tablic w C++, bo to na nas spoczywa odpowiedzialność za poprawność tej operacji...
Promocja na abonament w serwisie - kup lub poleć innym - szczegóły na Abonament w serwisie
Avatar użytkownika
mnabialek
Administrator
Administrator
 
Posty: 656
Dołączył(a): Śr paź 25, 2006 14:05 pm
Lokalizacja: Częstochowa

Postprzez Armon N gru 31, 2006 19:54 pm

Rozumiem, dzięki za wytłumaczenie :)
Life is brutal and full of zasadzkas but sometimes is good while and for this good while warto life ;)
http://videokurs.pl :-)
Avatar użytkownika
Armon
zaawansowany
zaawansowany
 
Posty: 388
Dołączył(a): Wt paź 31, 2006 23:45 pm

Postprzez Angelus So lut 10, 2007 22:00 pm

tak sobie pisałem różne programiki w celach testowych i jedna sprawa mnie zdziwiła. Napisałem taki programik:
Kod: Zaznacz cały
#include<iostream>

using namespace std;

int main()
{
    char zmienna[2];
    cout<<"podaj nazwe\n";
    cin>>zmienna;
    cin.ignore();
    cout<<"twoja nazwa to "<<zmienna<<'\n';
    cout<<sizeof(zmienna)<<'\n';
    cout<<"naciscij Enter\n";
    getchar();
  return 0;
}

I gdy się go uruchomi to można wpisać nazwę mającą więcej niż jeden znak np. Helena i zostaje ono zapisane jako zmienna, a do tego zajmuje ona tylko 2 bajty. Czemu tak się dzieje? Nie powinno być błędu?

Kody programów umieszczamy w znaczniku CODE !
Angelus
obserwator
obserwator
 
Posty: 10
Dołączył(a): Pt lut 09, 2007 18:14 pm

Postprzez mnabialek So lut 10, 2007 22:13 pm

Do wczytywania napisów należy raczej używać stringów. C++ to język, w którym kontrola jest położona na programistę. Więc w Twoim przykładzie należałoby stworzyć tablicę odpowiednio dużą, żeby pomieścić maksymalną ilość znaków jaką może wprowadzić użytkownik.

Błąd oczywiście jest, ale jest ukryty i może pojawić się w przypadku rozbudowanego programu w najbardziej nieoczekiwanym momencie.

Zapraszam do lektury Kurs C++
Promocja na abonament w serwisie - kup lub poleć innym - szczegóły na Abonament w serwisie
Avatar użytkownika
mnabialek
Administrator
Administrator
 
Posty: 656
Dołączył(a): Śr paź 25, 2006 14:05 pm
Lokalizacja: Częstochowa

Postprzez Angelus So lut 10, 2007 22:28 pm

Właśnie go czytam i swoją drogą jest świetny, mam w domu jeden podręcznik do c++ ale jest o wiele gorszy od twojej strony.
Wiem już że do napisów wykorzystuje się typ string, dlatego dziwi mnie iż program działa. gdy zamiast char[2] zastosuje char to już nie działa.
Angelus
obserwator
obserwator
 
Posty: 10
Dołączył(a): Pt lut 09, 2007 18:14 pm

Następna strona

Powrót do KURS C++ POZIOM 2

Kto przegląda forum

Użytkownicy przeglądający to forum: Brak zalogowanych użytkowników i 1 gość

cron
ręceprecz odtybetu | Programista PHP | Pozycjonowanie www | Seo link directory | Pozycjonowanie Częstochowa | wizy do rosji | wizy do uzbekistanu
bieżnie do biegania | Drzwi prysznicowe harmonijkowe | katalog | Zestawy ogrodowe | Projektowanie stron WWW Warszawa