Tabliczka mnożenia - wyświetlania, formatowanie - jak to zrobić?

0

Mam stworzyć dynamiczną tablicę dwuwymiarową do tabliczki mnożenia, napisać kod który ją liczy i odpowiednio wyświetlić, problem mam z wyświetleniem jej tak jak w przykładzie:

#include<stdio.h>
#include<iostream>
#include<conio.h>

using namespace std;


int main()
{
	int n, licznik = 0;

	cout << "Wprowadz wielkosc tabliczki mnozenia?: ";
	cin >> n;
	cout << endl;
	licznik = n;


	int ** tablica = new int *[n+1];
	tablica[0] = new int[n+1];

	for (int i = 1; i < n + 1; i++)
	{
		tablica[i] = new int[n + 2 - i];
		tablica[0][i] = i;
		tablica[i][0] = (n+1)-i;
	}

	tablica[0][0] = 0;
	
	for (int i = 0; i < n + 1; i++)
	{
		for (int j = 0; j < licznik + 1; j++)
		{
			if (i > 0 && j > 0)
			{
				tablica[i][j] = tablica[i][0] * tablica[0][j];
			}
			if(i==0 && j>1) cout << tablica[i][j]<<" |";
			else if (i == 0 && n >= 10) cout << tablica[i][j] << " |";
			else cout << tablica[i][j] << "|";
			}
		cout << endl;
		if (i > 0) {
			licznik = licznik - 1;
		}
	}
    
	cout << "\n\n\n";
	system("pause");
}

Obrazki w załączniku (1 - przykład, 2 - u mnie)

Macie pomysł?

0

Nie wiem, czy pomoże - http://stackoverflow.com/questions/275484/cout-formatting . Albo może po prostu użyć jakiegoś printf ?

0

Po co Ci #include<stdio.h>, #include<conio.h> ?
Jeżeli już koniecznie, ale koniecznie chcesz trzymać nagłówki w tablicy co jest zbędne, ale rozumiem że ten program to sztuka dla sztuki:

#include<iostream>
using namespace std;
 
int main()
{
    int n;
    cin >> n;
    
    int ** tablica = new int *[n+1];
    tablica[0] = new int[n+1];
 
    for (int i = 1; i < n + 1; i++)
        tablica[i] = new int[n + 2 - i];
 
    for (int i = 0; i < n + 1; i++)
        for (int j = 0; j < n-i+((i==0)?1:2); j++)
        {
        	if (i>0 && j>0) tablica[i][j] = tablica[i][0]*tablica[0][j];
        	else tablica[i][j]=((i==0)?j:n-i+1);
        	cout << tablica[i][j] << ((j==0)?"\t|\t":"\t") << ((j==n-i+((i==0)?0:1))?"\n":"");
        }
}

Napisane na kolanie, na pewno da się prościej.

0
#include <iostream>
#include <iomanip>
using namespace std;
 
int main()
  {
   while(true)
     {
      cout<<"Wprowadz wielkosc tabliczki mnozenia?: ";
      unsigned size;
      if(!(cin>>size)) break;
      unsigned **tb=new unsigned *[size];
      for(unsigned y=0;y<size;++y) tb[y]=new unsigned[y+1];
      for(unsigned y=0;y<size;++y) for(unsigned x=0;x<=y;++x) tb[y][x]=(x+1)*(y+1);
      cout<<endl<<setw(4)<<'|';
      for(unsigned x=0;x<size;++x) cout<<setw(3)<<(x+1);
      cout<<endl<<setfill('-')<<setw(4)<<'+'<<setfill('-')<<setw(3*size)<<'-';
      for(unsigned y=size-1;y<size;--y)
        {
         cout<<endl<<setfill(' ')<<setw(2)<<(y+1)<<setw(2)<<'|';
         for(unsigned x=0;x<=y;++x) cout<<setw(3)<<tb[y][x];
        }
      cout<<endl<<endl;
     }
  }

http://ideone.com/tx8GZx

0

@_13th_Dragon

Gdy liczby stają się 3 cyfrowe, zachodzą na siebie, program działa w nieskończoność:P

0

Wydaje mi się ze przewagarowałeś całą matematykę, weź się za naukę matematyki bo bez tego programowanie zawsze będzie dla ciebie czarną magią.

  1. To sobie oblicz maksymalną szerokość liczby jako w=(int)log10(size*size)+2 i zastąp literką w trzy trójki.
  2. Program nie działa w nieskończoność zaś do wpisania nie liczby.
0

@_13th_Dragon

To po co program działa do wpisania nie liczby, widzisz gdzieś takie założenie? Jakoś w moim kodzie wyświetla się normalnie i nie ma problemu z 3 cyfrowymi liczbami. Jeśli masz odnosić się do mnie w tak chamski sposób, to dziękuję za twoją pomoc, dam radę sam, lub z innymi bardziej kulturalnymi użytkownikami.

Pytanie do twojego kodu, który fragment, odpowiada za wyświetlenie poziomej linii z "_" ?

@Edit
Widzę już widzę, bo zaraz napiszesz, że może jestem ślepy.

cout<<endl<<setfill('-')<<setw(4)<<'+'<<setfill('-')<<setw(3*size)<<'-';

@Edit 2

Ponadto dokończyłem własny kod i działa:

#include<iomanip>
#include<iostream>
#include<conio.h>
#include<string>


using namespace std;

string StringOfChar(char znak, int n)
{
	string exit;
	for (int i = 0; i < n; i++)
	{
		exit += znak;
	}
	return exit;
}


int main()
{
	int n, licznik = 0;

	cout << "Wprowadz wielkosc tabliczki mnozenia?: ";
	cin >> n;
	cout << endl;
	licznik = n;


	int ** tablica = new int *[n+1];
	tablica[0] = new int[n+1];

	for (int i = 1; i < n + 1; i++)
	{
		tablica[i] = new int[n + 2 - i];
		tablica[0][i] = i;
		tablica[i][0] = (n+1)-i;
	}

	tablica[0][0] = 0;
	
	for (int i = 0; i < n + 1; i++)
	{
		for (int j = 0; j < licznik + 1; j++)
		{
			if (i > 0 && j > 0)
			{
				tablica[i][j] = tablica[i][0] * tablica[0][j];
			}
			if(i>=0 && j==0 && i>=n-8 || i==0 && j==0) cout << tablica[i][j]<<" |";
			else if (n>9 && i>0 && i < n - 8 && j == 0) cout << tablica[i][j] << "|";
			else cout <<setw(3)<< tablica[i][j] << " ";

			
			}
		if (i == 0)cout << endl <<StringOfChar('-',(4*n)+2)<< endl;
		else cout << endl;
		
		if (i > 0) {
			licznik = licznik - 1;
		}
	}
    
	cout << "\n\n\n";
	system("pause");
}

KLIK: http://fotowrzut.pl/L5756VLHTC

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