Mportalik - forum dyskusyjne Strona Główna Mportalik - forum dyskusyjne
Super forum młodzieżowe.

FAQFAQ  SzukajSzukaj  UżytkownicyUżytkownicy  GrupyGrupy
RejestracjaRejestracja  ZalogujZaloguj  AlbumAlbum

Poprzedni temat «» Następny temat
problem z mnozeniem w C++
Autor Wiadomość
Stavros 
*


Imię: Maciej
Dołączył: 21 Maj 2006
Posty: 88
Wysłany: 09-07-2006, 18:56   problem z mnozeniem w C++

Ucze się C++ i mam problem z mnożeniem, otóż w pętli nie działa mi mnożenie przez co wynik jest równy 0 a nie powinien.
Kod:
#include <iostream>

using namespace std;

int liczba[1000];
int liczbaSterujacaII;
int iloscLiczb()
{
    liczbaSterujacaII=0;
    cout << "\nPodaj ile liczb bedzie w tym dzialaniu nie wliczajac wyniku: ";
    cin  >> liczbaSterujacaII;
}

int wczytywanie()
{
    int liczbaOperacyjna=0;
    cout << "Podaj wszystkie liczby kazda potwierdzajac enterem: " << endl;
    while (liczbaOperacyjna<liczbaSterujacaII)
    {
        cin  >> liczba[liczbaOperacyjna];
        ++liczbaOperacyjna;
    }
}

int mnozenie()
{
    int oper=0;
    while(oper<liczbaSterujacaII)
    {
        cout << liczba[oper] << " * ";
        ++oper;
    }
    oper=0;
    int wynik=0;
    wynik=liczba[0]*liczba[1];

  //------------------------------ chodzi o tą pętle 
    while(oper<liczbaSterujacaII)
    {
         wynik=wynik*liczba[oper+2];
        ++oper;
    }                                 
  //------------------------------ dotąd

    cout << "\b\b= " << wynik << endl;
}

int main()
{
    iloscLiczb();
    wczytywanie();
    mnozenie();
    int b;
    cin >> b;
    return 0;
}


jeśli ktoś wie dlaczego to nie działa albo wie jak zrobić żeby działało to prosze pisać. Z góry dzieki.
Ostatnio zmieniony przez Stavros 09-07-2006, 19:12, w całości zmieniany 1 raz  
 
  Znak zodiaku: bliznieta
 
Hydragorn
*


Dołączył: 08 Lip 2006
Posty: 29
Wysłany: 13-07-2006, 21:39   

Problem jest bardzo prosty... Zobacz tutaj: "int wynik=0;"

O ile wiem jeśli liczbę mnoży się przez 0 to zawsze wychodzi.... 0 :D Zmień to na 1 a będzie dobrze :D
Pozdrawiam
 
 
Stavros 
*


Imię: Maciej
Dołączył: 21 Maj 2006
Posty: 88
Wysłany: 14-07-2006, 19:12   

Sprawdziłem tak jak poradziłeś i dalej nie działa. A to zero znalazło się tam pewnie dlatego że próbowałem na różne sposoby poradzic sobie z tym problemem i zmieniałem 0-a na 1-ynki, 1-ynki na 0-a albo na coś jeszcze innego i kicha
 
  Znak zodiaku: bliznieta
 
Hydragorn
*


Dołączył: 08 Lip 2006
Posty: 29
Wysłany: 15-07-2006, 12:50   

Ok już widzę błąd:
Kod:

int wynik=1; //tak ma być to już jest oczywste

wynik=liczba[0]*liczba[1]; // to całkiem wywalić

    while(oper<liczbaSterujacaII)
    {
         wynik=wynik*liczba[oper+2]; // a tu nie dodawać 2
        ++oper;
    }   


więc ostatecznie

Kod:
int wynik=1;

while(oper<liczbaSterujacaII)
{
     wynik=wynik*liczba[oper];
     ++oper;
}


Jednak ja bym to przepisał na nieco inną postać równoważną ale lepszą pod względem programistycznym:

Kod:

#include <iostream>
#include <conio.h> // Tutaj jest funkcja getch()

using namespace std;

int iloscLiczb()
{
    int ile=0;
    cout << "\nPodaj ile liczb bedzie w tym dzialaniu nie wliczajac wyniku: ";
    cin  >> ile;
    return ile;
}

int wczytywanie(int ile,int *liczba)
{
    cout << "Podaj wszystkie liczby kazda potwierdzajac enterem: " << endl;

    for(int licznik=0;licznik<ile;licznik++)
      cin  >> liczba[licznik];
}

int mnozenie(int ile,int *liczba)
{
    for(int oper=0;oper<ile;oper++)
        cout << liczba[oper] << " * ";

    int wynik=1;
    for(int oper=0;oper<ile;oper++)
         wynik *= liczba[oper];

    cout << "\b\b= " << wynik << endl;
}

int main()
{
   int liczba[1000];
   int liczbaSterujacaII;

   liczbaSterujacaII = iloscLiczb();
   wczytywanie(liczbaSterujacaII,liczba);

   mnozenie(liczbaSterujacaII,liczba);
   int b;
   getch(); //To jest funkcja, która zczytuje jeden znak z klawiatury. Więc nie musisz wpisywać znaku a potem naciskać enter tylko po prostu dowolny znak.
   return 0;
}


Wciąż możnaby było to jeszcze ładniej napisać ale nie chcę zaciemniać kodu. Staraj się nie używać zmiennych globalnych jeśli to nie jest konieczne i naucz się składni instrukcji for... jest bardzo przydatna :D

Pozdrawiam, jakbyś miał jeszcze jakieś problemy to służe pomocą. Polecam poczytać o wskaźnikach i o zasięgu zmiennych... przyda ci się to.[/code]
 
 
Stavros 
*


Imię: Maciej
Dołączył: 21 Maj 2006
Posty: 88
Wysłany: 19-07-2006, 15:13   

Dzieki za pomoc
Hydragorn napisał/a:
jakbyś miał jeszcze jakieś problemy to służe pomocą.
zapamietam sobie :D
 
  Znak zodiaku: bliznieta
 
GsE997 
*



Dołączył: 03 Sie 2006
Posty: 58
Wysłany: 04-08-2006, 00:20   

Banalne, niestety ja się na tym nie znam i nie pomogę
_________________
GsE - gorącym sexem emanuje
Wszystko co zostało napisane przezemnie wynika tylko i wyłącznie z tego, że nie miałem lepszego zajęcia i strasznie mi się nudziło. Jeśli kogoś uraziłem ..... proszę mnie przeprosić .


A ty Gość co się tak gapisz ?
 
 
Hydragorn
*


Dołączył: 08 Lip 2006
Posty: 29
Wysłany: 05-08-2006, 12:51   

To typowy przykład człowieka, który jeśli nie nabije bezsensownego posta to się zesra :/

Sugeruję włączyć wygasanie postów... ludzie, którzy chcą coś skomentować a nie dotyczy to bezpośrednio rozmowy będą mogli wygasić swoje posty automatycznie.
Ostatnio zmieniony przez Hydragorn 05-08-2006, 12:52, w całości zmieniany 1 raz  
 
 
Piotrek

Dołaczył: Dawno
Posty:
Skad: Z internetu





Wyświetl posty z ostatnich:   
Odpowiedz do tematu
Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Nie możesz załączać plików na tym forum
Możesz ściągać załączniki na tym forum
Dodaj temat do Ulubionych
Wersja do druku

Skocz do:  

Powered by phpBB modified by Przemo © 2003 phpBB Group
REGULAMIN

:::REKLAMA:::

Mapa forum
Fotografie ślubne Wiadomości, newsy
statystyki www stat.pl