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, Супермодераторы



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

Сейчас этот форум просматривают: Geen


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

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