IPB
ЛогинПароль:

4 страниц V < 1 2 3 4 >  
 Ответить  Открыть новую тему 
> Вопрос про си
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). А то эту темц я не очень провариваю!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
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, т.к. эти операции не просто тупо увеличивают адрес на единицу, а в зависимости от типа значений массива на нужное число байт.

Размерность массива может быть любой, т.к. мы работаем с указателями.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
mj
сообщение 19.05.2003 23:20
Сообщение #23


Adminь
****

Группа: Администраторы
Сообщений: 803
Пол: Мужской
Реальное имя: Евгений

Репутация: -  5  +


уроки очень даже интересны ;)

С одной стороны Си конечно черезчур изварёшь своими упрощениями, а с другой стороны это же удобно smile.gif

Но самый крутой-простой это PHP, Perl тоже крут, но упрощён/извращён в 100 больше чем Си...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Alesha_GA
сообщение 20.05.2003 0:00
Сообщение #24


Пионер
**

Группа: Пользователи
Сообщений: 56
Пол: Мужской

Репутация: -  0  +


Цитата
А ты у нас типа знаток всех диалектов, всех языков.... вот и пиши все на Паскале, ты на нем наверное и разговариваешь... ???
Не хочешь учить - не надо, тебя ни кто не заставляет.  >:(

Си то я учу, но пишу на Pas'е.


Цитата
Ты бы не позорился своими заявлениями, до того как сам разберешся, да же написать правельно не смог, Си - это язык, а не диалект.

Имелся ввиду диалект языка Си. Поэтому ошибки нет.


--------------------
Deleting...

All RESET
[Return]
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Dark
сообщение 20.05.2003 1:25
Сообщение #25


Знаток
****

Группа: Пользователи
Сообщений: 408
Пол: Мужской

Репутация: -  3  +


Т.е получается, что в h файле моно получить ве исходники процедур ??? :smile.gif :smile.gif :smile.gif

Добавлено (через 5 минут):
Мне дано: вводятся два числа, шеснац. и десят. перевести десят. в шесн а шесн. в двоичное... как это сделать?


--------------------
- Где я?
- Во тьме.
- В какой тьме?
- Во тьме твоего мозга.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Deny
сообщение 20.05.2003 3:14
Сообщение #26


Пионер
**

Группа: Пользователи
Сообщений: 149

Репутация: -  1  +


Цитата
Т.е получается, что в h файле моно получить ве исходники процедур ??? :smile.gif :smile.gif :smile.gif

В 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
Может все в отдельный раздел форума перекинуть, а то я вроде как не усебя, даже помодерить не могу.

Цитата
С одной стороны Си конечно черезчур изварёшь своими упрощениями, а с другой стороны это же удобно smile.gif

Все новое по началу пугает, а потом, со временем, понимаешь, что иначе и нельзя было.

Цитата
Но самый крутой-простой это 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
}
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
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 бита регистры юзать??


--------------------
- Где я?
- Во тьме.
- В какой тьме?
- Во тьме твоего мозга.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
AlaRic
сообщение 21.05.2003 6:06
Сообщение #28


...
*****

Группа: Пользователи
Сообщений: 1 347
Пол: Мужской

Репутация: -  3  +


Кто еще за новый раздел?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Deny
сообщение 21.05.2003 11:20
Сообщение #29


Пионер
**

Группа: Пользователи
Сообщений: 149

Репутация: -  1  +


Предлагаю название:
"C/C++,C#,VB.Net,ASPX"
с единственным (пока) подразделом:
C/C++ FAQ,
вроде ни чего не забыл.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Alex
сообщение 21.05.2003 12:25
Сообщение #30


Бывалый
***

Группа: Пользователи
Сообщений: 201

Репутация: -  0  +


Я!

Добавлено (через 12 минут):
А если нам не известна размерность массива и допустим ее надо вводить и как это сделать?
А указатели как я понял в основном нужны для ускорения программы!??Правильно я нонял или нет??
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
AlaRic
сообщение 21.05.2003 13:54
Сообщение #31


...
*****

Группа: Пользователи
Сообщений: 1 347
Пол: Мужской

Репутация: -  3  +


Раздел будет называться "C and C++".
Подразделы что-то типа "Теория", "Практика"!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Noname
сообщение 21.05.2003 14:34
Сообщение #32


Гость






Ребята, СТОП! forum.pascal.dax.ru - форум про паскаль (и про Дельфи). Как мне кажется этот раздел будет здесь лишним, да и потом (я уверен) сильно будет уступать специализированным С форумам... Давайте лучше брать качеством, а не количеством (2Д/3Д графикой, например, игрушками).


Re : Изучать С или нет?

 Если не начал изучать паскаль, то лучше начни с С...
 К началу страницы 
+ Ответить 
AlaRic
сообщение 21.05.2003 15:10
Сообщение #33


...
*****

Группа: Пользователи
Сообщений: 1 347
Пол: Мужской

Репутация: -  3  +


Мда....кто-то соображает  :)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Deny
сообщение 21.05.2003 17:42
Сообщение #34


Пионер
**

Группа: Пользователи
Сообщений: 149

Репутация: -  1  +


Цитата
Ребята, СТОП! forum.pascal.dax.ru - форум про паскаль (и про Дельфи). Как мне кажется этот раздел будет здесь лишним, да и потом (я уверен) сильно будет уступать специализированным С форумам... Давайте лучше брать качеством, а не количеством (2Д/3Д графикой, например, игрушками).

Re : Изучать С или нет? 
  Если не начал изучать паскаль, то лучше начни с С...

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

Добавлено (через 5 минут):
Цитата
Раздел будет называться "C and C++".
Подразделы что-то типа "Теория", "Практика"!

Не возражаю.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Alex
сообщение 21.05.2003 17:52
Сообщение #35


Бывалый
***

Группа: Пользователи
Сообщений: 201

Репутация: -  0  +


Тяжело начинать изучение (на спец форумах), там где обычно собираются гуру -  полностью согласен! Там такие вопросы рабираются, что ой-ой-ой!Чайнику или начинающему там делать нечего!!!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
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;
}


Указатели нужны для обращения к объектам, как побочный эффект, это дает ускорение. Все дело в объектно-орентированности языка.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Dark
сообщение 22.05.2003 1:33
Сообщение #37


Знаток
****

Группа: Пользователи
Сообщений: 408
Пол: Мужской

Репутация: -  3  +


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


--------------------
- Где я?
- Во тьме.
- В какой тьме?
- Во тьме твоего мозга.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Deny
сообщение 22.05.2003 11:12
Сообщение #38


Пионер
**

Группа: Пользователи
Сообщений: 149

Репутация: -  1  +


Цитата
По моему, указатели были введены для более рационального использования памяти, т.е. ячейки памяти очень удобно связывать в цепочки (почитайте Д.Кнута) и с ними работать: их удобно удалять, вставлять, сортировать,создавать,копировать... а также для работы с памятью, которая не выделяется компилятором для переменных, а то паскаль например при выходе за границы определенного размера начинает гнать, что слишком большой блок данных, а с поинтерами(указателями) все получается нормально.
Это верно на 100%.
Я это и имел ввиду - указатели нужны для обращения к объектам (которые естественно в памяти)

Добавлено (через 24 минуты):
Цитата
Хорошо, pas модуль компилируется (переводится в бинарный код)  в tpu - а куда обращается h файл ???
h-файл включается в cpp-файл. Далее все как в асме, копилируем в obj и линкуем в exe.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Alex
сообщение 22.05.2003 13:42
Сообщение #39


Бывалый
***

Группа: Пользователи
Сообщений: 201

Репутация: -  0  +


Пример работы с указателями какой-нибудь напиши!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
GLuk
сообщение 23.05.2003 21:55
Сообщение #40


Профи
****

Группа: Пользователи
Сообщений: 775
Пол: Мужской

Репутация: -  0  +


Тот кто хочет узнать про Си, вряд ли будет заходить на форум PASCAL.dax.ru. Я вообще против этого раздела, многие вопросы по паскалю то висят, а тут еще и си...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

4 страниц V < 1 2 3 4 >
 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 28.03.2024 14:17
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"