Tablica dynamiczna i wskazniki

0

Witam.Mam do napisania program obliczający wartości cyfr jedności i liczb znaczących te pierwsze mi działają lecz z znaczącymi mam problem i stoję w miejscu. Myślę ze problem jest tablicy w związku z tym ze jej statyczna a chyba powinna być dynamiczna. Proszę o podpowiedz wszystkim z góry dziękuje za poświęcony. czas.

#include <iostream>
#include <cstdlib>
#include <stdio.h>
#include <time.h>
#include <conio.h>
#include <cmath>
using namespace std;

int cyfry_znaczace(int n,int tab[])
{
    int min;
    min=0;

    for(int i=0; i<n; i++)
    {
        while(tab[i]>0)
        {
            min=tab[i]%10;
            tab[i]=tab[i]/10;
        //cout<<"tab     "<<tab[i]<<"     min       "<<min<<endl;
            if(min<tab[i])
                tab[i]=min;
        }
    }
    return min;
}

int cyfry_jednosci(int n,int tab[])
{
    int max;
    max=0;

    for(int i=0; i<n; i++)
    {
        tab[i]=tab[i]%10;
        if(tab[i]>max)
            max=tab[i];
    }

    return max;
}



int main()
{
    char wybor;
    int n;
    /*int *tab;
    tab = new int [n];*/

    int N=10000;
    int tab[N];

    cout<<"Generuj ciag z klawiatury wybierz 1."<<endl;
    cout<<"Generuj ciag losowo wybierz 2."<<endl;
    wybor=getch();




    switch(wybor)
    {
    case '1':
    {
        cout<<"Podaj ilosc elementow ciagu: ";
        cin>>n;
        for(int i=0; i<n; i++)
        {
            cout<<"Podaj "<<i+1<<" element ciagu : ";
            cin>>tab[i];
        }
        cout<<"Najwieksza cyfra jednosci to : "<<cyfry_jednosci(n,tab)<<endl;
        cout<<"Najmiesza wartosc najbardziej znaczacej cyfry : "<<cyfry_znaczace(n,tab)<<endl;

    }
    break;

    case '2':
    {
        int p,q;

        cout<<"Podaj liczbe elementow ciagu ktory ma zostac wygenerowany losowo oraz jego zakres: "<<endl;
        cin>>n>>p>>q;

        srand(time(NULL));
        for(int i=0; i<n; i++)
        {
            tab[i]= p+(q-p)*int (rand())/RAND_MAX;
        }

        cout<<"Najwieksza cyfra jednosci to : "<<cyfry_jednosci(n,tab)<<endl;
        cout<<"Najmiesza wartosc najbardziej znaczacej cyfry : "<<cyfry_znaczace(n,tab)<<endl;
    }
    break;
    }

    return 0;
}
0

W funkcji cyfry_jednosci zmieniają się wartości tablicy przykładowo : tab{101,1002,1000} to po wykonaniu tej funkcji masz tab{1,2,0} czyli przekazujesz inne tablicę z innymi wartościami do funkcji cyfry_znaczace .

0

Ahaa no tak przekazuje mi wyliczone liczby jednosci jako zmienioną tablice do cyfry_znaczące. Czy co muszę zrobić bo ja mam w zamyśle wyznaczyć liczby jednosci i znaczące z jednego ciągu. Da się to jakoś rodzielic żeby mi nie pobieralo złej tablicy?

0

Rada taka że jak nie musisz sam bawić się tablice dynamiczne to korzystaj z std::vector.

0

Ale w moim kodzie problemem jest to że nie mam tablicy dynamicznej i przesyłam do funkcji oryginalne dane i jedna z nich (czyli funkcji) zmienia podczas kompilacji te dane dobrze rozumiem ?

2
int N=10000;
    int tab[N];

To nie jest prawidłowa deklaracja tablicy w c++.
Tablica musi mieć stały rozmiar.

Przekazując nazwę tablicy do funkcji, nazwa ta jest niejawnie konwertowana do wskaznika na pierwszy element tej tablicy, więc działasz na oryginalnej tablicy.
Z funkcji można zwrócić utworzoną tam dynamiczną tablicę std::vectorlub do funkcji wysłać kopię oryginalnej tablicy.

1 użytkowników online, w tym zalogowanych: 0, gości: 1