kdjee763d Ответов: 5

Как я могу решить этот вопрос? Помоги мне


Привет. Как видите, я не являюсь носителем английского языка и тоже не учусь в США.(Я знаю, что это довольно очевидно)

И мой учитель дал мне задание, которое написано на английском языке, и я изучал язык Си всего за месяц.

И все же все так запутанно для меня.

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

И вот в чем вопрос.




[2] Напишите программу, которая просит пользователя ввести числа от 1 до 16 (в любом порядке), а затем отобразить числа в порядке 4 на 4, а затем сумму строк, столбцов и диагоналей.

[Пример ввода/вывода] подчеркнутая часть вводится пользователем

Введите числа от 1 до 16 в любом порядке:
16 3 2 13 5 10 11 8 9 6 7 12 4 15 14 1
(эти шестнадцать цифр подчеркнуты частью)


16 3 2 13
5 10 11 8
9 6 7 12
4 15 14 1

Суммы строк: 34 34 34 34
Суммы столбцов: 34 34 34 34
Диагональные суммы: 34 34





Пожалуйста, решите проблему, используя самый простой и простой способ. Я только в прошлом месяце начал изучать язык Си.

На прошлой неделе мы узнали условное высказывание. (исх. если что - то еще, выключатель, Гото)
(И именно поэтому я думаю, что этот вопрос можно решить с помощью условного оператора?...)

Большое спасибо.

Что я уже пробовал:

Я ничего не знаю о c 😭...
Пожалуйста, помогите мне..

Leo Chapiro

Другими словами, вы не говорите по-английски, ничего не знаете о языке Си, и именно поэтому вы хотите, чтобы мы написали для вас программу на языке Си?

5 Ответов

Рейтинг:
2

OriginalGriff

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

Попробуйте сами, возможно, вы обнаружите, что это не так сложно, как вы думаете!
Начните с разбиения его на более простые биты:
1) ввод: вы знаете, как это сделать для одиночных чисел, я уверен, так что просто расширьте это для 16 чисел.
2) хранение: самое простое решение-это двумерный массив 4 x 4:

int data[4,4];
Заполните это своими входными данными. Все, что вам нужно, - это два вложенных цикла for, и данные поступают просто.
3) печать: данные легко - 2 вложенных цикла снова.
4) затем напишите две функции: одна для суммирования строки с заданным номером строки и массивом, а другая для суммирования столбца с заданным номером столбца и массивом. Позвоните им четыре раза и распечатайте результаты.
5) выведите две диагональные суммы.

Это не сложно: просто сделайте один бит, протестируйте его и переходите к следующему. Если вы не можете этого сделать, разбейте его на более мелкие кусочки и повторите процесс. Это действительно простая задача!

Если вы столкнетесь с конкретной проблемой, то, пожалуйста, спросите об этом, и мы сделаем все возможное, чтобы помочь. Но мы не собираемся делать все это для вас!


Richard MacCutchan

Но все суммы, как ожидается, будут равны 34, так что это немного сложнее.

OriginalGriff

Вопрос не говорит, что это требование - и я не ожидал бы новичка, который только что узнал о том, если...тогда...иначе ему дали бы такое задание. Я подозреваю, что пример был просто установлен таким образом, чтобы показать один из 880 "магических квадратов" для матрицы 4x4 от 1 до 16.
В противном случае, где находится точка бита "ввод в любом порядке"?

Richard MacCutchan

Может быть, я неправильно понял вопрос, но зачем публиковать эти цифры иначе?

OriginalGriff

Просто пример? Чтобы показать, насколько умнее (в google) учитель?

Richard MacCutchan

:смеяться:

Рейтинг:
1

Richard MacCutchan

Извините, но этот сайт не предоставляет код для заказа или написания ваших заданий для вас. Если вы не понимаете задание или язык Си, то вам нужно поговорить со своим учителем.


Рейтинг:
1

Patrice T

Цитата:
Я ничего не знаю о c 😭...

Время, чтобы найти учебник и использовать его.
Цитата:
[2] Напишите программу, которая просит пользователя ввести числа от 1 до 16 (в любом порядке), а затем отобразить числа в порядке 4 на 4, а затем сумму строк, столбцов и диагоналей.

Это требование можно решить с помощью самых элементарных операций.
Вы знаете, как прочитать 1 значение в 1 переменной, вам просто нужно прочитать 16 раз значение и сохранить их в 16 переменных.
Затем отобразите значения в виде квадрата и суммы.

Код будет длинным, но простым.
если вы используете массив и циклы, код будет короче, но сложнее.
-----
Домашние задания-это упрощенные версии тех задач, которые вам придется решать в реальной жизни. цель это обучение и практикующий.
Мы не делаем вашу домашнюю работу.
Домашнее задание не предназначено для проверки ваших навыков просить других людей сделать вашу работу, оно предназначено для того, чтобы заставить вас думать и помочь вашему учителю проверить ваше понимание курсов, которые вы прошли, а также проблем, которые вы испытываете при их применении.
Любая ваша неудача поможет учителю выявить ваши слабости и наметить меры по исправлению положения.
Любая ваша неудача поможет вам узнать, что работает, а что нет, это называется "методом проб и ошибок".
Так что попробуйте, перечитайте свои уроки и приступайте к работе. Если вы застряли на конкретной проблеме, покажите свой код и объясните эту точную проблему, мы можем помочь.


Рейтинг:
0

KarstenK

Похоже, CPalline выполнил часть ваших домашних заданий, но вам нужно выучить язык в некоторых из них. C-учебник и установите Visual Studio.

Проще всего было бы заполнить массив входными данными и сделать математику, чем. Будьте осторожны: массивы начинаются с индекса 0.

int iArray[4][4];
int number = iArray[2][3];//second row and third column
//tip use functions for your calculations like
int calcRowSum( int *arr, int row)
{
 int sum = 0;
 for(int i = 0; i < 4;i ++ ) {
  sum = sum + arr[row][i];
 }
return sum;
} 


CPallini

calcRowSum, как вы его написали, не может работать, потому что функция ничего не знает о переданном массиве.
Кстати, у меня есть 5.

Рейтинг:
0

CPallini

Я считаю, что вам нужно больше циклов и массивов, чем условных операторов. Попробуй

#include <stdio.h>

#define ROWS  4
#define COLS  4

void sum_of_rows(int in_array[][COLS], int out_array[]);
void sum_of_cols(int in_array[][COLS], int out_array[]);
void sum_of_diags(int in_array[][COLS], int out_array[]);

int main()
{
  int used[ROWS*COLS] = {0};

  int a[ROWS][COLS];

  int row, col;

  // gather the user input  
  for (row = 0; row <ROWS; ++row)
  {
    for (col = 0; col<COLS; ++col)
    {
      while (1)
      {
        int i;
        printf("please enter one of the requested numbers\n");
        if ( scanf("%d", &i) == 1 && i>=1 && i<=16 && used[i-1] == 0)
        {
          a[row][col] = i;
          used[i-1] = 1; // mark as already used
          break; // exit from the while loop
        }
        printf("invalid entry\n");
      }
    }
  }

  // output the gathered numbers
  for (row = 0; row <ROWS; ++row)
  {
    for (col = 0; col<COLS; ++col)
    {
      printf("%d\t", a[row][col]);
    }
    printf("\n");
  }

  // compute the various quantities
  int row_sum[COLS];
  int col_sum[ROWS];
  int diag_sum[2];

  // sum of rows:
  sum_of_rows(a, row_sum);
  for (row = 0; row<ROWS; ++row)
    printf("%d\t", row_sum[row]);
  printf("\n");

  // sum of columns: 
  // ... left as an exercise ...

  // sum of diagonales: 
  // ... left as an exercise ...

  return 0;
}

void sum_of_rows(int in_array[][COLS], int out_array[])
{
  int r,c;

  for (r = 0; r<ROWS; ++r)
  {
    out_array[r] = 0;
    for (c=0; c<COLS; ++c)
      out_array[r] += in_array[r][c];
  }
}

void sum_of_cols(int in_array[][COLS], int out_array[])
{
  // implementation left as an exercise ...
}

void sum_of_diags(int in_array[][COLS], int out_array[])
{
  // implementation left as an exercise ...
}