Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.12.2012, 19:01   #11
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Цитата:
Ага, напугали девочку до заикания, и рады..
Ага-ага. Кондуктор напугал "зайца" - на кол кондуктора !
Наверно ТС ожидала увидеть готовое решение, а наткнулась на бота
Цитата:
Наташ, не обращай внимания, сами они все боты, я их знаю ))
Ага-ага. Я, вот, и бот и искусственный интеллект по совместительству
Цитата:
Это вообще что - учебная задача или какая-то олимпиада?
Что-то подсказывает что учебная..
Poma][a вне форума Ответить с цитированием
Старый 14.12.2012, 20:46   #12
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

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

Тоесть 1 год b=100000, g=100000 д;
t = Random (n);
2 год
t1 = Random (t);
b = b+t1;
g = g+t-t1;
Тоесть пример так? (Конечно убить чуть-чуть людей, запомнить скок ребенков у родителя )
Poma][a вне форума Ответить с цитированием
Старый 15.12.2012, 19:28   #13
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Ладно-с.. Понравилась мне задачка и на биологии я попытался её решить
Код:
const
        SIZE = 1000;
var
        a : array [1..SIZE] of record
                age : Integer; // возраст
                sex : Boolean; // пол
                kids : Integer // кол-во детей
        end;
        child, par, men, female, male, i, n, owndth, dead, count : Integer;

begin
        Randomize;
        Write ('Всего людей (м = д)'); ReadLn (men);

        for i := 1 to men div 2 do begin
                a[i].age := 20;
                a[i].sex := TRUE; // прекрасный пол
                a[i].kids := 0;
        end;

        for i := men div 2+1 to men do begin
                a[i].age := 20;
                a[i].sex := FALSE; // сильный пол
                a[i].kids := 0
        end;

        for i := men+1 to SIZE do
                a[i].age := -1;

        n := 1; // 1 год пошел

        for i := 1 to 13 do
                WriteLn (a[i].age);

        while men <> 0 do begin
                WriteLn ('Наконец ', n, '-го года : ');
                owndth := 0;
                for i := 1 to SIZE do
                        if a[i].age > 100 then begin
                                a[i].age := -1;
                                Inc (owndth)
                        end
                        else
                                if a[i].age <> -1 then
                                        Inc (a[i].age);

                men := 0;
                for i := 1 to SIZE do
                        if a[i].age <> -1 then
                                Inc(men);

                dead := Random (men div 4);
                men := men-owndth-dead;

                WriteLn ('Умерло совей смертью ', owndth);
                WriteLn ('Умерло не совей смертью ', dead);
                WriteLn ('Всего умерло', owndth+dead);
                WriteLn ('Живых людей ', men);

                male := 0;
                female := 0;
                for i := 1 to SIZE do
                        if (a[i].age >= 20) and (a[i].kids < 3) then
                                if a[i].sex then
                                        Inc (female)
                                else
                                        Inc (male);

                WriteLn ('Девушек, способных родить детей ', female);
                WriteLn ('Юношей, способных зачать детейб ', male);

                child := Random (men div 4);
                while (child > male) or (child > female) do
                        child := Random (men div 4);;

                WriteLn ('Детей зачато ', child);


                i := 1;
                count := 0;
                while (i <= SIZE) and (child >= count)do begin
                        if a[i].age = -1 then begin
                                a[i].age := 0;
                                a[i].sex := Boolean (Random (2));
                                a[i].kids := 0;
                                Inc (count)
                        end;
                        Inc (i)
                end;
                ReadLn
        end
end.
Вот что вышло.. Есть проблемы с male и female.. Почему - а кто ж его знает..
Есть недочет, нам не зачем везде котыряться до SIZE, но когда я начал обходить SIZE грянул звонок.. А сейчас занят.. Завтречком, на свежею головушку может быть доделаю..

Последний раз редактировалось Poma][a; 15.12.2012 в 22:21.
Poma][a вне форума Ответить с цитированием
Старый 17.12.2012, 06:40   #14
sinnersinn
 
Регистрация: 07.12.2012
Сообщений: 8
По умолчанию

Записал все это в паскаль пишу что вышло
Первый прогон (про значении в 1000 стартовое)
1. На 10000 стартовой цифры E3200 селерон задумался прилично.

2. все умирают не своей смертью! Это как их убивают?
3. странно в первый же год из 1000 умерло 138
4. 500 пар зачали всего 21 ребенка

Второй прогон
1. опять же данные на 1-ый год (так выводит паскаль)
2. опять люди умерли не своей смертью
3. кол-во пар для зачатия 500 (значит не кто не умер)

Хз какой прогон
1. пар для зачатия все равно 500

Хз какой +1
1. 1000 умерла своей смертью
2. живых стало -1000
3. -902 ребенка зачато

Хз какой +1 +1
Все вышло на 0

Последний раз редактировалось sinnersinn; 17.12.2012 в 06:57.
sinnersinn вне форума Ответить с цитированием
Старый 17.12.2012, 06:55   #15
sinnersinn
 
Регистрация: 07.12.2012
Сообщений: 8
По умолчанию

Дописал одну строчку и года пошли считаться
Код:
 while men <> 0 do begin
                n := n+1;
                WriteLn ('Наконец ', n, '-го года : ');
                owndth := 0;
                for i := 1 to SIZE do
На 82 году все умирают
на 83 году планета чистая

Подправил size=10000
и начал с 5000

Данные на 82 году жизни
1. 5000 умерли своей смертью
2. 703 не своей умерло
3. живых -703
4. девушек 2460, парней 2540 (хотя все прошлые года было по 5040)
5. детей зачато -6737

На 83 год
1. 777 умерли не своей
2. 4223 живых

На 820-ый год
1. всего умерло 884
2. живых 7939
3. девушек/парней 1784/1765
4. зачато 24

Дожили уже до 8014-года

Последний раз редактировалось sinnersinn; 17.12.2012 в 07:14.
sinnersinn вне форума Ответить с цитированием
Старый 17.12.2012, 07:18   #16
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Код:
const
        SIZE = 1000;
var
        a : array [1..SIZE] of record
                age : Integer; // возраст
                sex : Boolean; // пол
                kids : Integer // кол-во детей
        end;
        child, par, men, female, male, i, n, owndth, dead, count : Integer;

begin
        Randomize;
        Write ('Всего людей (м = д)'); ReadLn (men);

        for i := 1 to men div 2 do begin
                a[i].age := 20;
                a[i].sex := TRUE; // прекрасный пол
                a[i].kids := 0;
        end;

        for i := men div 2+1 to men do begin
                a[i].age := 20;
                a[i].sex := FALSE; // сильный пол
                a[i].kids := 0
        end;

        for i := men+1 to SIZE do
                a[i].age := -1;

        n := 1; // 1 год пошел

        while men <> 0 do begin
                WriteLn ('Наконец ', n, '-го года : ');
                Inc (n);
                owndth := 0;
                for i := 1 to SIZE do
                        if a[i].age > 100 then begin
                                a[i].age := -1;
                                Inc (owndth)
                        end
                        else
                                if a[i].age <> -1 then
                                        Inc (a[i].age);

                men := 0;
                for i := 1 to SIZE do
                        if a[i].age <> -1 then
                                Inc(men);
                WriteLn (men);

                men := men-owndth;

                WriteLn ('Умерло своей смертью ', owndth);
                WriteLn ('Всего умерло', owndth+dead);
                WriteLn ('Живых людей ', men);

                male := 0; WriteLn ('!', male);
                female := 0; WriteLn ('!', female);
                for i := 1 to SIZE do
                        if (a[i].age >= 20) and (a[i].kids < 3) then
                                if a[i].sex then
                                        Inc (female)
                                else
                                        Inc (male);

                WriteLn ('Девушек, способных родить детей ', female);
                WriteLn ('Юношей, способных зачать детейб ', male);

                child := Random (men div 4);
                while (child > male) or (child > female) do
                        child := Random (men div 4);;

                WriteLn ('Детей зачато ', child);


                i := 1;
                while (i <= SIZE) and (child >= count)do begin
                        if a[i].age = -1 then begin
                                a[i].age := 0;
                                a[i].sex := Boolean (Random (2));
                                a[i].kids := 0;
                                Inc (count)
                        end;
                        Inc (i)
                end;
                ReadLn

        end
end.
Почему-то не правильно плюсуюет детей или неправильно сщитает людей.. Не могу понять где косяк.. Чтобы не париться удалил пока людей умирающих не своей смертью..
Отрицательные числа - переполнение..

Последний раз редактировалось Poma][a; 17.12.2012 в 07:23.
Poma][a вне форума Ответить с цитированием
Старый 17.12.2012, 07:35   #17
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

Господа, вопрос в тему - про задачу Коши кто-нибудь слышал? Как раз вчера на примеры наткнулся в какой-то книге, но она дома, вечером, если надо, подкину. Вроде бы эта - из той же оперы.
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...
Sciv вне форума Ответить с цитированием
Старый 17.12.2012, 07:39   #18
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Цитата:
про задачу Коши кто-нибудь слышал
Увы, нет..
Цитата:
если надо, подкину
Очень надо
P.S. С 256 (уже 8) баллами репы
Poma][a вне форума Ответить с цитированием
Старый 17.12.2012, 08:23   #19
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

Вот ссылка на само описание, вечерком пример из книжки (а лучше, наверное, саму книженцию - там как раз численные методы и матпрограммирование с примерами):

http://ru.wikipedia.org/wiki/%D0%97%...BE%D1%88%D0%B8

Роман, спасиб за поздравление Хотел тебе плючсик поставить, да скрипт не разрешает почему-то
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...
Sciv вне форума Ответить с цитированием
Старый 18.12.2012, 15:09   #20
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Так-с, было время (был урок изо ) и накропал, кажется работает
Код:
const
        SIZE = 100;
var
        a : array [1..SIZE] of record
                age :  Integer;  //возраст
                sex :  Boolean;  //пол
                kids : Integer; //  кол-во детей
        end;
        child, par, men, female, male, i, n, owndth, dead, count : Integer;

begin
        Randomize;
        Write ('Всего людей (м = д)'); ReadLn (men);

        for i := 1 to men div 2 do begin
                a[i].age := 20;
                a[i].sex := TRUE; // прекрасный пол
                a[i].kids := 0;
        end;

        for i := men div 2+1 to men do begin
                a[i].age := 20;
                a[i].sex := FALSE;  //сильный пол
                a[i].kids := 0
        end;

        for i := men+1 to SIZE do
                a[i].age := -1;

        n := 1;

        while men <> 0 do begin
                for i := 1 to 15 do
                        WriteLn (a[i].age, ' ', a[i].kids, ' ', a[i].sex);
                WriteLn ('Наконец ', n, '-го года  ');
                Inc (n);
                owndth := 0;
                for i := 1 to SIZE do
                        if a[i].age > 100 then begin
                                a[i].age := -1;
                                Inc (owndth)
                        end
                        else
                                if a[i].age >= 0 then
                                        Inc (a[i].age);

                men := 0;
                for i := 1 to SIZE do
                        if a[i].age <> -1 then
                                Inc(men);
                WriteLn (men);

                men := men-owndth;

                WriteLn ('Умерло своей смертью ', owndth);
                WriteLn ('Всего умерло', owndth+dead);
                WriteLn ('Живых людей ', men);

                male := 0; WriteLn ('!', male);
                female := 0; WriteLn ('!', female);
                for i := 1 to SIZE do
                        if (a[i].age >= 20) and (a[i].kids < 3) then
                                if a[i].sex then
                                        Inc (female)
                                else
                                        Inc (male);

                WriteLn ('Девушек, способных родить детей ', female);
                WriteLn ('Юношей, способных зачать детейб ', male);

                child := Random (men div 4);
                while (child  > male) or (child >  female) do
                        child := Random (men div 4);;

                WriteLn ('Детей зачато ', child);

                // запомиаем родителей
                i := 1; male := child; female := child;
                while (male > 0) or (female > 0) do begin
                        if (a[i].age >= 20) and (a[i].kids < 3) and (a[i].sex) and (female > 0) then begin
                                Dec (female);
                                Inc (a[i].kids)
                        end;
                        if (a[i].age >= 20) and (a[i].kids < 3) and (not (a[i].sex)) and (male > 0) then begin
                                Dec (male);
                                Inc (a[i].kids)
                        end;
                        Inc (i)
                end;


                // заполняем детей
                i := 1;
                count := 1;
                while (i < SIZE) and (child >= count)do begin
                        if a[i].age = -1 then begin
                                a[i].age := 0;
                                a[i].sex := Boolean (Random (2));
                                a[i].kids := 0;
                                Inc (count)
                        end;
                        Inc (i)
                end;
                ReadLn

        end
end.
Там только типы под себя подогнать..
Poma][a вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задача на Паскале noone Помощь студентам 4 12.01.2012 15:58
задача на паскале noone Помощь студентам 1 17.12.2011 12:33
задача на паскале Campanita Помощь студентам 5 30.10.2010 12:31
Задача в Паскале WitaliG Помощь студентам 12 27.10.2010 15:59
задача в паскале __k1ll3r__ Помощь студентам 3 27.12.2007 05:41