Предположим, у меня есть цикл:
for(int i=1; i<=1024; i++)
Я хочу заполнить файл 128 столбцами (не строками!), Поэтому первый столбец содержит числа от 1 до 8, второй от 9 до 16 и т. Д. И т. Д.
Пожалуйста помоги
Пункты для каждого столбца всего от 8i до 8i + 7. Вы можете написать несколько петель.for(int i = 0; i< 128;i++)
for(int j = 0; j <8;j++)
int k = 8* i+ j;
void write_in_file( ofstream &fout, int start){
for(int i = 1; i <= 128; i++){
fout<<start <<"\t";
start+=8;
}
fout<<"\n";
}
int main(){
ofstream fout;
fout.open("out.txt");
for(int i=1;i<=8;i++){
write_in_file(fout,i);
}
}
Объяснение:
Нам нужно 8 строк, поэтому мы вызываем функцию write_in_file 8 раз. Каждый раз функция write_in_file записывает в файл 128 записей.
Самый простой способ — создать два цикла — первый по строкам и вложенный по столбцам, а затем вычислить числа с помощью простого математического выражения.
Например.:
for(int line = 0; line < 8; line++)
{
for( int col = 0; col < 128; col++)
{
cout << setw(5) << line + col * 8 + 1;
}
cout << endl;
}
setw()
имеет параметр 5, чтобы сделать одинаковую ширину для столбцов с номерами от 1 до 1024
Редакция:
Если вы хотите использовать только один for
Цикл и точное, как вы даете в вопросе, вы можете использовать более сложные математические выражения.
Для начала посчитаем номер строки как (i-1) / 128
(числа начинаются с 0) и номер столбца как (i-1) % 128
(цифры от 0 до 127). И теперь вы можете сделать следующий цикл с дополнительным условным выводом новой строки:
for(int i=1; i<=1024; i++)
{
cout << setw(5) << ( 1 + 8 * ((i-1) % 128) ) + ( (i-1) / 128 );
if( i % 128 == 0 ) // new line once per 128 numbers
cout << endl;
}
Конечно, если вы хотите создать файл, вы должны сделать что-то с выводом — перенаправить стандартный вывод в файл или изменить cout
в другой поток.