Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Решил поучиться программированию. С чего начать?

Автор: XPEHOMETP
Дата сообщения: 13.08.2007 23:17
spreak
Для начала я бы советовал определиться с книжками, а потом искать соответствующий пакет. Поскольку потом проще будет с написанным в книжках разбираться. В принципе, вроде наиболее популярным является MASM, но, например, Пирогов в своих книжках опирается на TASM, хотя и говорит, что лучший все же NASM. Может он и лучший, но инфы по нему найти довольно сложно. А книжки - это в соответствующий раздел форума, eBookz
Автор: dmka
Дата сообщения: 14.08.2007 00:15
spreak
NASM
http://sourceforge.net/projects/nasm

MASM (также идет в комплекте с M$ Visual Studio)
http://www.microsoft.com

Книжки особо читать не стоит, в сети есть ресурсы гораздо интереснее.

Ну и мануалы к процессорам рулят:
http://www.intel.com/products/processor/manuals/index.htm
http://developer.amd.com/devguides.jsp

P.S. borland suxx
Автор: cosmosliva
Дата сообщения: 10.09.2007 20:43
Добрый день

только начинаю и поэтому прошу помочь разобраться
как грамотно работать со списками объектов?

Задача:
создаю объект
в конструкторе этого объекта
добавляю его в список
далее уже в конструкторе списка еще в один список

дак вот насколько правильно такие действия

есть сомнения(вопросы):
1. может надо наоборот с наружнего списка - опускаться вниз к объекту
1.а) без особой разницы что вниз что вверх идти
2. или поменять структуру объектов и их связи со списком

к примеру:
имеем базовый класс: А
от него дочки: B
класс списка: С
класс списка2: D

создаем объекты класса В
помещаем в список С как объекты типа А
далее помещаем в список D объекты С

С уважением!
Автор: Mickey_from_nsk
Дата сообщения: 11.09.2007 06:26
cosmosliva
Чего-то я не уверен, что заносить себя в список в конструкторе - хороший тон. Конструктор - он по определению для КОНСТРУИРОВАНИЯ объекта. Создай объект, потом уже заноси его в список. Иначе - какая-нибудь кака с памятью или еще откуда исключение вылезет, так у тебя объект полусозданным и останется.
Автор: cosmosliva
Дата сообщения: 11.09.2007 11:43
Mickey_from_nsk
вот и у меня сомнения закрались

а по восходящей думал удти
потому что на первый взгляд наглядно показалось
создаем объект - один раз програмируем что он сразу заноситься и/или добавляется в соответствующий список
Автор: Qraizer
Дата сообщения: 11.09.2007 13:30
cosmosliva
Цитата:
создаем объект - один раз програмируем что он сразу заноситься и/или добавляется в соответствующий список
Это хорошо, что закрались. Значит проектирование неосознанно, но тем не менее тобою учитывается. Многие не достаточно ещё опытные программисты считают, что главное - это рабочий код, а его архитектура - дело вторичное. Mickey_from_nsk правильно говорит. От конструктора требуется создать работоспособный объект. Не более, чем. Всё остальное не его задача. Когда создаётся объект, изначально его сторадж заполнен мусором (исключая глобальные объекты, но это частность и наследие C). Поэтому никакие методы ручные методы не смогут абсолютно достоверно определить, был ли этот объект инициализирован. И только конструкторы, которые вызываются автоматически, гарантируют, что объект был инициализирован. И именно поэтому конструкторы никогда не имеют права не выполнить свою задачу. Единстенный способ сообщить о неуспехе - исключение, в результате которого несконструированным объектом невозможно будет воспользоваться. Возлагать бОльшие задачи на конструктор, как и позволить конструктору недоконструировать объект, будет серьёзной ошибкой проектирования.
Экономить на количестве действий можно, но это часто чревато. Один из главных принципов "безопасного" пограммирования "каждый метод и каждая функция должны решать ровно одну задачу". Тогда при невозможности выполнить эту свою задачу можно будет без проблем откатить все изменения перед возвратом управления. В твоём случае объединить два действия в одно можно, если предположить, что создаваемый объект не живёт сам по себе, а находится под во владении у списка. Тогда имеет смысл просто предусмотреть метод у списка, который будет сам создавать объект и в случае успеха включать себе в коллекцию. К примеру:
Код: class List;
class Node
{
Node* next;
Node* prev;

Node(int, float, const char*);

friend class List;
/* ... */

public:
/* ... */
};

class List
{
Node* head;
Node* tail;
/* ... */

public:
bool newItem(Node* here, int i, float f, const char* str)
{
Node* tmp(i, f, str);

tmp->prev = here;
tmp->next = here->next;
here->next = tmp;
tmp->next->prev = tmp;
}
};
Автор: cosmosliva
Дата сообщения: 13.09.2007 15:16
Добрый день
Qraizer
Спасибо за советы
Твой код не совсем нагляден для меня тк занимаюсь С#
(да еще и с указателями (если правильно перевел знак *)- которые так настойчиво рекомендуют избегать в книгах по С#)

но по сути предполагается идти последовательно
создали объект поместили в список
соответственно:
1. создаем объект
2. создаем список
3. через ссылку на объект передаем в метод списка

но тогда возникают следующие вопросы
как правильно организовать:
1. если необходимо 2ая 3ая вложенность (повторять шаги 2-3)
2. при необходимости еще большей абстракции - создаем еще более верхний уровень, к примеру в следующей версии, и опять повторяем шаги 2-3
3. есть необходимость организовать проверку данных и в зависимости от этого помещать объект или в уже существующий список или в новый список
соответственно нужная некая единая цепочка действий (срабатываний) - один раз прописанная
- я понимаю что это и называется алгоритм действия программы

наверное самым разумным будет
создать класс - Управленец - пусть занимается логикой

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

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

и тогда вопрос
есть ли разница (пока не видимая мною)
создавать иерархию снизу вверх или сверху вниз
разумеется с учетом выше сказанных замечаний Mickey_from_nsk и Qraizer
Автор: Mickey_from_nsk
Дата сообщения: 14.09.2007 06:31
cosmosliva
Есть ощущение, что ты слегонца перемудрил.
Если надо занести объект в список, то разницы, когда создавать список, а когда объект нет никакой. Обычно в задачах к моменту создания объекта список уже существует.

Если пишешь на C#, у него есть уже списки, как в виде класса- System.Collections.List, так и в виде дженерика System.Collections.Generics.List<>.

Соответственно у них есть методы Add и Insert.
Таким образом - вставляй объект в список куда тебе угодно.

Если хочешь список списков - создай сначала его, потом поочереди вставь в него объект.

Сверху вниз или снизу вверх создавать иерархию - по барабану. Единственное но. Опять же в большинстве задач при вставке элемента (объекта или списка), список уже должен существовать. Поэтому, не парь голову. Если охота помучиться над этим вопросом - посмотри что эстетичнее выглядит . С точки зрения менеджера памяти - все равно.
Автор: cosmosliva
Дата сообщения: 15.09.2007 11:19
Mickey_from_nsk
Спасибо
наверное точно перемудриваю

в голове просто не все устаканилось

а можно поподробнее про
дженерик System.Collections.Generics.List()
что за зверь
в чем +-

С уважением!
Автор: Mickey_from_nsk
Дата сообщения: 17.09.2007 06:56
cosmosliva
Вопросы у вас, батенька.

Во первых строках вот вам ссылка http://msdn2.microsoft.com/en-us/library/6sh2ey19.aspx
Читайте, доходчиво написано.

Если с английским туго, на пальцах попробую.

Дженерик (generic) List (я там немного в пространствах имен напутал - System.Collections.Generic.List) предназначен для реализации _типизированных_ динамических массивов, в отличие от ArrayList, в котором элементы массива - ссылки на Object. Соответственно, List дает все вкусности типизированных массивов. Если не ошибаюсь, это аналог std::vector<> для С++.

А плюсы и минусы надо искать по сравнению с чем-нибудь. Напиши, что знаешь, сравню, если хочешь.
Автор: Nexandr
Дата сообщения: 29.09.2007 09:41
Посоветйте актуальный учебник по С. Начал изучать С по Учебнику "Керниган, Ричи Язык C".
Я люблю такие учебники там сразу разбирают готовые примеры а не маются с теорией. Но проблема заключается в том что что бы заработал 1ый пример нужно его дополнить void main(), а второй пример вообще не работает. Для компиляции использую MVS(хоть как то выполняется) и gcc. Или посоветутйе компилятор подходящий для этой книги. Спасибо
Автор: virpool
Дата сообщения: 29.09.2007 09:48
Nexandr
Джесс Либерти "С++ за 21 день. 3 изд."
Хорошая книга, правда ее за 21 день не изучишь . Ее кстати у нас в универе советуют. Довольно понятно, доходчиво написано и с массой примеров.
Компилятор для этой книги любой.
Автор: Mr Nobody
Дата сообщения: 29.09.2007 12:59
Nexandr
Для книги Керниган, Ритчи, "Язык C" подходит любой компилятор языка Си.

Цитата:
Но проблема заключается в том что что бы заработал 1ый пример нужно его дополнить void main(), а второй пример вообще не работает.

Я посмотрел первый пример в своей книге. Запишите его так

Цитата:

#include <stdio.h>

int main()
{
printf("Hello, World!\n");

return 0;
}

Все будет работать!

Минимальная программа на Си

Цитата:

#include <stdio.h>

int main()
{
......

return 0;
}

Добаляйте вместо многоточия и до оператора return 0 свои операторы и все будет в порядке.



Автор: topotuno
Дата сообщения: 29.09.2007 13:11
Книгу лучше в бумажном виде под рукой иметь.
+ http://community.i-rs.ru/index.php/topic,5853.0.html
Кто знает как MS VC 6.0 SE запускать от ограниченного пользователя. (а то не компилирует error swaping cl.exe )

Автор: The82dDisciple
Дата сообщения: 14.10.2007 17:39
Нужно научиться программированию если возможно то на примере создания словарей (Лингво).
Хочу спрограмировать свой словарь!
Какую литературу актуально сейчас читать?
На каком языке большинство словарей создаються?
И с каким языком надо и лучше?
Кокой язык: С, С++, С# или Java???
Как осуществить поддержку нескольких операционных систем?


Автор: Mr Nobody
Дата сообщения: 15.10.2007 08:42
The82dDisciple. парень, ты силен. Ну а теперь, если можно, все по простому. Я ничего не понял, что ты хотел сказать.
Автор: dneprcomp
Дата сообщения: 15.10.2007 08:51
The82dDisciple
Отредактируй свой пост пожалуйста. Ты один занял всю страницу своими повторениями. И столько пустых строк тоже как то не помогают понять тебя.
Автор: Dem_anywhere
Дата сообщения: 15.10.2007 11:44
The82dDisciple
Если на данный момент нихрена не знаешь - то нужно начинать с чего-то простого.
Соответственно нужен нормальный простой IDE.
Ну а программить из перечисленного проще на С# или Java.

Автор: The82dDisciple
Дата сообщения: 15.10.2007 15:16
А нужно ли мне для моей цели начинать с С затем С++ для и только потом С#?
Хотя бы для понимания процессов в С# ООП ?
Или для моих целей С и С++ уже никогда не понадобятся?
Я правильно Вас понял - смело начинать с С#?
Автор: dneprcomp
Дата сообщения: 15.10.2007 19:45
The82dDisciple

Цитата:
Какую литературу актуально сейчас читать?
Самая актуальная - help. Научишься работать с хелпом, считай 90% литературы освоил.

Цитата:
На каком языке большинство словарей создаються?
Для тебя это не главное. Програму можно писать на любом языке.Для тебя сейчас легкость освоения на первом месте. Поэтому действительно С# или VB.Net, что на самом деле примерно одно и тоже по освоению.
Цитата:
Как осуществить поддержку нескольких операционных систем?
Тоже пока не стоит зацикливаться на этом. Когда сделаешь програму для одного, тогда и будешь разбираться. Тебе надо основы получить.
Цитата:
Или для моих целей С и С++ уже никогда не понадобятся?
Никогда слишком сильно сказано. В ближайшем и не столь отдаленном будущем точно не понадобятся.
Автор: The82dDisciple
Дата сообщения: 16.10.2007 07:13
Спасибо за Вашу помощь!
Лёд тронулся!
Самое главное теперь не сдаваться!
Автор: Mr Nobody
Дата сообщения: 16.10.2007 08:39

Цитата:
Или для моих целей С и С++ уже никогда не понадобятся?
Я правильно Вас понял - смело начинать с С#?

Если вы можете понять и усвоить указатели(pointers) то для вас С/С++! Если нет, то у вас нет выбора и вам надо в С# или Java.
Автор: Dem_anywhere
Дата сообщения: 16.10.2007 12:33
Дело не в "может", дело в "нужно ли".
Всё-таки то, что отличает указатели от того, что в С#, требуется достаточно редко.
Автор: Mr Nobody
Дата сообщения: 16.10.2007 19:09
Dem_anywhere

Цитата:
Дело не в "может", дело в "нужно ли".

Все 100% нужны. Именно чем и отличает Си отвсех других языком, это прямая работа с памятью. Понимаешь, что делаешь, значит работаешь Си. Многие не монимают.
Автор: dneprcomp
Дата сообщения: 16.10.2007 19:42
Mr Nobody

Цитата:
Все 100% нужны.
Зачем!? Зачем это надо, да еще и 100%? Все зависит от области применения. Зачем новичку учить то, что он применять не будет? Хуже того, не поймет сразу и завязнет.
Автор: Mr Nobody
Дата сообщения: 17.10.2007 07:38
dneprcomp

Цитата:
Хуже того, не поймет сразу и завязнет.

Как мне показал опыт обучения, именно обучения, а не преподования, показали, что если обучаемый почти с самого начала не понял указатели, то он и не поймет. Изначально Си разрабатывался как системный язык для программирования аппаратуры. Мой совет человеку заключается в том, что если ты не можешь выучить Си, то и не учи его и не мучайся. Есть C# и Java.
Автор: dneprcomp
Дата сообщения: 17.10.2007 08:30
Mr Nobody

Цитата:
Мой совет человеку заключается в том, что если ты не можешь выучить Си, то и не учи его и не мучайся
Это то верно. Но зачем вообще новичку начинать изучать С? Ну никакого смысла не вижу. И, собственно, C++ тоже не нужен.

Автор: Mr Nobody
Дата сообщения: 17.10.2007 10:33
dneprcomp
Вот, например, почти везде в мире, студентов технмических специальностей заставляют почему то учить Си, да еще и С++. Вот моя дочка. которая училась на инженера-химика, учила Си. Конечно, все задания я ей и её подругам сделал. Она его сдала и забыла. Потом я её научил MatLab и Maple. Это её вполне устраивает. Языки С/С++ дожны учить студенты компьютерных специальностей.
Автор: Dem_anywhere
Дата сообщения: 17.10.2007 15:08
Преподаватели заставляют учить то, чему их научили при их учёбе.
Некоторые особо "продвинутые" до сих пор паскаль для дос преподают...

А для современных приложений прямая работа с памятью не нужна.
а *ptr++ от ptr[i++] отличается мало.
да, кстати, в C# поинтеры вполне есть, достаточно из сейфа вылезти
Автор: dneprcomp
Дата сообщения: 17.10.2007 20:37
Mr Nobody
Не смешивай многолетнее академическое образование с само-обучением.

Страницы: 123456789101112131415

Предыдущая тема: Проблема в С++ Builderе


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.