Модераторы: xvr
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите найти ошибку, задача на создание процессов 
V
    Опции темы
MedvedNick
Дата 5.11.2009, 16:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 5.11.2009

Репутация: нет
Всего: нет



Задача: 
Написать функцию int max(int *beg, int len), beg - ссылка на начало массива, len - длина. Функция ищет максимальный элемент в массиве: создает два дочерних процесса, первый запускает функцию рекурсивно для первой половины массива, второй - для второй половины, и возвращает максимум из полученных от процессов значений. Если длина равна 1, то функция возвращает число, на которое указывает начало.

Код

#include <stdio.h>
#include <unistd.h>


int max(int *beg, int len)
{ int first, sec;

  if (len == 1) return *beg;

  if (fork()==0) exit(max(beg, len/2);
  if (fork()==0) exit(max(beg+len/2, len-len/2));

  wait(&first);
  wait(&sec);
  
  if (first < sec) first = sec;
  
  return first;
}

int main()
{ int Nik[10];
  int i;

  printf("Enter:\n");

/* быстрый ввод массива*/
  for (i=0; i<10; i++)
      Nik[i] = getchar() - '0';
  
  printf("%d\n", max(Nik, 10));
  return 0;
}



Это не работает, возвращает всегда ноль. Подскажите, в чем тут ошибка, пожалуйста
PM MAIL   Вверх
GrayCardinal
Дата 5.11.2009, 20:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Фигасе
****


Профиль
Группа: Завсегдатай
Сообщений: 3039
Регистрация: 9.11.2003

Репутация: 8
Всего: 58



MedvedNick, 
Там ошибок больше чем кода. Извини, за тебя переписывать не охота  smile 


--------------------
PM MAIL WWW   Вверх
MedvedNick
Дата 5.11.2009, 22:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 5.11.2009

Репутация: нет
Всего: нет



единственная ошибка была - заменить
Код

  wait(&first);
  wait(&sec);

на
Код

  wait(&first);
  first = WEXITSTATUS(first);
  wait(&sec);
  sec = WEXITSTATUS(sec);

добавив при этом в include <sys/types.h>  и <sys/wait.h>

но, хотелось бы увидеть другие ошибки))
PM MAIL   Вверх
MAKCim
Дата 5.11.2009, 22:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 84
Всего: 207



GrayCardinal
за исключением отсутствия проверок на ошибку при форке, код вполне приемлем ;)

MedvedNick
Код

...
wait(&first);
wait(&sec);

first = WEXITSTATUS(first);
sec = WEXITSTATUS(sec);
...

+ подключи sys/types.h и sys/wait.h


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
GrayCardinal
Дата 6.11.2009, 20:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Фигасе
****


Профиль
Группа: Завсегдатай
Сообщений: 3039
Регистрация: 9.11.2003

Репутация: 8
Всего: 58



Или я чего-то не догоняю, либо одно из двух.
Ну не два процесса там создается. Или мне пойти выспаться ? smile


--------------------
PM MAIL WWW   Вверх
MAKCim
Дата 6.11.2009, 22:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 84
Всего: 207



GrayCardinal
посчитай ;)


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
MedvedNick
Дата 6.11.2009, 23:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 5.11.2009

Репутация: нет
Всего: нет



в каждой функции - два процесса создается, а каждый из них запускает ту же функцию рекурсивно, итого - много процессов))
PM MAIL   Вверх
hente
Дата 7.11.2009, 09:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 116
Регистрация: 20.3.2009
Где: Томск

Репутация: нет
Всего: нет



Создание новых процессов в рекурисии smile ? матерь  божья.....
Автор а мона вопрос где это будет работать надеюсь не на АС?

Это сообщение отредактировал(а) hente - 7.11.2009, 09:13
--------------------
  долой быдло кодеров!!!
PM MAIL   Вверх
GrayCardinal
Дата 7.11.2009, 11:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Фигасе
****


Профиль
Группа: Завсегдатай
Сообщений: 3039
Регистрация: 9.11.2003

Репутация: 8
Всего: 58



hente, 
 smile 


--------------------
PM MAIL WWW   Вверх
MAKCim
Дата 7.11.2009, 11:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 84
Всего: 207



ребята, хватит флудить, задача, насколько я понял, учебная и не претендует на значимость в реальной жизни ;)


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
MedvedNick
Дата 7.11.2009, 16:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 5.11.2009

Репутация: нет
Всего: нет



MAKCim, правильно понял ;-)
собственно, тема себя уже исчерпала)
PM MAIL   Вверх
hente
Дата 7.11.2009, 19:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 116
Регистрация: 20.3.2009
Где: Томск

Репутация: нет
Всего: нет



1. решение хоть и не в полне красивое но адекватное уже приведено

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

3.Автору будет смысл еще раз задуматься над заданием потому как мне например кажется что он не до конца понял задание или заведомо пошел не по верному пути,...

PS так что я думаю эт не флуд......

Добавлено @ 19:57
ааа ссори там ввод числа.....приношу свои извинения....
хотя смысла все равно не осилил

Это сообщение отредактировал(а) hente - 7.11.2009, 19:57
--------------------
  долой быдло кодеров!!!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Программирование под Unix/Linux"
xvr
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой "Код".
  • Вопросы мобильной разработки тут
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, xvr.

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Программирование под Unix/Linux | Следующая тема »


 




[ Время генерации скрипта: 0.0513 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.