Witam!
jestem w 3 klasie technikum i biore kurs na c++ w którym to ostatnio na zajęciach praktycznych robiona była modularna tabliczka mnożenia.
Założeniem było stworzyć tabliczkę numerowaną od 0 do maxx i od 0 do maxy tak aby uzupełnić tablice td[i][j]=i*j.
Mówiąc szczerze w pewnym momencie zgubiłem się i przestałem rozumieć kod i postanowiłem odtworzyć program w domu ale samodzielnie potrafię jedynie dojść do brania tabelki w obramówkę z "*" sam porównywałem kilka razy moją samodzielną prace i tę z pomocą ale nie mogę się doszukać błędów i powodu z którego mój autorski kod wykonuje się inaczej. Na razie chodzi mi o moment w którym gwiazdki są na górze i dole a nie po bokach.
z góry dziękuje za pomoc i pozdrawiam
kod z kursu:
#include <iostream>
using namespace std;
void gwiazdki(bool gora);
void wypiszwartosc(int w);
void wypelnij();
void wypisz();
int liczbacyfr(int w);
const int maxi=20;
const int maxj=20;
int maxcyfr= liczbacyfr((maxi-1 )*( maxj-1))+1;
int tab[maxi][maxj];
int main(int argc, char** argv) {
wypelnij();
gwiazdki(true);
wypisz();
gwiazdki(false);
return 0;
}
void wypelnij(){
for(int i=0;i<maxi;i++){
for(int j=0;j<maxi;j++){
tab[i][j]=i*j;
/*
tab[i][0]=i;
tab[0][j]=j;
*/
if (j==0){
// j=i;
tab[i][j]=i;
}
else if (i==0){
// i=j;
tab[i][j]=j;
}
}
}
}
void wypisz(){
for(int i=0;i<maxi;i++){
cout<<"X ";
for(int j=0;j<maxi;j++){
wypiszwartosc(tab[i][j]);
}
cout<<" X"<<endl;
}
}
void wypiszwartosc(int w){
int cyfry=liczbacyfr(w);
cout<<w;
for(int l=0; l<maxcyfr-cyfry; l++ ){
cout<<" ";
}
}
int liczbacyfr(int w){
int k=1;
while( w>=10){
k++;
w=w/10;
}
return k;
}
void gwiazdki(bool gora){
cout<<"X ";
for(int j=0; j<maxj; j++){
int cyfry=1;
if (gora== true) {
cyfry=liczbacyfr(tab[0][j]);
} else {
cyfry=liczbacyfr(tab[maxi-1][j]);
}
for(int l=0; l<cyfry ; l++ ){
cout<<"*";
}
for(int l=0; l<maxcyfr-cyfry ; l++ ){
cout<<" ";
}
}
cout<<" X"<<endl;
}
moja próba w której doszedłem do robienia gwiazdek na górze i dole:
#include <iostream>
using namespace std;
void wypelnij();
void wypisz();
void ramka( );
int lcyfr( int l);
void wypiszw(int w);
const int maxx=10;
const int maxy=10;
int maxcyfr =lcyfr ((maxx-1)*(maxy-1))+1;
int td[maxx][maxy];
int main() {
wypelnij();
ramka();
wypisz();
ramka();
return 0;
}
void wypelnij() {
for (int i = 0; i < maxx; i++) {
for (int j = 0; j < maxy; j++) {
td[i][j] = i * j;
if (j==0){
td[i][j]=i;
}
else if (i==0){
td[i][j]=j;
}
}
}
}
void wypisz() {
for (int i = 0; i < maxx; i++) {
for (int j = 0; j < maxy; j++) {
wypiszw(td[i][j]) ;
}
cout << endl;
}
}
int lcyfr( int l ){
int k=0;
while( l>=10 ){
l=l/10;
k++;
}
return k;
}
void wypiszw(int w){
int cyfry=lcyfr(w);
cout<<w;
for (int l = 0; l < maxcyfr - cyfry; l++){
cout<<" ";
}
}
void ramka(){
for(int j=0; j<maxy; j++){
int cyfry=1;
for(int l=0; l<cyfry ; l++ ){
cout<<"*";
}
}
cout<<endl;
}
na koniec dodam że widze błąd i dla maxx i maxy =10 musiałby się pokazywać 3 gwiazdki zamiast 1 ale nie wiem jak to zapisać żeby było równie dobrze dla maxx i maxy=100 lub dowolną liczbę.