IMHO.WS

IMHO.WS (http://www.imho.ws/index.php)
-   Программирование (http://www.imho.ws/forumdisplay.php?f=40)
-   -   Очень нужна помощ по программированию на Си (http://www.imho.ws/showthread.php?t=127964)

Lyxor 06.01.2008 15:54

Очень нужна помощ по программированию на Си
 
№1
Двумерный массив случайных чисел.Найти среднее количество случайных чисел по столбцу и по строке.

№2
Функция получает массив случайных чисел и возвращает все полученые числа.

№3
В любом месте экрана возникает точка, превращается в круг и растет достигая максимального размера уменьшается.

Drakosha 06.01.2008 18:38

А в чем вопрос то, можно конкретней где проблема?

Voland25 07.01.2008 01:40

По поводу номера 1 - неясна задача. По вопросу получается, что задан массив неизвестного размера, и требуется найти среднюю длину строки и столбца. Я предполагаю, что размер массива известен, а задача состоит в нахождении среднего значения по столбцу и по строке. В этом случае логика проста:

#DEFINE ROWS <кол-во строк>
#DEFINE COLS <кол-во колонок>

int myArray[ROWS][COLS];
int tmpArr[COLS];
int i, j, sum;

// предполагаем что массив заполнен,
// инициируем вспомогательный
for (i = 0; i < COLS; i++)
tmpArr[i] = 0;

// Вычисляем среднее по строкам, и готовим
// массив под вычисление средних по столбцам
for (i = 0; i<ROWS; i++) {

sum = 0;

for (j = 0; j < COLS; j++) {

tmpArr[j] += myArray[i][j]; // суммирование столбца

sum += myArray[i][j]; // суммирование строки
}

printf("\nAverage for row %d is %f", i, (float) (sum/COLS));
}

// Среднее по столбцам
for (i = 0; i < COLS; i++)
printf("\nAverage for column %d is %f", i,
(float) (tmpArr[i]/ROWS));

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

По поводу второго вопроса - функция должна также получать размер массива, иначе есть все шансы грохнуться на нелегальном доступе к памяти. Кроме того, неясна формулировка "все полученные числа". В С нет множественного возврата из функции, если только она возвращает не массив. Есть вариант, когда каждый последующий вызов возвращает следующее число в массиве. Тогда что-то вот примерно такое:

int func(int *myArray, int size) {

static int position;

if (position >= size || position < 0)
position = 0;

return myArray[position++];
}

третий вопрос - цикл на использование функции circle со сначала возрастающим радиусом, а потом - так же понижающимся.

Lyxor 08.01.2008 14:06

Спасибо!!!!Voland25
:молись::молись::молись:

Voland25 09.01.2008 00:49

Да не за что... Ты б задачи ставил правильнее и точнее, ответы были бы более точными.

И мой тебе совет... я, конечно, понимаю, что будучи студентом, эти все задания как не пришей кое-к-чему рукав, но выезжая на "коллективном разуме" форума, программерами не становятся :)

Добрый Дядя 07.02.2008 16:06

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

Warchief 07.02.2008 21:00

Цитата:

Сообщение от Добрый Дядя (Сообщение 1519483)
Хотя бы идею подкиньте, а то совсем ни понимаю, с какого боку делать...

ну например так(только идея):

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

Voland25 08.02.2008 11:43

я порой просто поражаюсь, до какой степени можно недосказать условие :)
Походу очень напоминает то, что называется "польским выражением" (черт его знает, как звучит этот термин по-русски :))
Пример прост: выражение (a*b) записывается как *(ab), т.е. оператор сначала, потом в скобках - все операнды в порядке действия...

Warchief, это не совсем то, мне кажется ... то что описано в твоем посте - это алгоритм проверки правильности расстановки скобок, а, судя по всему, человеку нужны все варианты расстановки скобок в выражении, т.е. если имеем A*B/C+D-E*F, то как один из вариантов может быть A*B/(C+D)-E*F...

Добрый Дядя, прочитай, пожалуйста, внимательно мой пост прямо над твоим... Задачу более детально в студию можно?!

Да, кстати... Здесь не аукцион щедрости, а люди, которые помогают другим, причем бескорыстно.. Аукцион - это звучит немного нехорошо, тебе не кажется? :rolleyes:

Nerey_ser 13.02.2008 22:11

Warchief, Voland25, прочитайте что человеку требуется. Ему требуется не проверка расстановки скобок, не вот эта запись с пред... (я не помню название, помню было 2 похожих типа - пред... и пост..., смысл в них похож), она нужна при вычислении собственно выражения.
Нужно... а фиг его знает. Смахивает на задачи типа базовых задач на которых учатся писать программы, хотя я таку впервые вижу.
Дано число N - количество сомножителей. Вывести все возможные расстаноки скобок в выражении.
Пример
Вход:
3
Выход:
(a*b)*c
(a*b*c)
a*(b*c)
((a*b)*c)
(a*(b*c))


Часовой пояс GMT +4, время: 22:19.

Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.