Консультация № 137164
17.05.2008, 00:38
0.00 руб.
0 2 2
Здравствуйте! Задаю это вопрос только Вам.
Мне понравилось как Вы коментируете программу и мне как начинающему
было почти все понятно. Сделайте пожалуйста описание этого кода,
тоже написаного Вами. Также если Вам несложно, обьясните зачем
в Вашей программе (ответ на вопрос № 136842) используеться
заголов. файл <time.h>. И еще один вопросик, может не в тему,
просто интересно: Вы с первых курсов набыли опыта
в программировании, реально быстро составлять алгоритм в голове,
а потом уже клавишами, или же все это приходит со временем???.
Напишыте пожалуйста, если Вам несложно.

Огромное Вам спасибо!


Приложение:
#include <time.h>#include <cstdlib>#include <iostream>#include <iomanip>using namespace std;void cycle_shift(int *a, int size, int k) { int *b = new int[size]; for(int i=0; i<size; i++) { int index = i + k; if(index >= size) index -= size; b[index] = a[i]; } for(int i=0; i<size; i++) a[i] = b[i]; delete[] b;}int main(int argc, char* argv[]) { int size = 5; int **matrix = new int*[size]; srand((unsigned) time(NULL)); cout << "Initial matrix:" << endl; for(int i=0; i<size; i++) { matrix[i] = new int[size]; for(int j=0; j<size; j++) { matrix[i][j] = rand()%100; cout << setw(3) << matrix[i][j]; } cout << endl; } int k; cout << endl << "Input k:" << endl; cin >> k; for(int i=0; i<size; i+=2) cycle_shift(matrix[i], size, k); cout << endl << "Modified matrix:" << endl; for(int i=0; i<size; i++) { for(int j=0; j<size; j++) cout << setw(3) << matrix[i][j]; cout << endl; } for(int i=0; i<size; i++) delete[] matrix[i]; delete[] matrix; return 0;}

Обсуждение

Неизвестный
19.05.2008, 06:37
общий
это ответ
Здравствуйте, Sashka!

Эээ... программку эту не я писал, сщас просто не совсем когда её смотреть, извините.

time.h - используется для инициализации случайных чисел, следующим образом:

srand((unsigned) time(NULL)); - time(NULL) - возвращает число секунд с 1970 года, то есть фактически каждый раз новое число. srand таким образом всегда инициализируется по разному и случайные числа, генерируемые rand - будут действительно случайными(хотя это и не совсем так)

Про алгоритм в голове - даже не знаю. Но в голове полезно продумывать. Бывает так, что уйдёшь из-за компа и сразу в голове находишь решение, которое не находится пока за компом сидишь. Опыт приходит с практикой.
Чем больше пишешь - тем дальше проще.
Чем дольше продумываешь - тем пишешь проще и меньше потом переделывать.
(Хорошо для себя ещё собирать полезные отлаженные куски кода, которые потом вторчино использовать в новых программах, собирать из них библиотечки)
Вобщем, как можно больше практики - и всё будет!
Неизвестный
19.05.2008, 06:56
общий
это ответ
Здравствуйте, Sashka!
Комментированный текст программы смотрите в приложении. Про time() вам уже объяснял предыдущий эксперт. Насчет вопроса не в тему: все алгоритмы естественно, сначала обдумываются в голове. Затем обдумывается подход к задаче, в какой форме лучше будет осуществить ее решение (ООП например), а после этого уже непосредственное кодирование. Опыт конечно же накапливается постепенно, нужно лишь хорошо знать теорию как языка так и структур и алгоритмов данных, а практика наработается.

Приложение:
#include <time.h>#include <cstdlib>#include <iostream>#include <iomanip>using namespace std;//Функция циклического сдвига массива a размером size на k-элементов вправоvoid cycle_shift(int *a, int size, int k) { //Создаем новый массив размером size int *b = new int[size]; //В цикле переписываем в новый массив передвинутые элементы из массива a for(int i=0; i<size; i++) { //Вычисление индекса смещенного элемента int index = i + k; //Если вышли за границы if(index >= size) //то смещаем его с начала массива index -= size; //Копируем элемент b[index] = a[i]; } //Обратное копирование массива for(int i=0; i<size; i++) a[i] = b[i]; //Удаляем временный массив delete[] b;}int main(int argc, char* argv[]) { //Размер матрицы int size = 5; //Выделяем память под матрицу int **matrix = new int*[size]; //Инициализируем генератор случайных чисел srand((unsigned) time(NULL)); cout << "Initial matrix:" << endl; //Формируем матрицу и одновременно выводим ее на экран for(int i=0; i<size; i++) { //Выделяем память под текущую строку матрицы matrix[i] = new int[size]; //Инициализация и вывод элементов текущей строки for(int j=0; j<size; j++) { //Выбираем случайное число из даипазона 0..99 matrix[i][j] = rand()%100; //Выводим его на экран cout << setw(3) << matrix[i][j]; } //Преход к следующей строке cout << endl; } //Ввод количества смещаемых позиций int k; cout << endl << "Input k:" << endl; cin >> k; //В цикле сдвигаем четны столбцы матрицы на k-элементов вправо for(int i=0; i<size; i+=2) cycle_shift(matrix[i], size, k); //Выводим модифицированную матрицу cout << endl << "Modified matrix:" << endl; for(int i=0; i<size; i++) { for(int j=0; j<size; j++) cout << setw(3) << matrix[i][j]; cout << endl; } //Удаление строк матрицы for(int i=0; i<size; i++) delete[] matrix[i]; //Удаление матрицы delete[] matrix; return 0;}
Форма ответа