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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [Псевдокод] задача алгоритмизации, Основы алгоритмизации и процедурное пр. 
:(
    Опции темы
Skaro
Дата 18.2.2012, 17:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Так как той теме, от другого автора, которой я писал, уже около 7 лет(он ее создал и исчез), то вряд ли мне там ответят, поэтому создаю новую.

Я решил перед поступлением на IT, за 2 с половиной года до этого, начать учиться программировать, чтобы там не оказаться дебилом. Знания у меня пока не велики, но год назад я учил бэйсик, а сейчас от силы пару операторов только вспомню. Сейчас начал юзать учебник "Основы программирования" Г.С. Иванова, чтобы освоить паскаль, а затем и делфи(говорят что это развивает нужное мышление, свойственное программисту). Учебник очень тяжелый для новичка, так как там все обьяснено лексикой аля профессор баумунги, но, читая одно предложение по нескольку раз(и поюзав википедию), я начинаю въезжать о чем пишет автор учебника. Сейчас читаю тему "Основы алгоритмизации и процедурное программирование" и в конце темы 2 задачи, одна из которых вот:
  
 Задание 1. Разработайте алгоритм программы, определяющей первые 10 чисел 
последовательности Фибоначчи, которая формируется следующим образом: 
F(1) =F(2)= 1, F(n) = F(n-1) +F(n-2) 
где п > 2. Алгоритм представьте в виде схемы и запишите псевдокодом. 

Я вот целый день думал и не надумал даже как алгоритм построить графически, а о псевдокоде я вообще молчу. Максимально надумал вот что:

Код

Шаг 1 ставлю основную задачу алгоритма 
Программа  
     ввести n
     выразить F(n)
     вывести F
Конец
Шаг 2 ввожу числа последовательности
     F(3):=2
     F(4):=3
     F(5):=F(3)+F(4)
     F(6):=F(4)+F(5)
     F(7):=F(5)+F(6)
     F(8):=F(6)+F(7)
     F(9):=F(7)+F(8)
     F(10):=F(8)+F(9)
Все
Шаг 3 определяю чему равно n разветвленным алгоритмом
     если n>2
          то если n:=3
                    то F(n):=F(3)
                    иначе если n:=4
               все если       то F(n):=F(4)
                                    иначе если n:=5
                               все если       то F(n):=F(5)
                                                    иначе если n:=6
                                              все если        то F(n):=F(6)
                                                                    иначе если n:=7
                                                               все если       то F(n):=F(7)
                                                                                    иначе если n=8
                                                                               все если       то F(n):=F(8)
                                                                                                    иначе если n:=9
                                                                                               все если        то F(n):=F(9)
                                                                                                                     иначе если n:=10
                                                                                                                    все если    то F(n):=F(10)
                                                                                                                                      иначе F(n)=1
                                                                                                                                 все если
     иначе F(n)=1

Шаг 3 
     вывод F(n)
конец


Это сообщение отредактировал(а) Skaro - 18.2.2012, 17:46
PM MAIL   Вверх
Damarus
Дата 18.2.2012, 17:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Awaiting Authorisation
Сообщений: 671
Регистрация: 6.5.2006

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



Цитата(Skaro @  18.2.2012,  18:15 Найти цитируемый пост)
Я вот целый день думал и не надумал даже как алгоритм построить графически, а о псевдокоде я вообще молчу.

Рекурсия:
Код
#include <iostream>

unsigned int f(unsigned int n)
{  
    if (n < 2)
        return n == 0 ? 0 : 1;
    return f(n - 1) + f(n - 2);
}

int main(int argc, char **argv, char **envp)
{
    for (unsigned int n = 0; n <= 10; n++)
        std::cout << "f(" << n << ") = " << f(n) << std::endl;
}

PM MAIL ICQ Jabber   Вверх
Фантом
Дата 18.2.2012, 17:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вы это прекратите!
***


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

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



Цитата(Skaro @  18.2.2012,  18:15 Найти цитируемый пост)

Я вот целый день думал и не надумал даже как алгоритм построить графически, а о псевдокоде я вообще молчу.

Раз уж Вас никто не заставляет это делать - не делайте. Напишите соответствующую программу на Паскале, это будет намного полезнее.
PM   Вверх
Skaro
Дата 18.2.2012, 19:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(Фантом @ 18.2.2012,  17:52)
Цитата(Skaro @  18.2.2012,  18:15 Найти цитируемый пост)

Я вот целый день думал и не надумал даже как алгоритм построить графически, а о псевдокоде я вообще молчу.

Раз уж Вас никто не заставляет это делать - не делайте. Напишите соответствующую программу на Паскале, это будет намного полезнее.

Кхм... Вы читали вообще что я писал? Я не знаю пока паскаль.  Перед ним идет тема "основы алгоритмизации", где нужно скачала научиться писать псевдокод.  Да, меня никто не заставляет это делать, но я это делаю по собственному желанию и так как я занимаюсь самообучением - естественно мне придется советоваться со знающими людями и просить у них помощи если где-то что-то  непонятно, а иначе самообучение невозможно(я ведь не Билл Гейтс). К тому же я за компьютером провожу очень много времени, чем задрачиваться в какое нибудь мморпг, гораздо лучше будет если я буду заниматься программированием.

Добавлено через 8 минут и 30 секунд
Цитата(Damarus @ 18.2.2012,  17:51)
Цитата(Skaro @  18.2.2012,  18:15 Найти цитируемый пост)
Я вот целый день думал и не надумал даже как алгоритм построить графически, а о псевдокоде я вообще молчу.

Рекурсия:
Код
#include <iostream>

unsigned int f(unsigned int n)
{  
    if (n < 2)
        return n == 0 ? 0 : 1;
    return f(n - 1) + f(n - 2);
}

int main(int argc, char **argv, char **envp)
{
    for (unsigned int n = 0; n <= 10; n++)
        std::cout << "f(" << n << ") = " << f(n) << std::endl;
}

Вы бы хотя бы в кавычках пояснения написали где какое действие происходит. Я ведь не знаю операторов C++
PM MAIL   Вверх
Фантом
Дата 18.2.2012, 20:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вы это прекратите!
***


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

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



Цитата(Skaro @  18.2.2012,  20:06 Найти цитируемый пост)

Кхм... Вы читали вообще что я писал? Я не знаю пока паскаль.

Читал, но из написанного Вами то, что Вы не знаете Паскаль, не следует.

Цитата(Skaro @  18.2.2012,  20:06 Найти цитируемый пост)
Перед ним идет тема "основы алгоритмизации", где нужно скачала научиться писать псевдокод. 

Тогда пропустите ее. Иначе Вы потратите время не на понимание собственно алгоритмизации, а на изучение еще одного "языка программирования", при этом никому не нужного.

P.S. Скачал и посмотрел используемый Вами учебник. Он ужасен. Возьмите какой-нибудь "Паскаль, начальный курс" Фаронова, это будет намного полезнее.
PM   Вверх
Pretorian
Дата 18.2.2012, 21:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



разобрал задачу ради интереса..
Цитата

Разработайте алгоритм программы, определяющей первые 10 чисел

Значит подразумевается вывести первые 10 чисел последовательности.
Как видно из условия, первые 2 числа даны (F(1) и F(2)) и они равны единице. Остальные числа последовательности можно получить по приведённой формуле
Цитата

F(1)=F(2)=1, F(n) = F(n-1) +F(n-2)


Код

n1 := 1 //определяем первое число
n2 := 1 //определяем второе число
n3 := 2 //по формуле вычислили 3-тье число
Вывести n1
Вывести n2
Вывести n3
i := 3; //т.к. первые три числа последовательности мы определили, осталось определить остальные 7,
          //поэтому определяем этот счётчик, который будет считаться до 10
цикл-пока i <= 10 //пока счётчик меньше либо равен 10, нужно вычислять следующее число последовательности
    n1 := n2  // Т.к. вычисляем следующее число последовательности, первое число становиться вторым
    n2 := n3  // второе третьим
    n3 := n1 + n2; // а 3-тье вычисляем опять же по формуле
    Вывести n3 // и выводим его
все-цикл


Учебник действительно тяжёлый, особенно для новичка, Вы только голову себе забьёте им.
Лучше читайте Фаронова, как Вам уже посоветовали... "Turbo Pascal наиболее полное руководство. В.В. Фаронов" для начала самое то...
PM   Вверх
volatile
Дата 18.2.2012, 23:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Всё верно, добавлю только, что без рекурсии эффективней
Код

int main ()
{
   int a[2] = { 0, 1 };
   for (int i=1; i<=10; ++i)
      printf ("fib(%2u) = %3u\n", i, a[i&1] += a[i&1^1]);
}

http://codepad.org/yhvCOGDJ
PM MAIL   Вверх
Skaro
Дата 19.2.2012, 08:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(Pretorian @ 18.2.2012,  21:22)
Код

n1 := 1 //определяем первое число
n2 := 1 //определяем второе число
n3 := 2 //по формуле вычислили 3-тье число
Вывести n1
Вывести n2
Вывести n3
i := 3; //т.к. первые три числа последовательности мы определили, осталось определить остальные 7,
          //поэтому определяем этот счётчик, который будет считаться до 10
цикл-пока i <= 10 //пока счётчик меньше либо равен 10, нужно вычислять следующее число последовательности
    n1 := n2  // Т.к. вычисляем следующее число последовательности, первое число становиться вторым
    n2 := n3  // второе третьим
    n3 := n1 + n2; // а 3-тье вычисляем опять же по формуле
    Вывести n3 // и выводим его
все-цикл


В общих чертах понял, а как программа будет находить, допустим, не n3, а n5?

Добавлено @ 08:54
Цитата(Фантом @ 18.2.2012,  20:51)
P.S. Скачал и посмотрел используемый Вами учебник. Он ужасен. Возьмите какой-нибудь "Паскаль, начальный курс" Фаронова, это будет намного полезнее.

Я, просто, решил, что раз я раньше учил бэйсик, то и в основах алгоритмизации без проблем разберусь. Ведь чтобы изучать обширную тему, где нужно думать, нада перед этим и основы знать, а из основ мне под руку попался только этот учебник(хорошо что я его не купил smile ) 

Я планирую сначала освоить паскаль, далее делфи(низнаю есть ли между ними особые отличия, т.к. делфи это усовершенствованый паскаль) и попользовавшись им хотя бы год только тогда приступлю к изучению C++ или Flash. 

Это сообщение отредактировал(а) Skaro - 19.2.2012, 08:55
PM MAIL   Вверх
Pretorian
Дата 19.2.2012, 09:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(Skaro @  19.2.2012,  10:46 Найти цитируемый пост)
В общих чертах понял, а как программа будет находить, допустим, не n3, а n5?

В условии задачи не сказано найти какое-то определённое число, а сказанно вывести первые 10 чисел последовательности.
Если нужно найти какое-либо число последовательности, допустим 5-ое, то цикл будет выглядить так
Код

цикл-пока i <= 5
    n1 := n2
    n2 := n3
    n3 := n1 + n2
все-цикл
Выводим n3 // В переменной n3, как раз и хранится 5-ое число

если нужно найти 3-тье, то оно уже найдено
Код

n3 := n1 + n2
i := 3 
цикл-пока i <= 3 //т.к. счётчик равен 3, то цикл не даже запустится
    n1 := n2
    n2 := n3
    n3 := n1 + n2
все-цикл
Выводим n3


Добавлено через 6 минут и 1 секунду
Цитата(Skaro @  19.2.2012,  10:46 Найти цитируемый пост)
только тогда приступлю к изучению C++ или Flash

C++ и Flash сильно отличаются друг от друга. При изучении Си, голову конечно ещё придётся поломать smile 
PM   Вверх
Skaro
Дата 19.2.2012, 10:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(Pretorian @ 19.2.2012,  09:01)
C++ и Flash сильно отличаются друг от друга. При изучении Си, голову конечно ещё придётся поломать smile

Ну я в курсе что они разные. они мне и нужны для разных целей. флэш для написания игр-флэшек, типа приложений в соц. сетях или браузерок(но для этого нада лезть в веб-программирование), а си, потому, что весь современный софт написан на нем, ну или 70-90% всего софта. 

Иными словами: Первое - для заработка, второе - для развития серых клеточек

Это сообщение отредактировал(а) Skaro - 19.2.2012, 10:11
PM MAIL   Вверх
Pretorian
Дата 19.2.2012, 11:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(Skaro @  19.2.2012,  12:09 Найти цитируемый пост)
а си, потому, что весь современный софт написан на нем, ну или 70-90% всего софта

ну здесь как посмотреть. Если взять десктопные приложения, то и на дельфи немалая доля приходится (я думаю не меннее 50%). Если писать enterprise приложения, то здесь лидируют C# и Java, и Си в этом случае даже не пригодится...

А зарабатывать можно очень даже не плохо и будучи программистом Си, и даже HTML-верстальшиком. Всё зависит от проффесионализма...

Это сообщение отредактировал(а) Pretorian - 19.2.2012, 11:12
PM   Вверх
Skaro
Дата 19.2.2012, 12:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(Pretorian @ 18.2.2012,  21:22)
Лучше читайте Фаронова, как Вам уже посоветовали... "Turbo Pascal наиболее полное руководство. В.В. Фаронов" для начала самое то...

Уже в самой первой главе, автор дает знать, что будет учить писать программы к досу. Это значит мне нужно поставить досовскую ОС?

Это сообщение отредактировал(а) Skaro - 19.2.2012, 12:43
PM MAIL   Вверх
Pretorian
Дата 19.2.2012, 13:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(Skaro @  19.2.2012,  14:41 Найти цитируемый пост)
Это значит мне нужно поставить досовскую ОС?

Нет, не надо. Если поставите Паскаль, то там это уже предусмотрено.
И к тому же, в Windows по умолчанию есть досовский эмулятор (чтобы запустить нужно: Win+R и ввести cmd), который при изучении Паскаля, Вам врятли пригодится.
Вернее Паскалевские программы будут запускаться именно в нём, но поэтому поводу не стоит париться.

Это сообщение отредактировал(а) Pretorian - 19.2.2012, 13:09
PM   Вверх
Skaro
Дата 19.2.2012, 13:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(Pretorian @ 19.2.2012,  11:07)
А зарабатывать можно очень даже не плохо и будучи программистом Си, и даже HTML-верстальшиком. Всё зависит от проффесионализма...

А вы представьте себе сколько получают денег администраторы приложений вконтакте типа "Тюряга". Там около 7 миллионов пользователей, даже если каждый из них скинется по рублю, минус 50% комиссия, это же 3 с половиной миллиона рублей. Конечно рассчитывать на такие деньги, создавая что-то подобное, глупо, так как нужен и не малый вклад на рекламу + расходы на софт, так как если с этой игры хочешь получать прибыль и собрал хорошее количество игроков, а софт пиратский, то есть большая вероятность того что всю прибыль у меня отсудят + штраф. Даже если игра не будет пользоваться особой популярностью, то всеравно прибыль в несколько тыс. рублей в месяц за, почти, ничего не деланье, это очень даже не плохо. Но для этого есть дополнительный гемор в виде набора в команду программистов и художников, которым еще и нада зарплату платить.
PM MAIL   Вверх
Pretorian
Дата 19.2.2012, 13:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(Pretorian @  19.2.2012,  13:07 Найти цитируемый пост)
А зарабатывать можно очень даже не плохо и будучи программистом Си, и даже HTML-верстальшиком. Всё зависит от профессионализма...

Говоря это, я имел ввиду именно работу программистом или веб-мастером, как профессионала... а то что говорите Вы, это уже бизнес. Я согласен, если придумать удачный стартап, то можно большие бабки грести...
PM   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

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

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


 




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


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

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