2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему На страницу Пред.  1, 2, 3, 4, 5, 6, 7  След.
 
 
Сообщение12.12.2005, 00:34 
Заслуженный участник
Аватара пользователя


12/10/05
478
Казань
Немного жаль, что к моим излияниям никто интереса не проявил и ничего не ответил (за 2 недели)... Похоже, у народа к данной теме интерес исчерпался...

 Профиль  
                  
 
 
Сообщение12.12.2005, 01:55 
Заслуженный участник
Аватара пользователя


17/10/05
3709
:evil:
Я просто не писал, зная, что Вас нет.

 Профиль  
                  
 
 
Сообщение12.12.2005, 19:59 
Заслуженный участник
Аватара пользователя


12/10/05
478
Казань
И еще... К тому списку процедур я бы добавил:
1) Процедуру создания БД (с указанием кол-ва полей)
2) Процедуру реконфигурации БД (добавление/удаление полей)

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

Ну, полно можно всего напридумывать... :)

 Профиль  
                  
 
 
Сообщение13.12.2005, 00:20 
Заслуженный участник


28/10/05
1368
Вы знаете, ребята. До меня сегодня наконец-то дошли отзывы о программе, которую "я" делала (ту, что я написала, незванный гость исправил и потом я доделала). Оценок, конечно, не ставили, но сказали вскользь, что это на 18 из 20. Что было не так - мне не известно. Программисты все со своими тараканами...:(

 Профиль  
                  
 
 ДОКАРКАЛАСЬ
Сообщение13.12.2005, 02:10 
Заслуженный участник


28/10/05
1368
Цель работы - написать небольшую программку матричного исчисления matprog. Дальше опишу её функции.
При запуске она должна показывать меню со следующими опциями.

Код:
$ matprog

Show matrixes.........1
Show matrix...........2
Remove matrix.........3
New arbitrary matrix..4
Transpose.............5
Sum...................6
Exit..................x
>


Изначально никакая матрица не определена. Опция 4 меню позволяет определять новые матрицы, заполненные произвольными числами между 0 и 1. Программа должна запрашивать "размерности" матрицы и имя соответствующей переменной:

Код:
Show matrixes.........1
Show matrix...........2
Remove matrix.........3
New arbitrary matrix..4
Transpose.............5
Sum...................6
Exit..................x
> 4
What are the dimensions of the matrix?
(number of lines and columns separated by a space)
> 3 4
indicate the name of variable:
> A


Программа должна содержать т.о. созданные матрицы в списке. Опция 1 показывает имена созданных переменных и соответствующие размерности:

Код:
> 1
A(3x4)
Show matrixes.........1
Show matrix...........2
Remove matrix.........3
New arbitrary matrix..4
Transpose.............5
Sum...................6
Exit..................x
>


Опция 2 показывает элементы матрицы:

Код:
> 2
indicate the name of variable:
> A
A:
3 x 4
  0.0000   0.0010   0.0416   0.1766
  0.3646   0.0913   0.0923   0.4872
  0.5268   0.4544   0.2332   0.8313


Когда программа завершается, переменные автоматически сохраняются в файле
matrizes.dat (желательно именно так и обозвать). Когда программа запускается в следующий раз, переменные файла автоматически располагаются в списке переменных и выдаются имена на экране:

Код:
$ matprog
A(3x4) 
Show matrixes.........1
Show matrix...........2
Remove matrix.........3
New arbitrary matrix..4
Transpose.............5
Sum...................6
Exit..................x


Опция 5 вычисляет транспонированную матрицу и располагает результат в новую переменную. Программа должна запрашивать имя матрицы, которую необходимо транспонировать и имя матрицы, в которую располагать результат:

Код:
> 5
indicate the name of variable:
> A
indicate the name of variable for the result:
> At

Show matrixes.........1
Show matrix...........2
Remove matrix.........3
New arbitrary matrix..4
Transpose.............5
Sum...................6
Exit..................x
> 1
A(3x4) At(4x3)
Show matrixes.........1
Show matrix...........2
Remove matrix.........3
New arbitrary matrix..4
Transpose.............5
Sum...................6
Exit..................x
> 2
indicate the name of variable:
> At
At:
4 x 3
  0.0000   0.3646   0.5268
  0.0010   0.0913   0.4544
  0.0416   0.0923   0.2332
  0.1766   0.4872   0.8313


Cоздание новой произвольной матрицы:

Код:
> 4
What are the dimensions of the matrix?
(number of lines and columns separated by a space)
> 3 4
indicate the name of variable:
> B

Show matrixes.........1
Show matrix...........2
Remove matrix.........3
New arbitrary matrix..4
Transpose.............5
Sum...................6
Exit..................x
> 1
A(3x4) At(4x3) B(3x4)
Show matrixes.........1
Show matrix...........2
Remove matrix.........3
New arbitrary matrix..4
Transpose.............5
Sum...................6
Exit..................x
> 2
indicate the name of variable:
> B
B:
3 x 4
  0.0000   0.0010   0.0416   0.1766
  0.3646   0.0913   0.0923   0.4872
  0.5268   0.4544   0.2332   0.8313


Mатрица В равна матрице А, потому что генератор произвольных чисел не был инициализован.

Опция 6 считает сумму двух матриц. Программа запрашивает у пользователя имена двух матриц и имя для результирующей матрицы:

Код:
> 6
indicate the name of variable: (1st operated):
> A
indicate the name of variable: (2nd operated):
> B
indicate the name of variable for the result:
> A+B

Show matrixes.........1
Show matrix...........2
Remove matrix.........3
New arbitrary matrix..4
Transpose.............5
Sum...................6
Exit..................x
> 1
A(3x4) At(4x3) B(3x4) A+B(3x4)
Show matrixes.........1
Show matrix...........2
Remove matrix.........3
New arbitrary matrix..4
Transpose.............5
Sum...................6
Exit..................x
> 2
indicate the name of variable:
> A+B
A+B:
3 x 4
  0.0000   0.0020   0.0833   0.3533
  0.7292   0.1827   0.1846   0.9744
  1.0535   0.9089   0.4664   1.6626


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

Код:
$ matprog
A(3x4) At(4x3) B(3x4) A+B(3x4)
Show matrixes.........1
Show matrix...........2
Remove matrix.........3
New arbitrary matrix..4
Transpose.............5
Sum...................6
Exit..................x
> 6
indicate the name of variable: (1st operated):
> A+B
indicate the name of variable: (2nd operated):
> A
indicate the name of variable for the result:
> A+B+A

Show matrixes.........1
Show matrix...........2
Remove matrix.........3
New arbitrary matrix..4
Transpose.............5
Sum...................6
Exit..................x
> 1
A(3x4) At(4x3) B(3x4) A+B(3x4) A+B+A(3x4)


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

Код:
$ matprog
A(3x4) At(4x3) B(3x4) A+B(3x4) A+B+A(3x4)
Show matrixes.........1
Show matrix...........2
Remove matrix.........3
New arbitrary matrix..4
Transpose.............5
Sum...................6
Exit..................x
> 3
indicate the name of variable:
> At
remove var: At(4x3)
Show matrixes.........1
Show matrix...........2
Remove matrix.........3
New arbitrary matrix..4
Transpose.............5
Sum...................6
Exit..................x
> 1
A(3x4) B(3x4) A+B(3x4) A+B+A(3x4)
Show matrixes.........1
Show matrix...........2
Remove matrix.........3
New arbitrary matrix..4
Transpose.............5
Sum...................6
Exit..................x
> 3
indicate the name of variable:
> A+B+A
remove var: A+B+A(3x4)
Show matrixes.........1
Show matrix...........2
Remove matrix.........3
New arbitrary matrix..4
Transpose.............5
Sum...................6
Exit..................x
> 1
A(3x4) B(3x4) A+B(3x4)


Еще посоветовали использовать короткие функции (вмещается на экране от начала и до конца, т.е. не должна превышать порядка 20 строк без учета комментариев), потому что они удобочитаемы, а кто-то это будет еще и читать...
Поделить функции надвое: 1. Функции, которые функционируют верно. Для этого необходимо написать главную функцию, которая проверяет, что все в порядке. 2. Функции еще не протестированные. Эта подгруппа не может содержать более двух функций (!). Это требование абсолютно...

Понимаю, можно сделать и по-человечески, но эти требования, сказали, для обучения...(Позже можно будет привести в божеский вид.)

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

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

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

 Профиль  
                  
 
 
Сообщение13.12.2005, 08:32 
Заслуженный участник
Аватара пользователя


12/10/05
478
Казань
Вот это не совсем понятно:

Цитата:
Поделить функции надвое: 1. Функции, которые функционируют верно. Для этого необходимо написать главную функцию, которая проверяет, что все в порядке. 2. Функции еще не протестированные. Эта подгруппа не может содержать более двух функций (!). Это требование абсолютно...


То есть, по мимо основной проги, нужно написать какую-то тестовую, которая будет проверять работоспособность всех функций (кроме каких-то двух). Так что ли?

 Профиль  
                  
 
 Re: ДОКАРКАЛАСЬ
Сообщение13.12.2005, 08:57 
Заслуженный участник
Аватара пользователя


17/10/05
3709
:evil:
LynxGAV писал(а):
Еще посоветовали использовать короткие функции (вмещается на экране от начала и до конца, т.е. не должна превышать порядка 20 строк без учета комментариев), потому что они удобочитаемы, а кто-то это будет еще и читать...
Поделить функции надвое: 1. Функции, которые функционируют верно. Для этого необходимо написать главную функцию, которая проверяет, что все в порядке. 2. Функции еще не протестированные. Эта подгруппа не может содержать более двух функций (!). Это требование абсолютно...

Понимаю, можно сделать и по-человечески, но эти требования, сказали, для обучения...(Позже можно будет привести в божеский вид.)

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


у-у-у-у-у-у. Кто-то пытается (весьма неуклюже) учить Вас методологии программирования! Надо же - такое встречается. А я-то думал, все учат только языкам да алгоритмам. А про читать - этот плагиатор эту тему начитался и теперь выдает.

Серьезно - это какие-то элементы Extreme Programming, в просторечье XP (термин прижился задолго до узурпации MS). Защищать программу на входе - это, конечно, тоже хорошо. А размер функции - это что-то гибкое. У меня обычно на экране строк 50, а размер нормальной функции ~ 10. На функции все-таки надо дробить функционально, а не "экранно".

Количество нетестированных функций - сие есть динамическое состояние разработки программы. Идея в том, чтобы писать и тестировать функции по одной, а не выталкивать 30000 строк кода, и потом мучительно чесать репу - а где же проблема. Я обычно начинаю с
void main(int argc, char** argv) {
}

и в этой фазе пытаюсь скомпилировать и исполнить. Иногда получается. Это и есть по человечекси. Настучать всю программу целиком - уж извините, по ламерски.

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

 Профиль  
                  
 
 
Сообщение13.12.2005, 09:43 
Заслуженный участник
Аватара пользователя


17/10/05
3709
:evil:
Знаете что, господа? Такие задачи все-таки надо решать на C++. Может попробовать попросить (до предела вежливо, не пуская в ход паяльников, АК-74 и серной кислоты - а то обвинят в пропаганде секса и насилия) объяснений - какого хрена надо объекты выписывать в C? Это, конечно, возможно, но является задачей весьма искусственной и мало чему учит. Можно еще на ассемблере пописать. Я могу по старинке команды понабирать в шестнадцатеричном редакторе. Но зачем? Quo vadis, Domine? или точнее, Quo ductum praestet?

 Профиль  
                  
 
 
Сообщение13.12.2005, 09:54 
Заслуженный участник
Аватара пользователя


12/10/05
478
Казань
Мне кажется, эта задача легко и на C решается. Во всяком случае, мне она кажется даже проще предыдущей, поскольку меньше всяких неясностей. Например, там (в пред. задачи) возникали вопросы - сохранять порядок сортировки после всяких операций или нет? И если да - то как быть при редактировании какого-то поля? Опять проводить сортировку, что бы сохранить порядок? А ежели ее проводить - то тем же qsort или иначе (иначе - гораздо быстрей, поскольку мы знаем, что как отсортировано, просто элементы переставить надо).

В новой задаче вопросов никаких нет... На первый взгляд... :)

 Профиль  
                  
 
 
Сообщение13.12.2005, 09:59 
Заслуженный участник
Аватара пользователя


12/10/05
478
Казань
Sorry за оффтоп, но не смог удержаться... :)

Цитата:
Может попробовать попросить (до предела вежливо, не пуская в ход паяльников, АК-74 и серной кислоты - а то обвинят в пропаганде секса и насилия)


Хотел спросить: как связаны паяльники , АК-74 и серная кислота с сексом? :)

 Профиль  
                  
 
 
Сообщение13.12.2005, 10:20 
Заслуженный участник
Аватара пользователя


17/10/05
3709
:evil:
"Их поколенье выбирает лимонад". Пропаганда секса и насилия, а также культ оных - сие есмь штамп дней минуших, старины глубокой, когда полужили полумифические герои вроде Леонида Застойного (и как тут ни вспомнить Микояна - от Ильича до Ильича без паралича).

А про задачу - да можно. Но вот на таких задачах самый смак учить выделению объектов и правильному разбиению. Смотрите - есть и контейнеры - где-то же нужно переменные держать, и сериализация - для чтеиня/записи файла, и многое другое. Пока просто. "Ну, а колдоству, как известно, стоит только начаться, а там уж его ничем не остановишь." Можно, например, сделать объект значение, которое может быть матрицей или скаляром. Переменная может иметь любое значение из многих...

 Профиль  
                  
 
 
Сообщение13.12.2005, 10:32 
Заслуженный участник
Аватара пользователя


12/10/05
478
Казань
Можете поподробней и попроще про сериализацию? Часто встречаю, но никак не пойму, что под этим подразумевают...

 Профиль  
                  
 
 
Сообщение13.12.2005, 10:45 
Заслуженный участник
Аватара пользователя


17/10/05
3709
:evil:
Я так понимаю, что объект - суть образование структурное, может включать в себя другие объекты, явки, пароли, условные знаки. Иногда надо это все передать через какой нибудь последовательный канал. Примеры - записать в файл, переслать сообщением (например, в другой процесс, иногда и на другом компе), и т.д. В общем случае носитель (файл, канал передачи) нагружать знанием о передаче объекта неумно. Гораздо проще определить у объекта операции записать в поток и прочитать из потока. В этом случае, мы разделяем механику передачи от преобразования объекта в удобную для передачи форму. Сие преобразование и известно как сериализация.

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

Это - то, как я понимаю. Не верьте мне слишком сильно; да и никому не верьте, ибо те, кто говорят "верьте мне", превыми же и кинут.

 Профиль  
                  
 
 
Сообщение13.12.2005, 10:58 
Заслуженный участник
Аватара пользователя


17/10/05
3709
:evil:
На коленке пример сериализации первого рода:
Код:
struct Object {
  int x, y; // persistent attributes
  float z;  // trancient attributes

  ...
  void toStream(Stream s) {
    s << "<Object x="""  << x << """ y= """ <<y """>";
  }
  ...
};


Не ловите меня на очевидных ошибках. Ловите на неочевидных.

 Профиль  
                  
 
 
Сообщение13.12.2005, 11:42 
Заслуженный участник
Аватара пользователя


12/10/05
478
Казань
На очевидных проще... :) И еще... Сдается мне: то, что для одного "очевидно" - может быть совсем не очевидно для другого. И дело не в том, что второй туупее первого - просто у них образ мышления разный.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 105 ]  На страницу Пред.  1, 2, 3, 4, 5, 6, 7  След.

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group