Форум программистов, компьютерный форум, киберфорум
Lisp
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
3 / 3 / 1
Регистрация: 29.03.2014
Сообщений: 60
1

Работа со списками

15.10.2014, 16:30. Просмотров 909. Ответов 16
Метки нет (Все метки)

Помогите пожалуйста!
Написать программу, которая формирует базу данных на основе списков. Эта программа должна иметь функцию список (запись в БД), функции модификации записей и функции доступа к отдельным данным.

Вид БД:
((фамилия имя) №зачетки №группы вариант_задания оценка)

Задания:
1. Найти по номеру зачетки студента и добавить к фамилии и имени отчество.
2. Подсчитать средний балл успеваемости группы.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.10.2014, 16:30
Ответы с готовыми решениями:

Работа со списками
Здравствуйте уважаемые участники форума. Требуется небольшая помощь. Нам преподают язык Scheme (он...

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

работа со списками
задание такое: Cформировать список, состоящий из элементов, которые встречаются в обоих исходных...

Работа со списками
Здравствуйте! Выполняю лабораторную по Lisp'у. Задание следующее: Добавлено через 10 минут Дан...

__________________
16
Модератор
Эксперт Python
28529 / 15399 / 3043
Регистрация: 12.02.2012
Сообщений: 25,230
Записей в блоге: 4
15.10.2014, 20:36 2
Лучший ответ Сообщение было отмечено raigon как решение

Решение

Lisp
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
(defun add-student (base name surname nz ng v r)
  (cons (list (list surname name) nz ng v r) base))
 
==> add-student
 
(setq *base* nil)
 
==> nil
 
(setq *base* (add-student *base* 'Иван 'Бездомный 11 22 1 3))
 
==> (((Бездомный Иван) 11 22 1 3))
 
(setq *base* (add-student *base* 'Михаил 'Берлиоз 12 22 1 4))
 
==> (((Берлиоз Михаил) 12 22 1 4) ((Бездомный Иван) 11 22 1 3))
 
(defun add-otch (base nz otch)
  (if (null base) 
      base 
      (if (= nz (cadar base)) (cons (append (list (append (caar base) (list otch))) (cdar base)) (cdr base))
          (cons (car base) (add-otch (cdr base) nz otch))))) 
 
==> add-otch
 
(add-otch *base* 12 'Петрович)
 
==> (((Берлиоз Михаил Петрович) 12 22 1 4) ((Бездомный Иван) 11 22 1 3))
 
(defun avg-ball (base ng)
  (let ((lst-v  (mapcar #'(lambda (z) (nth 4 z)) (remove-if #'(lambda (x) (/= ng (caddr x))) base))))
        (if (null lst-v) nil (/ (apply '+ lst-v) (length lst-v)))))
 
==> avg-ball
 
(avg-ball *base* 22)
 
==> 7/2
2
4343 / 3350 / 342
Регистрация: 12.03.2013
Сообщений: 5,838
15.10.2014, 20:46 3
Цитата Сообщение от Catstail Посмотреть сообщение
(setq *base* nil)
А в HomeLisp нет defvar?
0
Модератор
Эксперт Python
28529 / 15399 / 3043
Регистрация: 12.02.2012
Сообщений: 25,230
Записей в блоге: 4
15.10.2014, 21:00 4
Цитата Сообщение от helter Посмотреть сообщение
А в HomeLisp нет defvar?
- есть...
1
3 / 3 / 1
Регистрация: 29.03.2014
Сообщений: 60
22.10.2014, 11:07  [ТС] 5
Можно сделать так чтобы при добавлении отчества для разных студентов оно сохранялось, а не оставалось только у того студента для которого добавили в последний раз?

Lisp
1
2
3
4
5
CL-USER 5 > (add-otch *base* 11 'Викторович)
(((Бугайов Петр) 12 22 1 4) ((Бойко Иван Викторович) 11 22 1 3))
 
CL-USER 6 > (add-otch *base* 12 'Петрович)
(((Бугайов Петр Петрович) 12 22 1 4) ((Бойко Іван) 11 22 1 3))
0
Модератор
Эксперт Python
28529 / 15399 / 3043
Регистрация: 12.02.2012
Сообщений: 25,230
Записей в блоге: 4
22.10.2014, 11:36 6
raigon, вопрос свидетельствует о непонимании Лиспа. Чтобы отчество сохранялось, нужно сохранять результат в базе:

не

Lisp
1
2
(add-otch *base* 11 'Викторович)
(((Бугайов Петр) 12 22 1 4) ((Бойко Иван Викторович) 11 22 1 3))
а

Lisp
1
2
(setq *base* (add-otch *base* 11 'Викторович)
(((Бугайов Петр) 12 22 1 4) ((Бойко Иван Викторович) 11 22 1 3)))
1
3 / 3 / 1
Регистрация: 29.03.2014
Сообщений: 60
23.10.2014, 20:35  [ТС] 7
Помогите еще написать функции модификации данных и доступа к определенным данным.
0
3 / 3 / 1
Регистрация: 29.03.2014
Сообщений: 60
26.10.2014, 08:46  [ТС] 8
Помогите сделать тоже самое, но чтобы все происходило в файле.

Lisp
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
(defun add-student (base name surname nz ng v r)
  (cons (list (list surname name) nz ng v r) base))
 
;(setq *base* nil)
;(setq *base* (add-student *base* 'Иван 'Бойко 11 22 1 3))
;(setq *base* (add-student *base* 'Петр 'Бугайов 12 22 1 4))
 
 
(defun add-otch (base nz otch)
 (if (null base) 
  base 
   (if (= nz (cadar base)) (cons (append (list (append (caar base) (list otch))) (cdar base)) (cdr base))
   (cons (car base) (add-otch (cdr base) nz otch))))) 
 
;(setq *base* (add-otch *base* 12 'Петрович))
 
 
(defun avg-ball (base ng)
  (let ((lst-v  (mapcar #'(lambda (z) (nth 4 z)) (remove-if #'(lambda (x) 
        (/= ng (caddr x))) base))))
        (if (null lst-v) nil (/ (apply '+ lst-v) (length lst-v)))))
 
;(avg-ball *base* 22)
 
;Доступ к данным по индексу
(defun access(elem index base)
(nth index (nth elem base))
)
0
Модератор
Эксперт Python
28529 / 15399 / 3043
Регистрация: 12.02.2012
Сообщений: 25,230
Записей в блоге: 4
26.10.2014, 08:58 9
Цитата Сообщение от raigon Посмотреть сообщение
Помогите сделать тоже самое, но чтобы все происходило в файле.
- для HomeLisp пойдет?
0
3 / 3 / 1
Регистрация: 29.03.2014
Сообщений: 60
26.10.2014, 09:19  [ТС] 10
Да. Спасибо! Но лучше CommonLisp.
0
Модератор
Эксперт Python
28529 / 15399 / 3043
Регистрация: 12.02.2012
Сообщений: 25,230
Записей в блоге: 4
26.10.2014, 09:40 11
Lisp
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
;; Выгрузка базы в файл
 
(defun unload-base (base-name base)
  (let ((fo (gensym 'fo)))
    (filOpen fo base-name _OUTPUT)
    (mapcar #'(lambda (x) (filPutLine fo (output x))) base)
    (filClose fo)))
 
;; Печать базы
 
(defun print-base (base-name)
  (let ((fi (gensym 'fi)))
     (filOpen fi base-name _input)
     (loop
       (when (filEof fi) (filClose fi) (return t))
       (printsline (filGetLine fi)))))
 
;; Загрузка базы из файла
 
(defun load-base (base-name)
  (let ((fi (gensym 'fi))
        (res nil)) 
     (filOpen fi base-name _input)
     (loop
       (when (filEof fi) (filClose fi) (return res))
       (push (input (filGetLine fi)) res))))
 
;; Добавить отчество по номеру зачетки
 
(defun add-otch-in-file (base nz otch)
  (unload-base base (add-otch (load-base base) nz otch)))
 
==> add-otch-in-file
 
(add-otch-in-file "mim.txt" 12 'Àëåêñàíäðîâè÷)
 
==> T
 
(add-otch-in-file "mim.txt" 11 'Íèêîëàåâè÷)
 
==> T
(print-base "mim.txt")
 
((Áåðëèîç Ìèõàèë Àëåêñàíäðîâè÷) 12 22 1 4)
((Áåçäîìíûé Èâàí Íèêîëàåâè÷) 11 22 1 3)
 
==> T
1
3 / 3 / 1
Регистрация: 29.03.2014
Сообщений: 60
26.10.2014, 12:15  [ТС] 12
Не хочет писать в файл базу.
И еще, где оно создает этот файл?


Lisp
1
2
3
CL-USER 8 : 3 >(unload-base "mim.txt" *base*)
 
Error: FO is an illegal argument to GENSYM.
0
Модератор
Эксперт Python
28529 / 15399 / 3043
Регистрация: 12.02.2012
Сообщений: 25,230
Записей в блоге: 4
26.10.2014, 12:37 13
raigon, код не для Common Lisp. Он в CL не будет работать. Базу создает в текущей директории.
0
3 / 3 / 1
Регистрация: 29.03.2014
Сообщений: 60
26.10.2014, 12:40  [ТС] 14
Не могли бы вы сделать для CommonLisp?
0
4343 / 3350 / 342
Регистрация: 12.03.2013
Сообщений: 5,838
26.10.2014, 13:53 15
Цитата Сообщение от raigon Посмотреть сообщение
Помогите сделать тоже самое, но чтобы все происходило в файле.
Как всё может "происходить" в файле? В файле может только храниться информация. Напишите функции load-db и dump-db, которые будут читать и писать базу данных. Поскольку это у вас список, достаточно использовать print и read. Ввод/вывод осуществляется с помощью макроса with-open-file. Если есть вопросы - задавайте.
0
3 / 3 / 1
Регистрация: 29.03.2014
Сообщений: 60
26.10.2014, 15:36  [ТС] 16
Помогите написать эти функции.
0
4343 / 3350 / 342
Регистрация: 12.03.2013
Сообщений: 5,838
26.10.2014, 15:56 17
Это форум или богадельня?
Цитата Сообщение от helter Посмотреть сообщение
Если есть вопросы - задавайте.
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.10.2014, 15:56

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь.

Работа со списками
Здравствуйте. У меня возникли проблемы со следующим заданием: Выделите с помощью комбинации вызовов...

Работа со списками
Всем привет! Помогите пожалуйста решить задачи. Никак не могу со списками разобраться. Задача...

Работа со списками
Доброго времени суток, очень нужна ваша помощь. Необходимо решить несколько задач: 1) Добавить в...

Работа со списками
Ребят, помогите пожалуйста! Сессия на носу...:*((( Задание: написать функцию, формирующую два...


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

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

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