Форум программистов, компьютерный форум, киберфорум
Наши страницы

Lua

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 1, средняя оценка - 4.00
_Студент_
10 / 10 / 0
Регистрация: 13.12.2015
Сообщений: 104
#1

Переделать в функциональный метод - Lua

17.05.2017, 15:23. Просмотров 507. Ответов 10

Мне дали задание написать программу. два вида, с использованием ("if","else","elseif", "for","while"...) И без их
вот что у меня получилось
Код
  pochz ={4,5,7,9,8} -- начальное значение
  arr3 = {}
  num =  1
  namb = 1 -- перемножение корня

  io.write("Начальное значение [")
   for i = 1, #pochz  do
     io.write(pochz[i].." ")
    end 
    print("]\n\n\t\tРазложение:\n ")
    
    for n = 1, 5  do
    io.write("\n\t\t[ ")
    umno = 1
      for i = 1, 5  do
        if num == i then
           i = i + 1
         else 
           io.write(pochz[i].." ")           
           arr3[namb]= umno * pochz[i] 
           umno = arr3[namb]          
        end
      end
      io.write("]")
      
      io.write("\n\nСередньогеометрическое значение = "..math.pow(arr3[namb],1/4).."\n ")
      
      namb = namb + 1  
      num = num + 1
      print('')
    end
Нужно переделать без циклов, массивов, короче функионально,

Добавлено через 2 минуты
как я понял, нужно сделать рекурсию, но как с неё выйти без циклов
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.05.2017, 15:23
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Переделать в функциональный метод (Lua):

Программа на LOGO (функциональный язык) - Программирование
LOGO - язык функционального программирования, который используется, например, для обучения детей программированию и т.д. Синтаксис...

Переделать программу, использующую метод Гаусса в метод Барейса - C#
Всем ДВС! подскажите пожалуйста, как переделать эту программу использующую метод Гаусса в метод Барейса. метод барейса это...

Переделать метод из консольного в Form - C#
Используя либу MonoTorrent хочу сделать простенький клиент. Консольный вариант работает как надо а при переносе в форм компилятор...

Надо переделать метод класса. - C++
Есть программа, надо переделать метод класса. Все - в описании. #include <iostream> using namespace std; class Complex { ...

Переделать метод левых прямоугольников, на правых - C#
Есть метод левых прямоугольников, как его переделать на правых? public double leftRectangle(double h) { ...

Переделать код расстановки кораблей в метод - C#
Дан код (нашел на просторах интернета), нужно переделать его так, что бы он работал при помощи подпрограммы (метода) кто может,...

10
Max Dark
шКодер самоучка
1874 / 1674 / 608
Регистрация: 09.10.2013
Сообщений: 3,719
Записей в блоге: 6
Завершенные тесты: 2
17.05.2017, 18:23 #2
Цитата Сообщение от _Студент_ Посмотреть сообщение
но как с неё выйти без циклов
передавать счетчик дополнительным параметром
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
iterate = function(i, last, body)
    if i == last then return; end;
    body(i)
    return iterate(i + 1, last, body)
end
 
bind = function(f, param)
    return function(...)
        return f(param, ...)
    end
end
iterate(1, 5, print)
 
from1to5 = bind(bind(iterate, 1), 5)
 
from1to5(function(i)
    print(i * i)
end)
2
_Студент_
10 / 10 / 0
Регистрация: 13.12.2015
Сообщений: 104
17.05.2017, 18:50  [ТС] #3
Max Dark, if нельзя использовать
0
Max Dark
шКодер самоучка
1874 / 1674 / 608
Регистрация: 09.10.2013
Сообщений: 3,719
Записей в блоге: 6
Завершенные тесты: 2
17.05.2017, 19:26 #4
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от _Студент_ Посмотреть сообщение
if нельзя использовать
Вызов принят)
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
bind = function(f, param)
    return function(...)
        return f(param, ...)
    end
end
 
combo = function(f1, f2)
    return function(...)
        return f1(f2(...))
    end
end
 
iterate = {}
iterate.If = {}
iterate.For = function(i, last, body)
    return iterate.If[i == last](i, last, body)
end
iterate.noop = function(...)return; end;
 
iterate.If[true] = iterate.noop
iterate.If[false] = function(i, last, body)
    body(i)
    return iterate.For(i + 1, last, body)
end
 
 
from1to5 = bind(bind(iterate.For, 1), 5)
 
from1to5(function(i)
    print(i * i)
end)
 
iterate.For(1, 5, print)
 
print("Chalenge complete ;)")
1
_Студент_
10 / 10 / 0
Регистрация: 13.12.2015
Сообщений: 104
17.05.2017, 19:35  [ТС] #5
Max Dark, ты крут, без сомнений

Добавлено через 1 минуту
Max Dark, а куда записывают начальные данные
0
Max Dark
шКодер самоучка
1874 / 1674 / 608
Регистрация: 09.10.2013
Сообщений: 3,719
Записей в блоге: 6
Завершенные тесты: 2
17.05.2017, 19:56 #6
Цитата Сообщение от _Студент_ Посмотреть сообщение
а куда записывают начальные данные
А куда хочется.
Этот код показывает принцип, но не является решением - его нужно написать самостоятельно.
1
_Студент_
10 / 10 / 0
Регистрация: 13.12.2015
Сообщений: 104
17.05.2017, 20:00  [ТС] #7
Max Dark, не понял
0
Max Dark
шКодер самоучка
1874 / 1674 / 608
Регистрация: 09.10.2013
Сообщений: 3,719
Записей в блоге: 6
Завершенные тесты: 2
17.05.2017, 21:04 #8
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от _Студент_ Посмотреть сообщение
не понял
Что именно?
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
-- Объявляем "namespace" iterate, можно без него
iterate = {}
-- Таблица функций для перехода по условию. На этом принципе можно и switch "запилить"
iterate.If = {}
-- функция For для перебора от i до last,
-- body должно быть функцией - оно заменяет тело цикла
iterate.For = function(i, last, body)
    return iterate.If[i <= last](i, last, body)
end
-- фенкция ForEach перебирает элементы lst
-- body должно быть функцией - оно заменяет тело цикла
iterate.ForEach = function(lst, body)
    iterate.For(1, #lst, function(i)
        body(lst[i])
    end)
end
-- функция "пустышка",
-- нужна для пустого блока then или else
-- используется для выхода из рекурсии
iterate.noop = function(...)return; end;
-- ветка if-else , выполняется при провале условия
iterate.If[false] = iterate.noop
-- ветка if-then , выполняется при успехе условия
iterate.If[true] = function(i, last, body)
    body(i)
    return iterate.For(i + 1, last, body)
end
 
pochz ={4,5,7,9,8}
iterate.ForEach(pochz, function(val)
    io.write(val..' ')
end)
1
_Студент_
10 / 10 / 0
Регистрация: 13.12.2015
Сообщений: 104
17.05.2017, 21:13  [ТС] #9
Max Dark, спасибо))))))
0
Max Dark
шКодер самоучка
1874 / 1674 / 608
Регистрация: 09.10.2013
Сообщений: 3,719
Записей в блоге: 6
Завершенные тесты: 2
18.05.2017, 00:24 #10
_Студент_, оказывается есть более простой способ заменить if
Javascript
1
2
3
4
5
6
7
8
9
10
function For(i, last, body)
    return i <= last and {
        body(i),
        For(i + 1, last, body)
    } or {
        --// no op
    }
end
 
For(1, 5, print)
1
_Студент_
10 / 10 / 0
Регистрация: 13.12.2015
Сообщений: 104
18.05.2017, 17:55  [ТС] #11
Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
--------------------------------------------------------------- -- обьявление переменных
  num =  1                                                        
  namb = 1                                                      -- перемножение корня
  local pochz ={10,11,12,13,14}                                 -- начальное значение
  arr3 = {}                                                     -- результат
  iterate = {}                                                  -- что-то полезное  
  ----------------------------------------------------------------первый фор (вывод начальных значений) 
  iterate.If = {}                                                 -- выход из рекурсии 1
  iterate.For = function(i, last, body)                           -- 1 цыкл
      return iterate.If[i == last](i, last, body)                 
   end  
   iterate.noop  = function() return; end;                        -- полезная безсполезность
   iterate.If[true] = iterate.noop                                -- используется для выхода из рекурсии
   iterate.If[false] = function(i, last, body)                    -- выполняется при провале условия
      body(pochz[i].." ")                                         -- тело цикла
      
      return iterate.For(i + 1, last, body)                       -- счетчик + 1
   end
----------------------------------------------------------------- --второй фор (подсчёт)
  iterate.If2 = {}                                                -- выход из рекурсии 2
  iterate.For2 = function(n, last)                                -- 2 цыкл
      return iterate.If2[n == last](n, last)                 
  end    
  iterate.noop2 = function() return; end;                         -- переход на елемент массива
  iterate.If2[true] = iterate.noop                                -- 2
  iterate.If2[false] = function(n, last)                          -- выполняется при провале условия
     io.write("\n\t\t[ ")                                         -- тело цикла
      umno = 1
      iterate.For3(1, 5, umno)                                    -- тело цикла
     io.write(" ]")
    --io.write("\n\nСередньогеометрическое значение = "..math.pow(arr3[namb],1/4).."\n ")
     namb = namb + 1  
     num = num + 1
     return iterate.For2(n + 1, last)                             -- счетчик + 1
end
  
----------------------------------------------------------------- --третий фор(пропуск одного)
  iterate.If3 = {}                                                -- выход из рекурсии 3
  iterate.For3 = function(i, last, umno)  
    return iterate.If3[i == last](i, last, umno)                  -- 3 цыкл       
  end
                              
  iterate.noop3 = function() return; end;                         -- переход на елемент массива
  iterate.If3[true] = iterate.noop3                               -- 3
  iterate.If3[false] = function(i, last, umno)                    -- выполняется при провале условия
     
     iterate.If4 = {}                                                              -- условие перехода 
     iterate.If4[true] = i + 1                                    -- 3
     iterate.If4[false] = function(i, last, umno)                 -- выполняется при провале условия
        io.write(pochz[i].." ")
        arr3[namb]= umno * pochz[i] 
     end
     io.write(pochz[i].." ")                                      -- тело цикла
     return iterate.For3(i + 1, last, umno)                       -- счетчик + 1
end
 --------------------------------------------------------------- -- main
 -- 
io.write("Начальное значение [ ")
iterate.For(1,#pochz,io.write)
print("]\n\t\t   Разложение:")  
iterate.For2(1, 5)
вот что тут не так, и как вызвать тот иф4
Max Dark,

Добавлено через 5 часов 35 минут
Сделяль, если кому будет интересно
Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
--------------------------------------------------------------- -- обьявление переменных
  local num   = 1                                                        
  local namb  = 1                                                      -- перемножение корня
  local pochz ={4,5,7,9,8}                                 -- начальное значение
  local arr3  = {}   
  local umno = 1     
  ------
  local function Fill(i)
      return i < 6 and
         {
            io.write(pochz[i].." "),
            Fill(i + 1);   
         }
         or 
         {
            io.write("")
         }
  end 
  local function FAAAAAK()
      namb = namb + 1
      return
  end
 local function arr(i)
    arr3[namb] = umno * pochz[i];
    umno = arr3[namb];
    return 
 end
 
 local function hhh()
    num = num + 1
    return;
 end
 
 local function If(i)
    return i ~= num and
         {    
            io.write(pochz[i].." "); 
            arr(i);
            
 
         }
         or 
         {      
              io.write("")
         }
 end
 local function umnenko()
    umno = 1
  return
 end
 local function For2(i,last)
      return i < last and
         {
            If(i,1);
            For2(i + 1,last);
         }
         or 
         {
            io.write("")
         }
  end
  
  local function For1(n,last)
       return n < last and
         {
            io.write("\n\t\t[ ");
            umnenko();
            For2(1,last);
            io.write("]");
            io.write("\nСередньогеометрическое значение = "..math.pow(arr3[namb],1/4).."");
            FAAAAAK();
            hhh();
            For1(n + 1,last);
 
         }
         or 
         {
            io.write("")
         }
  end 
  
 
  local function main() 
      io.write("Начальное значение [ ")
      Fill(1)
      io.write("]\t\tРазложение:")
      For1(1,#pochz + 1)
      
  end 
  main()
0
18.05.2017, 17:55
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.05.2017, 17:55
Привет! Вот еще темы с ответами:

Усовершенствованный метод Эйлера-Коши (переделать с маткад) - Matlab
нужно переписать программу с маткад на матлаб.в документе указан листинг программы

НАРОД как ПЕРЕДЕЛАТЬ из Слейторо в метод Паретто! ! !??? - Delphi
unit uMain; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls,...

Переделать программу из консоли на форму и по возможности добавить метод - C#
Есть готовая программа решения матричных игр методом Брауна-Робинсона, нужно переделать её из консольной на форму, для того чтобы добавить...

Переделать метод в цикл - удаление строк, содержащих цифру 9 - C#
Подскажите, пожалуйста, как метод переделать в цикл. По условию, чтобы убрались строки в которых есть 9. Спасибо. int n, m; ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru