Программирование на C: сумма третьей верхней антидиагональной матрицы в квадрате, нужна помощь, пожалуйста - PullRequest
0 голосов
/ 06 апреля 2011

Я прохожу короткий курс по программированию на c, и в последнее время я был так занят другими своими уроками и помогал своему собеседнику подготовиться к его свадьбе (так как я его лучший мужчина), что я отстал и мне нужна помощь. любая помощь в этом коротком задании будет высоко ценится, так как я совсем не знаком с матрицами и с их погашением через несколько дней.

присваивается сумма третьей верхней антидиагональной матрицы в квадрате.

мне дали эту информацию:

Матрица должна быть квадратной, целочисленной матрицей размера N. В этом назначении матрица будет сохранена в 1-м блоке памяти. Вам придется конвертировать между концептуальной адресацией 2d матрицы и Адресация 1-го блока с арифметикой указателя.

Примечание к случайным числам: rand() функция возвращает следующее целое число последовательность псевдослучайных чисел в диапазоне [0, RAND_MAX]. RAND_MAX - это очень большое число, которое варьируется от системы к системе. Чтобы получить целое число в диапазоне [мин., макс.]:

(int)((min)+rand()/(RAND_MAX+1.0) * ((max)-(min)+1))

srand(SEED) используется для установки семени для ранда. Если srand() вызывается с тем же начальным значением, последовательность псевдослучайных чисел повторяется. Чтобы получить разные случайные числа каждый раз программа запускает time(NULL) в качестве начального числа. Рэнд в stdlib.h, который должен быть включен.

Программа должна быть структурирована следующим образом.

#define N 32 // Matrix size

#define MYSEED 1234 // Last 4 digits of your student number.

int *initialise( )        // Allocate memory for the matrix using malloc
                           // Initialise the matrix with random integers x, 1≤ x ≤ 9
                           // Use 'MYSEED' as the seed in the random generator.
                           // Return a pointer to the matrix

void print_matrix(int *)      // Print matrix on screen

int compute_diagonal(int *)   // Compute your required calculation using pointer arithmetic.
                              // (square bracket [ ] array indexes shouldn't be used)
                              // Return the solution.

void finalise(int *)          //free the allocated memory.

int main()                    // The main function should print the solution to screen.

Ответы [ 2 ]

0 голосов
/ 06 апреля 2011

Хорошо, так как это домашнее задание, и у вас еще есть несколько дней, я не дам вам точного ответа здесь.Но я поделюсь с вами некоторыми соображениями, с которыми довольно легко прийти к вашему ответу.

  1. Индексирование матрицы 1D-способ: вам не разрешено использовать matrix[x][y] здесь, но толькоодномерный массив.Так что просто найдите минутку и подумайте, как индекс (x, y) может быть вычислен в одномерном массиве.Имейте в виду, что C хранит элементы в ряд (то есть элементы matrix[0][0], matrix[0][1], matrix[0][2] относятся к matrix[0], matrix[1], matrix[2]).Это просто форум с точки зрения X, Y и N
  2. Заполнение матрицы случайным образом легко, функция для создания случайного int уже задана, просто пройдитесь по матрице и заполните каждый элемент
  3. Добавление третьей анти-верхней диагонали.Это на самом деле не вопрос программирования.Просто нарисуйте небольшую матрицу на листе бумаги и посмотрите, какие элементы вы должны добавить.Посмотрите на их индексы, а затем объедините свои недавно полученные знания с результатами, полученными в моем пункте 1, и вы узнаете, что сложитьпомните, что matrix[5] совпадает с *(matrix+5).Я думаю, что это справедливо сказать вам;)
0 голосов
/ 06 апреля 2011

Не выполняя домашнее задание, вот совет:

Создайте функции, которые абстрагируют хранение и извлечение значений из матрицы. Одна из подписей должна выглядеть примерно так:

int retrieve(int* matrix, int row, int col);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...