Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Funkcja zwracajaca wskaznik

Ostatnio zmodyfikowano 2014-03-21 13:28
Autor Wiadomość
dybek
Temat założony przez niniejszego użytkownika
Funkcja zwracajaca wskaznik
» 2014-03-21 10:24:35
Witam, mam problem z funkcja a dokladnie ze zwracaniem wskaznika przez nia i odczytywaniem go w mainie. Gdy zwracam wskaznik to tylko pierwsza liczbe wypisuje poprawna a reszta jest losowa.

C/C++
#include <iostream>

using namespace std;

int * wydaj_reszte( int oplata, int banknot )
{
    int reszta = banknot - oplata;
    int wsk[ 20 ];
    memset( wsk, 0, sizeof( int ) * 20 );
    int i = 0;
    while( reszta != 0 )
    {
        if( reszta >= 100 && reszta < 200 )
        {
            wsk[ i ] = 100;
            reszta = reszta - 100;
            i++;
        }
        if( reszta >= 50 && reszta < 100 )
        {
            wsk[ i ] = 50;
            reszta = reszta - 50;
            i++;
           
        }
        if( reszta >= 20 && reszta < 50 )
        {
            wsk[ i ] = 20;
            reszta = reszta - 20;
            i++;
           
        }
        if( reszta >= 10 && reszta < 20 )
        {
            wsk[ i ] = 10;
            reszta = reszta - 10;
            i++;
           
        }
        if( reszta >= 5 && reszta < 10 )
        {
            wsk[ i ] = 5;
            reszta = reszta - 5;
            i++;
           
        }
        if( reszta >= 2 && reszta < 5 )
        {
            wsk[ i ] = 2;
            reszta = reszta - 2;
            i++;
           
        }
        if( reszta >= 1 && reszta < 2 )
        {
            wsk[ i ] = 1;
            reszta -= 1;
            i++;
           
        }
    }
    return wsk;
}
void main()
{
    int i = 0, * wsk2;
    int banknot, oplata;
   
    miejsce:
    cout <<( "Ile placimy ? \n" );
    cin >> oplata;
    if( oplata > 200 && oplata < 0 )
    {
        cout <<( "Za duza oplata\n" );
        goto miejsce;
    }
    miejsce2:
    cout <<( "jakim banknotem placimy ? \n" );
    cin >> banknot;
    if( banknot < oplata || banknot > 200 )
    {
        cout <<( "Banknot musi byc wiekszy od oplaty !\n" );
        goto miejsce2;
    }
    wsk2 = wydaj_reszte( oplata, banknot );
    while( wsk2[ i ] != 0 )
    {
        cout << wsk2[ i ];
        cout << " ";
        i++;
    }
}
P-106894
alixir
» 2014-03-21 13:28:04
Jeśli chcesz to osiągnąć w ten sposób, twój program wymaga kilku zmian.

1. Zastąp linijki
C/C++
int wsk[ 20 ];
memset( wsk, 0, sizeof( int ) * 20 );

tą:
int * wsk = new int[ 20 ];


2. W każdym "if" wewnątrz funkcji po każdej inkrementacji "i++" dopisz
continue;


3. Przed
return wsk;
 dopisz
wsk[ i ] = 0;


4. Aby zapobiec wyciekowi pamięci w programie głównym musisz zwolnić pamięć przydzieloną w funkcji. Tym samym rozwiązanie to jest dość niebezpieczne.
Na końcu program dopisz:
delete[] wsk2;
P-106902
« 1 »
  Strona 1 z 1