Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.07.2009, 14:55   #1
Golovastik
Заблокирован
 
Регистрация: 25.05.2009
Сообщений: 284
Плохо Таблица умножения

Код:

#include <iostream>
#include <iomanip>
using namespace std;

int main()
{
setlocale(0,"");
const int size = 12;
int i = 0, j = 0;

for(i = 1; i <=size; i++) //В столбик 12 чисел
{
	cout<<endl
	<<setw(7)<<i<<"   |";
	for(j = 1; j<=size; j++)      
	cout<<setw(3) <<i*j<<" ";     
}

cin.ignore();
cin.get();
return 0;
}
Скажите пожалуйста!Как программа понимает, что нужно именно выводить в столбик 12 строк и 12 столбцов этими 2 строчками кода,что инетересно одним циклом фор(вложенным).
Если кому не сложно, опишите пожалуйста логику. Это очень важно. Зараннее благодарю.
Код:
for(j = 1; j<=size; j++)      
	cout<<setw(3) <<i*j<<" ";
Golovastik вне форума Ответить с цитированием
Старый 25.07.2009, 14:59   #2
ISergeyN
Maniac
Форумчанин
 
Аватар для ISergeyN
 
Регистрация: 03.01.2009
Сообщений: 450
По умолчанию

Цитата:
Скажите пожалуйста!Как программа понимает, что нужно именно выводить в столбик 12 строк и 12 столбцов
вот так
Код:
const int size = 12;
Поменяйте 12 на 10 и увидете другой результат.
setw
Стандартные библиотеки разработаны с учетом многолетнего опыта лучших программистов и они не больны "детскими болезнями крутизны в программизме"....
ISergeyN вне форума Ответить с цитированием
Старый 25.07.2009, 15:01   #3
Golovastik
Заблокирован
 
Регистрация: 25.05.2009
Сообщений: 284
По умолчанию

Это ясно const int size = 12;
Почему выводит не только в одну строчку числа, а выводит и в строчку и в столбик? Это не могу понять. Вот этим куском кода:
Код:
for(j = 1; j<=size; j++)      
	cout<<setw(3) <<i*j<<" ";
Golovastik вне форума Ответить с цитированием
Старый 25.07.2009, 15:04   #4
ISergeyN
Maniac
Форумчанин
 
Аватар для ISergeyN
 
Регистрация: 03.01.2009
Сообщений: 450
По умолчанию

Потому что у вас там два цикла.
Код:
for(i = 1; i <=size; i++) //В столбик 12 чисел
{
	cout<<endl //переход на новую строку
	<<setw(7)<<i<<"   |";
	for(j = 1; j<=size; j++) // В строчку 12 чисел!!     
	cout<<setw(3) <<i*j<<" ";     
}
Стандартные библиотеки разработаны с учетом многолетнего опыта лучших программистов и они не больны "детскими болезнями крутизны в программизме"....

Последний раз редактировалось MaTBeu; 26.07.2009 в 16:32.
ISergeyN вне форума Ответить с цитированием
Старый 25.07.2009, 15:07   #5
Golovastik
Заблокирован
 
Регистрация: 25.05.2009
Сообщений: 284
По умолчанию

В столбик, потому-что стоит <<endl ???
Код:
for(i = 1; i <=size; i++) //В столбик 12 чисел
{
cout<<endl //переход на новую строку
}
А в строку потому-что его нету???
Golovastik вне форума Ответить с цитированием
Старый 25.07.2009, 15:08   #6
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

В первую итерацию выводится верхняя строка.
Код:
cout << endl << setw(7) << i << " |"; // Вывели "    1  |"

for(j=1; j<=size; j++)
  cout << setw(3) << i*j << " "; // Выводим остальную часть верхней строки, в первой итерации i=1, 
                                                     // j меняется от 1 до 12. Вывели 1 2 3 ...
Так же и остальные строки, за счёт увеличения множителя i( << i*j <<) получаем таблицу умножения...
Если непонятно объяснил - спрашивайте
netrino вне форума Ответить с цитированием
Старый 25.07.2009, 15:20   #7
Golovastik
Заблокирован
 
Регистрация: 25.05.2009
Сообщений: 284
По умолчанию

Ответьте пожалуйста на предпоследний пост 5.
Golovastik вне форума Ответить с цитированием
Старый 25.07.2009, 15:24   #8
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Цитата:
Сообщение от Golovastik Посмотреть сообщение
В столбик, потому-что стоит <<endl ???
Код:
for(i = 1; i <=size; i++) //В столбик 12 чисел
{
cout<<endl //переход на новую строку
}
А в строку потому-что его нету???
Ну, почти, по сути сначала выводится endl(переход на новую строку), затем за раз выводится вся строка " 1 | 1 2 3 ... "
потом снова endl и вторая строка " 2 | 2 4 6 ... "
и так далее.
netrino вне форума Ответить с цитированием
Старый 25.07.2009, 15:58   #9
Golovastik
Заблокирован
 
Регистрация: 25.05.2009
Сообщений: 284
По умолчанию

Спасибо, наконец-то врубился. Прошу прощения, вы не скажете, обязательно ли чтоб сделать таблицу умножения, нужно использовать вложенные циклы фор?

Последний раз редактировалось Golovastik; 25.07.2009 в 16:06.
Golovastik вне форума Ответить с цитированием
Старый 25.07.2009, 16:19   #10
pproger
C++ hater
Старожил
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

2Golovastik можно и одним циклом, а в теле проверять текущее значение счетчика, и при необходимости переводить каретку. как закодишь, так и будет.
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance
pproger вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
составить программу умножения двух квадратных матриц gnom 62 Помощь студентам 15 06.05.2012 14:52
Написать функцию умножения двух матриц X(N,M) и Y(M,K) Doublefaced Помощь студентам 1 02.07.2009 09:04
таблица умножения в файле kate158 Общие вопросы Delphi 4 18.12.2008 12:51
вывод таблицы умножения Soule Паскаль, Turbo Pascal, PascalABC.NET 3 12.10.2007 11:26