Поиск идей о проекте курса информатики

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

SELECT t1.*
FROM mytable t1
  LEFT OUTER JOIN mytable t2
    ON (t1.UserId = t2.UserId AND t1."Date" < t2."Date")
WHERE t2.UserId IS NULL;

, Другими словами: выберите строку от t1, где никакая другая строка не существует с тем же UserId и большая Дата.

(я поместил идентификатор "Дата" в разделители, потому что это - зарезервированное слово SQL.)

В случае, если, если t1."Date" = t2."Date", удвоение появляется. Обычно таблицы имеют auto_inc(seq) ключ, например, id. Постараться не удваиваться может использоваться, следует:

SELECT t1.*
FROM mytable t1
  LEFT OUTER JOIN mytable t2
    ON t1.UserId = t2.UserId AND ((t1."Date" < t2."Date") 
         OR (t1."Date" = t2."Date" AND t1.id < t2.id))
WHERE t2.UserId IS NULL;
<час>

комментарий Ре от @Farhan:

Вот более подробное объяснение:

внешнее объединение пытается присоединиться t1 к t2. По умолчанию все результаты t1 возвращаются, и , если существует соответствие в [1 110], оно также возвращается. Если там не идет ни в какое сравнение в [1 111] с данной строкой [1 112], то запрос все еще возвращает строку [1 113] и использует NULL в качестве заполнителя для всех из [1 115] столбцы. Это, как внешние объединения работают в целом.

прием в этом запросе должен разработать соответствие соединения условию, таким образом, что t2 должен соответствовать тот же userid, и больше date. Идея, являющаяся, если строка существует в [1 119], который имеет большее date, тогда строка в [1 121], она сравнена с [1 138], не может быть самым большим date для этого userid. Но если там не идет ни в какое сравнение - т.е. если никакая строка не существует в [1 124] с большим date, чем строка в [1 126] - мы знаем, что строка в [1 127] была строкой с самым большим date для, учитывая [1 129].

В тех случаях (когда там не будет идти ни в какое сравнение), столбцы t2 будут NULL - даже столбцы, определенные в условии объединения. Так вот почему мы используем WHERE t2.UserId IS NULL, потому что мы ищем случаи, где никакая строка не была найдена с большим date для, учитывая [1 134].

8
задан Domenic 6 July 2009 в 17:01
поделиться

14 ответов

Я закончил этот курс в прошлом семестре :)

ИМХО, лучший способ сделать это - создать оценщик выражений. создайте простейший оценщик выражений, который вы можете.

Затем добавьте эти функции в любом порядке:

1 - постоянные символы, просто заполнители для переменных. ваш оценщик должен запросить их значения после анализа выражения.

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

3 - простые управляющие операторы. 'if-else' и цикл pretest while являются простыми для рассмотрения.

4 - массивы. если вы действительно хотите, чтобы ваш вычислитель выражений действительно походил на язык программирования. Было бы интересно, если бы вы добавили в свой «язык» массивы переменных измерений. вам нужно создать общую функцию отображения для ваших массивов .

Теперь у вас есть настоящий язык программирования. Чтобы быть полезным, вы можете добавить подпрограммы. Итак, список непрерывный:

5 - подпрограммы. Это немного сложнее, чем предыдущие возможности, но это не должно быть невозможным :)

6 - создайте простую математическую библиотеку для вашего нового языка на своем языке! и это, на мой взгляд, самое интересное;)

Книга Себеста - хорошая книга для обзора известных императивных языков программирования.

2
ответ дан 5 December 2019 в 10:43
поделиться

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

0
ответ дан 5 December 2019 в 10:43
поделиться

Написание компилятора для C или Pascal, вероятно, займет у вас месяцы или годы, если вы не гуру компиляторов.

Напишите простой веб-сервер. Это будет весело и может оказаться полезным в качестве простого и бесплатного решения. Однажды я встретил парня, который сказал, что делал что-то подобное и использовал для простых сайтов клиентов. Ваш тоже может стать полезным.

-2
ответ дан 5 December 2019 в 10:43
поделиться

Интернет - это обширная область для работы с языками. Взгляните на популярный веб-фреймворк, такой как Ruby on Rails, и вы обнаружите, что большая часть его продуктивности связана с тем, что он реализует предметно-ориентированный язык , хорошо подходящий для веб-приложений. Ruby оказался хорошим языком для реализации такого языка из-за его динамической природы, но сила исходит от языка, который они создали из него.

В вашем случае, возможно, вы могли бы попробовать разработать свой собственный предметно-ориентированный язык, используя знакомый вам язык, такой как PHP, для реализации основного ядра веб-фреймворка:

  • маршрутизация URL-адресов на страницы
  • , динамическое создание страниц с использованием шаблона (и, возможно, реализация собственного синтаксиса шаблона!
0
ответ дан 5 December 2019 в 10:43
поделиться

Если вы хотите обрабатывать язык, вы можете выполнить программу UIMA. UIMA означает Архитектура управления неструктурированной информацией, он был разработан IBM стоимостью около 45 миллионов долларов и теперь доступен с открытым исходным кодом. В основном UIMA - это кодеки ascii для анализа текстовых документов на поиск закономерностей. Он предназначен для поиска вещей, в которых нет порядка (поиск иголок в стогах сена). Он использует XML и C.

0
ответ дан 5 December 2019 в 10:43
поделиться

Что-то, над чем может быть интересно поработать, - это регулярное выражение для автоматизации, использующее

  • Синтаксический анализ регулярного выражения
  • Преобразование в автомат с использованием алгоритма Глушкова
  • Генерация случайных фраз, соответствующих регулярному выражению с этим автоматом, / Проверка фраз
  • Экспорт автоматов с использованием алгоритма Глушкова, вот некоторые ключевые особенности, которые могут быть реализованы. XML

Это не очень долгое задание, поэтому вы сможете справиться с ним через несколько месяцев

0
ответ дан 5 December 2019 в 10:43
поделиться

Here's something I'd love: a PHP-based LaTeX-to-MathML translator. It wouldn't have to do everything, but if I could just cut-and-paste mathematical formulas written in valid LaTeX code into a window and have the script parse it and convert it into valid MathML, that'd be awesome.

Let me expand on this some more. The current state of scientific publishing on the web isn't great. Titles, headers, section numbers, tables, etc. can all be done in HTML, but for mathematical and chemical formulas which depend on precise two-dimensional formatting, scientific authors have only second-class options:

  • Publish their work in pdf format, which looks great but has a (comparably) huge file size and doesn't do hyperlinking well, or
  • Use something like latex-to-html, which converts formulas into .gif files (or some similar image file), which are semantically meaningless and thus doesn't lend themselves to indexing or searching.

Moreover, neither of these options allow for mathematical formulas to be generated programmatically, which would be helpful to the education community (think randomly-generated online homework).

Publishing scientific work in MathML would solve all of these issues, but it has a few of issues of its own, namely:

  1. It's really too verbose to code by hand. I mean, you can do it, but c'mon.
  2. The scientific community uses LaTeX for publishing, they're happy with it (for good reason), and they're not about to learn another mathematical markup language when they've got their own research and lesson-planning to do.
  3. Browser support for MathML is currently pretty limited. I know this, and I don't mean to stick my head in the sand about it.

In other words: scientific authors know LaTeX, they use it daily, it's the de facto standard for authoring scientific content. MathML isn't and won't ever be the way math and science is authored, but it's the only semantically rich way to put hypertext mathematics on the web. Browser support for MathML is weak because nobody uses it; nobody uses it because it's too hard to write by hand. Now, maybe this is wishful thinking, but I have to believe that if it were only easier to write MathML, more scientists and mathematicians, especially the early-adopter types, would at least try it, and this would inspire browsers (especially open-source browsers) to improve their support, which would then lead to more authors using it, etc.

Here's where the translator comes in: Until the barrier-to-entry for MathML drops, it'll never be widely adopted. A simple LaTeX-to-MathML converter would take care of that. It would reduce the barrier-to-entry for MathML to near zero. If it leads to widespread use of and better support for MathML, it would be a major benefit to the scientific and education communities.

4
ответ дан 5 December 2019 в 10:43
поделиться

Вы не должны просматривать создание реализация конкретного языка как несущественная. Наверное, каждый хочет быть известным программистом, но немногие достигают этого. Это прекрасная возможность познакомиться с очень крутыми необычными языками. (Lisp, APL и т. Д.). Если вы впервые создаете компилятор / интерпретатор, то также будет лучшим выбором использовать уже существующий язык (чтобы вы могли видеть, какие элементы дизайна необходимы для создания успешного языка. )

Важные идеи обычно возникают по необходимости. Люди начали использовать язык, потому что либо он им был нужен, либо им было намного проще выполнить задачу, которую они хотели выполнить. Не думаю, что здесь вы найдете ответ или мотивацию начать проект с нуля. При этом я всегда думал, что было бы здорово иметь язык, который использует собственный байтовый код процессора для создания динамических веб-сайтов (без использования чего-то вроде cgi).

Я всегда думал, что было бы здорово иметь язык, который использует собственный байтовый код процессора для создания динамических веб-сайтов (без использования чего-то вроде cgi).

Я всегда думал, что было бы здорово иметь язык, который использует собственный байтовый код процессора для создания динамических веб-сайтов (без использования чего-то вроде cgi).

2
ответ дан 5 December 2019 в 10:43
поделиться

Я бы отказался от PHP и MySQL для такого проекта. Обе являются коммерческими платформами, которые нарушили многие основные принципы CS, чтобы получить долю рынка и решить проблемы пользователей. Учитывая то, что вы описали, похоже, что цель этого проекта - подумать о том, как обрабатываются языки программирования. Javascript Язык (а не API браузера) может быть здесь хорошим выбором. Написание процессора / интерпретатора / компилятора для Javascript или использование самого Javascript для написания процессора / интерпретатора / компилятора для другого языка соответствовало бы критериям для назначения. Другой возможный проект - написание «минификатора» Javascript, удаляющего все ненужные пробелы (для файлов меньшего размера) при сохранении функциональности программы.

4
ответ дан 5 December 2019 в 10:43
поделиться

Вы можете попробовать создать скриптовый язык в духе nadvsh, если хотите сделать что-то интересное, но это может быть слишком далеко от того, что ваш инструктор ожидает от вас.

Новое Adventure Shell (nadvsh)

0
ответ дан 5 December 2019 в 10:43
поделиться

Как раз то, о чем я недавно подумал: напишите интерпретатор Ruby в Лиспе.

0
ответ дан 5 December 2019 в 10:43
поделиться

Хм, отлично! Возможно:

1. Интерпретатор языков в сети. например, очень простой интерпретатор ассемблера в javascript или интерпретатор C на основе PHP (скрипт PHP читает код C и выполняет его каким-то образом изолированным способом. Очевидно, что он сможет реализовать только небольшое подмножество C язык)

2. Может быть, какой-нибудь автоматизированный способ преобразования структур данных PHP (например, массивов PHP) в запросы SQL и наоборот. Подобные вещи уже были сделаны, но вы могли бы сделать что-то, что (например) принимает SQL-запрос и создает структуру данных массива, которая потребуется для «удержания» информация, возвращаемая SQL. Он может поддерживать сложные вещи, такие как JOINS и GROUP BY.

3. Может быть, компилятор C-to-PHP? (или компилятор PHP-to-C, чтобы иметь возможность запускать простой PHP-код изначально. Используйте это с любой комбинацией языков)

редактировать:

4. Может быть, парсер регулярных выражений на C. То есть что-то, что принимает регулярное выражение и генерирует код C, соответствующий этому шаблону. Или что-то, что принимает регулярное выражение и преобразует его в конечный автомат, который представляет собой «математический» перевод этого выражения. Или наоборот - что-то, что принимает автомат для CFL и генерирует для него регулярное выражение синтаксиса perl.

5. Может быть, парсер XML-to-PHP / MySQL. например, файл XML может содержать информацию о базе данных и полях, а затем ваша программа создает SQL для создания этих таблиц или код HTML / PHP для форм.

5
ответ дан 5 December 2019 в 10:43
поделиться

Почему бы не написать какой-то интерфейс, который можно было бы интерпретировать / скомпилировать до соответствующей веб-технологии по выбору пользователя?

Или что-то вроде компилятора Python в C?

0
ответ дан 5 December 2019 в 10:43
поделиться

В ответ на ваше редактирование, вот несколько латексных идей:

  1. LaTeX-to-ASCII красивый вывод, возможно, только для небольшого подмножества TeX
  2. LaTeX-to-Maple / Mathcad / Mathematica скрипт, так что уравнения можно импортировать, редактировать или решать (не знаю, существует ли это уже)
  3. Javascript-переводчик LaTeX. в основном, когда вы печатаете, он выполняет перевод из latex в html / css / .gif / что угодно, так что вы можете видеть свою математику «вживую», когда вы ее печатаете, вроде как в текстовом редакторе stackoverflow.
  4. Возможно, какой-то вид латексные макросы для выражения кода C или что-то в этом роде? Или как насчет этого: часто код C выполняет математические вычисления: " det = (b * b - 4 * a * c); det_sqrt = sqrt (det); etc " Как насчет того, что принимает C ( или java или что-то еще), который выполняет серию арифметических присваиваний, и преобразует его в хорошо отформатированный латексный список уравнений, понятных человеку (например, блок \ begin {eqnarray} )
  5. Или что-то противоположное: возьмите список латексных вычислений или уравнения, и генерирует код C, который объявляет необходимые переменные, получает требуемый ввод пользователя и выполняет вычисления, перечисленные в вашем латексе?
1
ответ дан 5 December 2019 в 10:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: