• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Tabliczka mnożenia c++

VPS Starter Arubacloud
0 głosów
1,549 wizyt
pytanie zadane 28 marca 2019 w C i C++ przez sznycel Nowicjusz (220 p.)

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ę.

komentarz 29 marca 2019 przez RafalS VIP (122,820 p.)

Jako ciekawostka. Jeśli dobrze się postarać to w pythonie da się to napisać w jednej linijce :D

print('\n'.join([''.join([f'{i*j:<{len(str(10 * 10)) + 1}}' for i in range(1, 11)]) for j in range(1, 11)]))

 

1 odpowiedź

0 głosów
odpowiedź 4 kwietnia 2019 przez DeBos123 Nałogowiec (44,950 p.)
Napisz jakiego dokładnie wyniku oczukujesz.

Podaj przykład.

Podobne pytania

0 głosów
1 odpowiedź 1,469 wizyt
0 głosów
1 odpowiedź 678 wizyt
pytanie zadane 12 listopada 2020 w C i C++ przez Fuszion74 Początkujący (310 p.)
0 głosów
2 odpowiedzi 404 wizyt
pytanie zadane 10 stycznia 2018 w C i C++ przez Sansi Użytkownik (720 p.)

92,451 zapytań

141,261 odpowiedzi

319,073 komentarzy

61,853 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...