Вопрос про си |
Вопрос про си |
Alex |
19.05.2003 14:42
Сообщение
#21
|
Бывалый Группа: Пользователи Сообщений: 201 Репутация: 0 |
Цитата Диалект Си сплошное изврашение, особо после Паскаля. Ничего, можно привыкнуть!! Цитата A3. div и mod тут вообще элементарно. div - это "/", mod - это "%" вот и все. Пример: 20/3 = 6, 20%3 = 2. И ни какого math.h не надо. То же самое в C#. Точно так же и на Перле. А как же тогда деление не нацело!! Вопрос: Раскажи про указатели их использование и на кой они нужны, динамическую память и использование ее для массива произвольной размерности(в пределах 64 kb). А то эту темц я не очень провариваю! |
Deny |
19.05.2003 16:24
Сообщение
#22
|
Пионер Группа: Пользователи Сообщений: 149 Репутация: 1 |
Цитата Диалект Си сплошное изврашение, особо после Паскаля. Pascal+Asm=Rulez. А ты у нас типа знаток всех диалектов, всех языков.... вот и пиши все на Паскале, ты на нем наверное и разговариваешь... ??? Не хочешь учить - не надо, тебя ни кто не заставляет. >:( Ты бы не позорился своими заявлениями, до того как сам разберешся, да же написать правельно не смог, Си - это язык, а не диалект. Любой язык+Asm=Rulez. Добавлено позже: Цитата Q4: А как же тогда деление не нацело!! Q5: Раскажи про указатели их использование и на кой они нужны, Q6: динамическую память и использование ее для массива произвольной размерности(в пределах 64 kb). А то эту темц я не очень провариваю! A4: Тут все еще проще, если в операции учавствует число не типа int, то и результат будет не типа int. A5: Указатель - это особый тип переменной, он содержит адрес какой-то переменной обычного типа. Создается он например так: int *ukazatel; звездочка обозначает, что переменная ukazatel является типом "указатель", а int, что она будет указывать на переменную типа int. Допустим, у нас есть переменная peremennay типа int: int peremennay; со значением 123, peremennay = 123; зделаем так, что бы наш указатель указал на нее, для этого есть операция "&" ukazatel = &peremennay; если теперь мы посмотрим на значение нашего указателя, то оно будет похожим на подобие этого, 0x0012FE20 это число на самом деле не число (результат абстракции), а адрес в памяти, где лежит начало переменной на которую мы указываем. Теперь мы можем обратиться к нашему числу 123 двумя способами. Так peremennay -= 23; или так *ukazatel -= 23; все с то же зведочкой, в обоих случаях наша переменная будет содержать число 100. С помощью указателей можно создать безымянную/динамическую переменную, для этого есть операция new, int *uk; uk = new int; к стате можно писать сразу так int *uk = new int; теперь указатель uk указывает (содержит адрес памяти где начало) на переменную типа int не имеющию названия/имени. Для того, что бы освободить память (вернуть в кучу) от не нужной нам больше переменной, есть операция delete, например delete uk Так как переменные различних типов и тем более целые структуры занимают по нескольку (теоритически сколько угодно много) ячеек памяти, то представте сколько займет времени у процессора, что бы к примеру передать какую либо большую структуру/переменную в какую-то функцию, да еще и получить обратно новое значение. Если функция работает один раз, то это еще ничго, а если 10....100 тысяч раз? Как выход из положения и существуют указатели, они каротки, и в функции передаются значительно быстрей,т.к. содержат только адреса начал нужных структур/переменных, а не непосредственно грамоздкие структуры/переменные. Переменные обозначающие обычные массивы отличаются тем, что они всегда являются указателями на первый элемент данного массива. Динамические массивы создаются точно так же: int *arr = new int[100]; создали указатель на переменную типа int и присвоили ему значение адреса первого элемента из 100 элементов типа int. Для того, что бы освободить память используется таже операция delete, но теперь со скобками, что обозначает, что мы хотим удалить весь массив, а не, только первый элемент, delete [] arr; При создании динамических переменных или массивов, в случаи нехватки памяти, указатель будет содержать предопределенную константу NULL. Над указателями можно проводить арифметические операции, например: double *arr = new double[20]; значением arr будет адрес в памяти, например 0x0012FE31 указывающий на первый элемент массива, т.е. arr[0], после операции arr + 1 или, что то же самое arr++, arr будет указывать на следующий элемент массива arr[1], но адрес будет другим, 0x0012FE39, т.к. эти операции не просто тупо увеличивают адрес на единицу, а в зависимости от типа значений массива на нужное число байт. Размерность массива может быть любой, т.к. мы работаем с указателями. |
mj |
19.05.2003 23:20
Сообщение
#23
|
Adminь Группа: Администраторы Сообщений: 803 Пол: Мужской Реальное имя: Евгений Репутация: 5 |
уроки очень даже интересны ;)
С одной стороны Си конечно черезчур изварёшь своими упрощениями, а с другой стороны это же удобно Но самый крутой-простой это PHP, Perl тоже крут, но упрощён/извращён в 100 больше чем Си... |
Alesha_GA |
20.05.2003 0:00
Сообщение
#24
|
Пионер Группа: Пользователи Сообщений: 56 Пол: Мужской Репутация: 0 |
Цитата А ты у нас типа знаток всех диалектов, всех языков.... вот и пиши все на Паскале, ты на нем наверное и разговариваешь... ??? Не хочешь учить - не надо, тебя ни кто не заставляет. >:( Си то я учу, но пишу на Pas'е. Цитата Ты бы не позорился своими заявлениями, до того как сам разберешся, да же написать правельно не смог, Си - это язык, а не диалект. Имелся ввиду диалект языка Си. Поэтому ошибки нет. -------------------- Deleting...
All RESET [Return] |
Dark |
20.05.2003 1:25
Сообщение
#25
|
Знаток Группа: Пользователи Сообщений: 408 Пол: Мужской Репутация: 3 |
Т.е получается, что в h файле моно получить ве исходники процедур ??? : : :
Добавлено (через 5 минут): Мне дано: вводятся два числа, шеснац. и десят. перевести десят. в шесн а шесн. в двоичное... как это сделать? -------------------- - Где я?
- Во тьме. - В какой тьме? - Во тьме твоего мозга. |
Deny |
20.05.2003 3:14
Сообщение
#26
|
Пионер Группа: Пользователи Сообщений: 149 Репутация: 1 |
Цитата Т.е получается, что в h файле моно получить ве исходники процедур ??? : : : В h файле лежат прототипы функций, структуры, константы, задаются новые типы данных, подключаются другие h файлы (каскадом) - зделано это для того, что бы: представь, что у нас есть исходник какой-то проги разпределенный на 10 cpp файлов, использующий какую-то функцию по нескольку раз практически в каждом из 10 cpp файлов, получается мы должны 10 раз объявить (написать прототип) этой функцию, что бы этого не делать, мы используем h файл, напишем прототип один раз, и 10 раз подключим этот h файл в наших cpp файлах. А теперь сам ответ, в h файлах лежат только прототипы функций, а не их тела. И последнее, по началу, пока наши проги маленькие, мы можем обходиться без h файлов, т.к. все, что в них написано, можно писать непосредственно в cpp файлах. Добавлено (через 18 минут): Цитата Мне дано: вводятся два числа, шеснац. и десят. перевести десят. в шесн а шесн. в двоичное... как это сделать? Вариант dec -> hex: Код #include <iostream.h> int _tmain(int argc, _TCHAR* argv[]) { int a; cin >> a; printf("0x%Xn",a); return 0; } Именно вторая буква X определяет, что выводиться будет число в HEX виде, можно написать x, но тогда буковки в числе будут маленькие, 0x вообще можно не писать. Вариант hex -> dec: Код #include <iostream.h> int _tmain(int argc, _TCHAR* argv[]) { int a; cin >> a; printf("%dn",a); return 0; } Здесь буква d (можно писать D) определяет, что выводиться будет число в десятичном виде, единственное условие, что бы вводимое число начиналось с 0x иначе оно будет трактоваться до первой буквы как десятичное, а от ближайшей буквы все будет отброшено. Спаренный вариант: Код #include <iostream.h> int _tmain(int argc, _TCHAR* argv[]) { int a; cin >> a; printf("HEX: 0x%XnDEC: %dn",a,a); return 0; } Добавлено (через 18 минут): Цитата уроки очень даже интересны ;) Благадарю! ;D Может все в отдельный раздел форума перекинуть, а то я вроде как не усебя, даже помодерить не могу. Цитата С одной стороны Си конечно черезчур изварёшь своими упрощениями, а с другой стороны это же удобно Все новое по началу пугает, а потом, со временем, понимаешь, что иначе и нельзя было. Цитата Но самый крутой-простой это PHP, Perl тоже крут, но упрощён/извращён в 100 больше чем Си... Про PHP vs Perl согласен. Одно маленькое, но веское замечание: PHP (и Perl) язык скриптовый, на нем exeшник проблематично писать, да еще и без ОО (Объ.Орент.) Добавлено (через 18 минут): К стате, очень важный момент, для того, что бы писать в Си на АСМе, есть два варианта: перед каждой мнемоникой писать "__asm" или после "__asm" взять код в скобки, пример: Код __asm mov eax,54 __asm add eax,6 __asm xor eax,eax __asm { push ecx push ebx push eax pop eax pop ebx pop ecx } |
Dark |
21.05.2003 0:18
Сообщение
#27
|
Знаток Группа: Пользователи Сообщений: 408 Пол: Мужской Репутация: 3 |
Большое спас за помощь... ;D просто не знаю, чтобы я придумывал, но все оказалось проще... :o
Да, я тоже за отдельный раздел ;D Цитата В h файле лежат прототипы функций, структуры, константы, задаются новые типы данных, подключаются другие h файлы (каскадом) Хорошо, pas модуль компилируется (переводится в бинарный код) в tpu - а куда обращается h файл ??? Большое спасибо за этот форум, и всем, кто в нем участвует!!!! ;D :P Добавлено (через 7 минут): Кстати, я работаю с BC 3.0 ( ;D) Там тоже мона 32 бита регистры юзать?? -------------------- - Где я?
- Во тьме. - В какой тьме? - Во тьме твоего мозга. |
AlaRic |
21.05.2003 6:06
Сообщение
#28
|
... Группа: Пользователи Сообщений: 1 347 Пол: Мужской Репутация: 3 |
Кто еще за новый раздел?
|
Deny |
21.05.2003 11:20
Сообщение
#29
|
Пионер Группа: Пользователи Сообщений: 149 Репутация: 1 |
Предлагаю название:
"C/C++,C#,VB.Net,ASPX" с единственным (пока) подразделом: C/C++ FAQ, вроде ни чего не забыл. |
Alex |
21.05.2003 12:25
Сообщение
#30
|
Бывалый Группа: Пользователи Сообщений: 201 Репутация: 0 |
Я!
Добавлено (через 12 минут): А если нам не известна размерность массива и допустим ее надо вводить и как это сделать? А указатели как я понял в основном нужны для ускорения программы!??Правильно я нонял или нет?? |
AlaRic |
21.05.2003 13:54
Сообщение
#31
|
... Группа: Пользователи Сообщений: 1 347 Пол: Мужской Репутация: 3 |
Раздел будет называться "C and C++".
Подразделы что-то типа "Теория", "Практика"! |
Noname |
21.05.2003 14:34
Сообщение
#32
|
Гость |
Ребята, СТОП! forum.pascal.dax.ru - форум про паскаль (и про Дельфи). Как мне кажется этот раздел будет здесь лишним, да и потом (я уверен) сильно будет уступать специализированным С форумам... Давайте лучше брать качеством, а не количеством (2Д/3Д графикой, например, игрушками).
Re : Изучать С или нет? Если не начал изучать паскаль, то лучше начни с С... |
AlaRic |
21.05.2003 15:10
Сообщение
#33
|
... Группа: Пользователи Сообщений: 1 347 Пол: Мужской Репутация: 3 |
Мда....кто-то соображает :)
|
Deny |
21.05.2003 17:42
Сообщение
#34
|
Пионер Группа: Пользователи Сообщений: 149 Репутация: 1 |
Цитата Ребята, СТОП! forum.pascal.dax.ru - форум про паскаль (и про Дельфи). Как мне кажется этот раздел будет здесь лишним, да и потом (я уверен) сильно будет уступать специализированным С форумам... Давайте лучше брать качеством, а не количеством (2Д/3Д графикой, например, игрушками). Re : Изучать С или нет? Если не начал изучать паскаль, то лучше начни с С... Согласен, что форум про Паскаль, согласен, что Си-раздел будет очень уступать специальным. Раздел предлагаю лишь в дополнение и для общего развитие. И если это дело пойдет и будет интересно народу, то разумнее всего будет отделиться, дабы не смешивать все в кучу. Раздел ассемблера есть (в сочитании с Паскалем), почему бы не открыть раздел про Си (разумеется без Паса), тем более народ (местный) явно интересуется. Тяжело начинать изучение (на спец форумах), там где обычно собираются гуру. Хочу уточнить, я совершенно не испытаю ни каких эмоций, если раздела не будет. Добавлено (через 5 минут): Цитата Раздел будет называться "C and C++". Подразделы что-то типа "Теория", "Практика"! Не возражаю. |
Alex |
21.05.2003 17:52
Сообщение
#35
|
Бывалый Группа: Пользователи Сообщений: 201 Репутация: 0 |
Тяжело начинать изучение (на спец форумах), там где обычно собираются гуру - полностью согласен! Там такие вопросы рабираются, что ой-ой-ой!Чайнику или начинающему там делать нечего!!!
|
Deny |
21.05.2003 18:13
Сообщение
#36
|
Пионер Группа: Пользователи Сообщений: 149 Репутация: 1 |
Цитата А если нам не известна размерность массива и допустим ее надо вводить и как это сделать? А указатели как я понял в основном нужны для ускорения программы!??Правильно я нонял или нет?? Создаем динамический массив произвольной длинны: Код int _tmain(int argc, _TCHAR* argv[]) { int i, k=1, z=5, razmer = 10; razmer *= 100; int *arr = new int[razmer]; for(i=0;i<razmer;i++,k++,z++) arr[i]=k*2+z; delete [] arr; return 0; } Указатели нужны для обращения к объектам, как побочный эффект, это дает ускорение. Все дело в объектно-орентированности языка. |
Dark |
22.05.2003 1:33
Сообщение
#37
|
Знаток Группа: Пользователи Сообщений: 408 Пол: Мужской Репутация: 3 |
По моему, указатели были введены для более рационального использования памяти, т.е. ячейки памяти очень удобно связывать в цепочки (почитайте Д.Кнута) и с ними работать: их удобно удалять, вставлять, сортировать,создавать,копировать... а также для работы с памятью, которая не выделяется компилятором для переменных, а то паскаль например при выходе за границы определенного размера начинает гнать, что слишком большой блок данных, а с поинтерами(указателями) все получается нормально.
-------------------- - Где я?
- Во тьме. - В какой тьме? - Во тьме твоего мозга. |
Deny |
22.05.2003 11:12
Сообщение
#38
|
Пионер Группа: Пользователи Сообщений: 149 Репутация: 1 |
Цитата По моему, указатели были введены для более рационального использования памяти, т.е. ячейки памяти очень удобно связывать в цепочки (почитайте Д.Кнута) и с ними работать: их удобно удалять, вставлять, сортировать,создавать,копировать... а также для работы с памятью, которая не выделяется компилятором для переменных, а то паскаль например при выходе за границы определенного размера начинает гнать, что слишком большой блок данных, а с поинтерами(указателями) все получается нормально. Это верно на 100%.Я это и имел ввиду - указатели нужны для обращения к объектам (которые естественно в памяти) Добавлено (через 24 минуты): Цитата Хорошо, pas модуль компилируется (переводится в бинарный код) в tpu - а куда обращается h файл ??? h-файл включается в cpp-файл. Далее все как в асме, копилируем в obj и линкуем в exe. |
Alex |
22.05.2003 13:42
Сообщение
#39
|
Бывалый Группа: Пользователи Сообщений: 201 Репутация: 0 |
Пример работы с указателями какой-нибудь напиши!
|
GLuk |
23.05.2003 21:55
Сообщение
#40
|
Профи Группа: Пользователи Сообщений: 775 Пол: Мужской Репутация: 0 |
Тот кто хочет узнать про Си, вряд ли будет заходить на форум PASCAL.dax.ru. Я вообще против этого раздела, многие вопросы по паскалю то висят, а тут еще и си...
|
Текстовая версия | 19.11.2024 9:42 |