[c++] wyzerować elementy leżące na głównej przekątnej

0

Witam!
Muszę utworzyć tablicę o wymiarach n x n wypełnioną dowolnymi liczbami rzeczywistymi oraz wyzerować elementy leżące na głównej przekątnej:

Oto moje wypociny:

#include<iostream>
using namespace std;

int main()
{
     unsigned int n, y=0;
     cin>>n;    
     int tab[n][n];
     
     for(int x=0;x<n;x++)
       for(y=0; y<n;y++) cin>>tab[y][x];

     for(int x=0; x<n; x++)
     {
        tab[x][y]=0;
        y++;
     }
     for(int x=(n-1); x>=0; x--)
     {
        tab[x][n-1]=0;
        n--;
     }          
       return 0;
} 

Problem w tym, że program nie działa jak powinien...

0

int tab[n][n];
Tak się nie tworzy tablicy..
Poczytaj o tablicach dynamicznych.

0

Okey, to teraz mam coś takiego:

#include<iostream>
using namespace std;

int main()
{
     unsigned int n, y=0;
     cin>>n;    
     int **tab = new int *[n];
     for ( int i = 0; i < n; ++i )
     tab[i] = new int [n];
     
     for(int x=0;x<n;x++)
       for(y=0; y<n;y++) cin>>tab[y][x];

     for(int x=0; x<n; x++)
     {
        tab[x][y]=0;
        y++;
     }
     for(int x=(n-1); x>=0; x--)
     {
        tab[x][n-1]=0;
        n--;
     }          
     for ( int i(0); i < n; ++i )
     delete [] tab[i];
     delete [] tab; 
       system("pause");
} 

Ale problem się nie zmienił...

0
#include <iostream>
using namespace std;
int main()
{
	int n;
	cin>>n;
	int **macierz;
	macierz=new int*[n];
	for(int i=0;i<n;i++)
		macierz[i]=new int [n];
	for(int i=0;i<n;i++)
		for(int j=0;j<n;j++)
		{
			if(i==0 || j==0 || i==n-1 || j==n-1)
				macierz[i][j]=0;
			else
				while( !(cin>>macierz[i][j]) || macierz[i][j]==0)
				{
					cout<<"BLAD STRUMIENIA\n";
					cin.ignore();
					cin.clear();
				}
		}
	for(int i=0;i<n;i++)
	{
		for(int j=0;j<n;j++)
			cout<<macierz[i][j]<<" ";
		cout<<endl;
	}
	for(int i=0;i<n;i++)
		delete [] macierz[i];
	delete [] macierz;
	return 0;
}
0

Dzięki. Chyba nie do końca zrozumiałeś treść zadania... tablica n x n ma być wypełniona dowolnymi liczbami rzeczywistymi i należy wyzerować elementy leżące na głównej przekątnej.

0
#include <iostream>
using namespace std;
int main()
{
	int n;
	cin>>n;
	int **macierz;
	macierz=new int*[n];
	for(int i=0;i<n;i++)
		macierz[i]=new int [n];
	for(int i=0;i<n;i++)
		for(int j=0;j<n;j++)
		{
			if(i==j)
				macierz[i][j]=0;
			else
				while( !(cin>>macierz[i][j]) || macierz[i][j]==0)
				{
					cout<<"BLAD STRUMIENIA\n";
					cin.ignore();
					cin.clear();
				}
		}
	for(int i=0;i<n;i++)
	{
		for(int j=0;j<n;j++)
			cout<<macierz[i][j]<<" ";
		cout<<endl;
	}
	for(int i=0;i<n;i++)
		delete [] macierz[i];
	delete [] macierz;
	return 0;
}

śpiący już jestem i nie doczytałem,,

0

Chodziło mi o coś takiego:

#include <iostream>
using namespace std;
int main()
{
        int n;
        cin>>n;
        int **macierz;
        macierz=new int*[n];
        for(int i=0;i<n;i++)
                macierz[i]=new int [n];
        for(int i=0;i<n;i++)
                for(int j=0;j<n;j++)
                        while( !(cin>>macierz[i][j]) || macierz[i][j]==0)
                                {
                                        cout<<"BLAD STRUMIENIA\n";
                                        cin.ignore();
                                        cin.clear();
                                }
        for(int i=0;i<n;i++)
        {
                for(int j=0;j<n;j++){
                        if(i==j)
                           macierz[i][j]=0;
                        if(j==(n-1-i))
                           macierz[i][j]=0;
                        cout<<macierz[i][j]<<" ";}
                cout<<endl;
        }
        for(int i=0;i<n;i++)
                delete [] macierz[i];
        delete [] macierz;
        return 0;
}
 

Dzięki za pomoc :)

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