losowanie tablicy dwuwymiarowej

0

c++/borland c++ builder 6

Witam,
mam nastepujacy programik który tworzy dynamiczną tablice dwuwymiarowa i wypełnia ją losowymi wartosciami.

#include <locale>
#include <iomanip>
#include <conio.h>
#include <iostream>
#include <fstream>
#pragma hdrstop
#pragma argsused
using namespace std;

 int w; //rozmiar
 int **tablica = new int * [w];
 
 void losowanie()
        {
             
              cout<<"Podaj rozmiar"<<endl;cin>>w;
              for (int j=0; j<w; j++)
               { tablica[j] = new int[w]; } 
          
             for( int i=0; i<w; i++){ 
                  for( int j=0; j<w; j++){ 
                          if (i!=j) tablica[i][j] = (rand() % 9)+1;
                          else tablica[i][j]=-1; 
                          } 
                          
                    } 
         }
void wypisanie()
        {
                for (int a=0; a<w;a++)
                          { for (int b=0;b<w;b++)
                                   {  cout<<tablica[a][b]<<"    ";
                                   }cout<<endl;
                          }
        }

int main(int argc, char* argv[])
{
        losowanie();
        wypisanie();
        getch();
        return 0;
}
 

Kompilacja przechodzi. Program działa poprawnie jeśli rozmiar tablicy jest mniejszy niż 27,
problem pojawia się gdy podam rozmiar większy niż 27 program się uruchomi i przestanie działać:/

prosze o pomoc

0
 int w; //rozmiar
 int **tablica = new int * [w];
0

zmieniłem typ na

long int

i dzieje sie tak samo:/

#include <locale>
#include <iomanip>
#include <conio.h>
#include <iostream>
#include <fstream>
#pragma hdrstop
#pragma argsused
using namespace std;

 int w; 
 long int **tablica = new long int * [w];
 
 void losowanie()
        {
             
              cout<<"Podaj rozmiar"<<endl;cin>>w;
              for (int j=0; j<w; j++)
               { tablica[j] = new long int[w]; } 
          
             for(int i=0; i<w; i++){ 
                  for(int j=0; j<w; j++){ 
                          if (i!=j) tablica[i][j] = (rand() % 9)+1;
                          else tablica[i][j]=-1; 
                          } 
                          
                    } 
         }
void wypisanie()
        {
                for (int a=0; a<w;a++)
                          { for (int b=0;b<w;b++)
                                   {  cout<<tablica[a][b]<<"    ";
                                   }cout<<endl;
                          }
        }

int main(int argc, char* argv[])
{
        losowanie();
        wypisanie();
        getch();
        return 0;
}
0

Przecież ten kod:

 int w; //rozmiar
 int **tablica = new int * [w];

nie ma sensu.

Zmienna w jest równa 0 i ta "tablica" jest bezużyteczna.

0

ale "w" podaje w funkcji losowanie()

cout<<"Podaj rozmiar"<<endl;cin>>w;  
0

Ale tablicę inicjujesz przed podaniem tej zmiennej, a nie po :|

0

no tak, jak zainicjuje ja wewnatrz funkcji losowanie, to nie bede sie mogl do niej odwoływac w innej funkcji :/

da rade to jakosc zorganizowac zeby to bylo mozliwe ???

P.S. moje pytania pewnie są banalne ale prosze 0 wyrozumialość - programistą to ja nie jestem

1

Zrób po prostu:

int **tablica;

I w funkcji ją inicjuj...

0

ok, dzx wielkie

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