среда, 13 апреля 2016 г.

Python. Подсчет букв в текстовом файле

Доброго времени суток!

Решаем следующую задачку на Python:

Реализуйте функцию для подсчета букв в текстовом файле. Функция должна принимать путь к файлу и возвращать словарь, ключами которого являются слова из текста, а значениями — числа, показывающие, сколько раз слово встречается в тексте. Программа не должна различать регистр, в котором записаны буквы, т.е. буквы L и lследует считать одинаковыми.
Продемонстрируйте работу функции на примерах:
  • Произвольного короткого текста на английском языке, в котором слова могут быть легко пересчитаны вручную,
  • Произвольного короткого текста на русском языке, в котором слова могут быть легко пересчитаны вручную,
  • Произвольного длинного текста (размер файла — не менее 100 кбайт) на английском языке.
  • Произвольного длинного текста (размер файла — не менее 200 кбайт) на русском языке.
В демонстрационных примерах результат должен отсортирован в порядке убывания частоты, каждая пара «буква — частота» должна быть выведена в отдельной строке и выровнена так:
s   1071
t    315
f     12
Т.е. числа должны быть выровнены по правому краю.

# Функция для подсчета букв в текстовом файле

def analysis_letters (f): # Объявление функции analysis_letters
    d = {}  # Словарь
    flag = 0  
    Text = f.read() # Текст из файла записываем в строку Text
    Text = Text.lower() # Преобразование строки к нижнему регистру
    for letter in Text: # Циклом идем по всем буквам текста
        if 'а'<= letter <='я' or 'a'<= letter <='z':
            flag = 0
            for key in d: # Идем по ключам словаря 
                if letter == key: # Проверяем, есть ли уже в словаре такая буква
                    d[key] = d[key] + 1 # Если есть, то к кол-ву прибавляем 1
                    flag = 1 # Флагу присваиваем значение 1
                    break # Выходим из цикла, т.к. уже нашли букву в словаре
            if flag == 0: # Если после прохождения предыдущего цикла флаг остался нулевым, значит такой буквы в словаре еще нет            
                d[letter] = 1 # Добавляем букву в словарь и кол-ву присваиваем значение 1
    return d # Функция возвращает словарь

# Демонстрация работы функции 

f = open('text.txt', 'r') # Открываем файл (файл должен лежать в том же месте, где и программа)
d = {} # Создаем словарь
d = analysis_letters(f) # Присваиваем словарю результат работы нашей функции
l = d.values() # Получаем значения словаря (чтобы потом отсортировать их и вывести в порядке убывания 
l = list(l) # Превращаем его в список
l.sort() # Сортируем
l = list(set(l)) # Убираем одинаковые элементы
l.reverse() # Переворачиваем (т.к. нужно в порядке убывания)
for i in l: # Выводим значения: буква - кол-во, в порядке убывания
    for key in d: 
        if d[key] == i: 
            print (key, str(i).rjust(5)) # Функция rjust() выравнивает по правому краю 
f.close() # Закрываем файл

суббота, 2 января 2016 г.

Базы данных. Отношения, представления, выборки данных. Mysql.

Рассмотрим следующую задачу с базой данных.

1. Создание и заполнение отношений.


Отношение "Больничные палаты" ("Номер палаты", "Количество коек", "Отделение").
Отношение "Врачи" (идентификатор, "ФИО врача", "Отделение", "Специализация").

Отношение "Пациенты" (основное).













2. Выборка данных

Проверить, что в одной палате не лежат мужчины и женщины. Посчитать количество язвенников, поступивших в текущем году.



Список пациентов по палатам с указанием ФИО врача и диагноза:


Список количества занятых мест в каждой палате:


3. Работа с представлениями.

Представление "Специализация больницы" (диагноз, количество пациентов-мужчин, количество пациентов-женщин):


Представление "Текущие пациенты отделения “Хирургия”" (все поля отношения "Пациенты"):


Представление "Общее количество мест" (отделение, количество мест):



Всем удачи и SELECTов!
















понедельник, 20 апреля 2015 г.

Интерполяция. Многочлен Лагранжа. SAGE MATH

Рассмотрим задачу интерполяции.

Дана функция y=f(x). Приблизить f(x) на отрезке [a,b] интерполяционными многочленами Лагранжа 1, 2, 3 степеней. На одном чертеже построить графики приближающих многочленов и функции f(x). Для многочлена 3 степени сравнить качество приближения при различном выборе узлов интерполяции.

среда, 8 апреля 2015 г.

Матрица смежности. Java

Доброго времени суток!

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

вторник, 7 апреля 2015 г.

Математическая статистика. Метод максимального правдоподобия и метод моментов в Wolfram Mathematica

Доброго времени суток!

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

Математическая статистика. Смоделировать выборку в программе Wolfram Mathematica

 В задаче требуется смоделировать выборку объема n из генеральной совокупности, имеющей функцию распределения:  
 Мы воспользуемся для этого пакетом Wolfram Mathematica. Эта программа широко применяется в математических и компьютерных областях. 

 Рассмотрим распределение Пуассона (пуассоновское распределение).

суббота, 21 марта 2015 г.

Алгоритм - триангуляция многоугольника. Java




 Доброго времени суток! 

 В этой статье будут представлены один из алгоритмов решения задачи триангуляции многоугольника и его реализация на языке программирования Java

 Триангуляция многоугольника - разбиение многоугольника на несколько треугольников. Известно, что любой несамопересекающийся n-угольник может быть разбит на n - 2 треугольника проведением n - 3 хорд.