Мне нужна помощь с назначением, которое должно состояться через несколько дней. Я попросил сделать следующее:Необходимо переместить обновленные значения в motion.c и изменить направление
motion.c:
Эта внешняя функция принимает вид: ИНТ движения (интермедиат NodeID, внутр строка, столбец INT, INT направление) Начиная с строки и столбца поля, указанного в аргументах функции, эта процедура помещает nodeid в это поле. Затем, основываясь на целочисленном направлении (0-3), движение перемещает одно пятно в соответствующем направлении , приращает nodeid и откладывает обновленный узел в следующей позиции в этом направлении. Движение продолжает помещать целые числа в поле до тех пор, пока оно не поместит целое число на краю поля.
main.c:
* Ваше задание написать программу C, что сначала считывает в одной строке ввода, которая содержит целое число образцов. main затем читает в образцах строки тестовых данных. Каждый образец линия тестовых данных содержит четыре целых числа , соответствующее: NodeID направления столбца строки Для каждого образца тестовых данных вашей программы выполняет следующие действия:
1) Очистить поле (т.е. заполнить массив поля с нулями) ,
2) Вызовите движение с использованием тестовых данных образца в качестве аргументов.
3) Вызов print_field распечатать результирующего поля на стандартный вывод *
Вот код motion.c я сделал до сих пор:.
#include <stdio.h>
#include "motion.h"
int motion (int nodeid, int row, int column, int direction) {
nodeid = field [row][column];
while (((row < LENGTH)&&(row >= 0))||((column < WIDTH)&&(column >= 0)))
{
if (direction == 0)
{
nodeid++;
nodeid = field [row][(unsigned int)column + 1];
column++;
}
else if (direction == 1)
{
nodeid++;
nodeid = field [row][(unsigned int)column - 1];
column--;
}
else if (direction == 2)
{
nodeid++;
nodeid = field [(unsigned int)row - 1][column];
row--;
}
else if (direction == 3)
{
nodeid++;
nodeid = field [(unsigned int)row + 1][column];
row++;
}
}
return 0;
}
И это для main.c:
#include <stdio.h>
#include "motion.h"
int main() {
int samples;
int i;
int j;
int k;
printf ("How many samples do you want?\n");
scanf ("%d", &samples);
for (i = 0; i < samples; i++)
{
printf ("Indicate nodeid, row, column and direction\n");
scanf ("%d %d %d %d", &nodeid, &row, &column, &direction);
for(j = 0; j < LENGTH; j++)
{
for(k = 0; k < WIDTH; k++)
{
field[j][k] = 0;
}
}
motion (nodeid, row, column, direction);
printf ("\n%d", print_field(field, row, column));
}
return 0;
И это мой файл заголовка:
#define WIDTH 12
#define SAMPLES 8
enum direction {Right, Left, Up, Down};
int field [LENGTH][WIDTH];
int column;
int row;
int nodeid;
int direction;
int motion (int nodeid, int row, int column, int direction);
int print_field (int field[][ WIDTH ], int row, int column);
В motion.c, меня попросили переместить параметр nodeid в моем массиве, вправо, влево, вверх или вниз. Каждый раз, когда я перемещаю свой nodeid, я увеличиваю свой nodeid и в зависимости от моего направления, я увеличиваю или уменьшаю свою строку или столбец. Проблема в том, что я не знаю, как переключать направления, когда я делаю один шаг: я имею в виду, что, хотя я назначаю направление в функции движения из main.c, я понятия не имею, как изменить его на следующем (например, вы выбираете переход на юг, а затем до тех пор, пока выполняются условия цикла цикла в motion.c, вы можете выбрать другое направление. Как?), и даже если я добавил целое число без знака в мою строку и столбец, чтобы избежать ниже 0, я все еще получаю нарушения сегментации. Вот пример того, что я имею в виду:
How many samples do you want?
1
Indicate nodeid, row, column and direction
1 2 1 2
Program received signal SIGSEGV, Segmentation fault.
0x0000000000400746 in motion (nodeid=1, row=0, column=1, direction=2)
at motion.c:21
21 nodeid = field [(unsigned int)row - 1][column];
Я в тяжелой потерей, но я хочу, чтобы завершить это задание достаточно (т.е. получить советы и подсказки, а не полноценные ответы). Сообщите мне как можно скорее, где проблема, поэтому я могу это исправить!
Во-первых, вы должны отпечатать свой код, чтобы его можно было прочитать. Тогда вы уверены, что 'field' является допустимым массивом и' (unsigned int) row - 1' приводит к действительному индексу? –
Вы все еще можете помочь мне? – Michformer
@ H2CO3- спасибо. Мне надоело вводить текст –