| Другое > Hard'n'Soft |
| Изучение азов програмирования , советы начинающим и т.д и т.п |
| << < (5/7) > >> |
| Mr2:
--- Цитата: Henty от 22 Октябрь 2009, 08:29:54 ---Вроде бы там пофигу где писать. --- Конец цитаты --- А что писать в заголовочном файле? Я думал что сама функция пишется в отдельном файле function_mr_2.cpp. А затем включается в программу с помощью #include "function_mr_2.h" Вызывается: int main(){ playpen paper; paper.scale(3); function_mr_2(paper, -4, 0, 9, 0, -4, 9, black); paper.display(); cout << "press enter to exit"; cin.get(); } Правильно ли я понял? |
| topos84:
--- Цитата: HardWareMan ---Садись два. --- Конец цитаты --- Спасибо за педагогику. (с) :lol: --- Цитата: HardWareMan ---Функция от процедуры отличается тем, что функция возвращает результат в себе а процедура нет. --- Конец цитаты --- Именно это я и написал, но на языке математики: результатом применения (выполнения) функции (как подпрограммы) есть некое значение (того или иного типа), которое выражается в виде, привычном для математиков F(X1, ... , X2), а это, в свою очередь, на языке программинга и выражается словами "возвращает результат в себе". ;) Так что не два, а три. :) |
| MetalliC:
млин, чего спорить, мне в этом плане Ц нравится: хош сделать процедуру - делай функцию возвращающую void, но если передавать туда указатели - можно легко возвращать из нее данные, но имхо это выходит за рамки топика, и новичкам от познания подобных вещей пользы аж никакой... Добавлено позже: от фразы --- Цитата ---возвращает результат в себе --- Конец цитаты --- почему-то возникла ассоциация с беременной девкой 0_0, осенне обострение наверно... :'( |
| Henty:
--- Цитата: Mr2 от 22 Октябрь 2009, 14:12:15 ---А что писать в заголовочном файле? Я думал что сама функция пишется в отдельном файле function_mr_2.cpp. А затем включается в программу с помощью #include "function_mr_2.h" Вызывается: int main(){ playpen paper; paper.scale(3); function_mr_2(paper, -4, 0, 9, 0, -4, 9, black); paper.display(); cout << "press enter to exit"; cin.get(); } Правильно ли я понял? --- Конец цитаты --- нее. Это ты создаёшь header-файл. Есть файлы stdio.h, conio.h, vcl.h, clx.h, math.h, которые хранят в себе список разных функций. В хэлпе всё написано, когда смотришь описание функции, там указано какой заголовочный файл использовать. Выносить свои функции в заголовочный файл - это уже твоё дело. Компилятор всё равно их кидает в общую кучу (от того и показывает тысячи строк XD). Можешь написать свой набор, авторский, универсальный. И его через #include подключать. Но на начальном этапе я в этом смысла не вижу, потому функции можно писать сразу там же, где и прогу. Более того, main - это функция. Есть в Си такое условие - точка входа в программу это функция с именем main. От неё все ноги и растут :) |
| HardWareMan:
--- Цитата: topos84 от 22 Октябрь 2009, 22:09:43 ---Именно это я и написал... --- Конец цитаты --- Смотрим: --- Цитата: topos84 от 21 Октябрь 2009, 23:04:45 ---Функции и процедуры суть подпрограммы в Паскале. Отличие функции от процедуры в том, что с функцией можно обращаться как с переменной (присваивать ее значение другим переменным и пр.), а с процедурой нельзя. --- Конец цитаты --- Попробуй присвоить ей значение вне ее тела. Попробуй взять ее значение внутри ее тела. Чувствуешь разницу? --- Цитата: topos84 от 22 Октябрь 2009, 22:09:43 ---Так что не два, а три. :) --- Конец цитаты --- Нет, все-таки 2. Ну может, даже, 2+. :D --- Цитата: MetalliC от 22 Октябрь 2009, 23:09:10 --- --- Цитата ---возвращает результат в себе --- Конец цитаты --- от фразы почему-то возникла ассоциация с беременной девкой 0_0, осенне обострение наверно... :'( --- Конец цитаты --- Действительно. |
| topos84:
--- Цитата: HardWareMan ---Попробуй присвоить ей значение вне ее тела. --- Конец цитаты --- Я имел в виду, что она обладает некоторыми свойствами переменной, а не всеми. --- Цитата: HardWareMan ---Попробуй взять ее значение внутри ее тела. --- Конец цитаты --- А рекурсивные функции в Паскале как задаются? Всегда без взятия ее значения внутри ее тела? (Я просто уже не помню) Ну вот, можно ли тот же факториал так прописать в Паскале: function Fakt(n:byte):longint; begin if n=o then Fakt(n):=1 else Fakt(n):=Fakt(n-1)*n; end; |
| HardWareMan:
--- Цитата: topos84 от 23 Октябрь 2009, 18:33:13 ---Я имел в виду, что она обладает некоторыми свойствами переменной, а не всеми. --- Конец цитаты --- Но не сказал ведь? --- Цитата: topos84 от 23 Октябрь 2009, 18:33:13 ---А рекурсивные функции в Паскале как задаются? Всегда без взятия ее значения внутри ее тела? (Я просто уже не помню) Ну вот, можно ли тот же факториал так прописать в Паскале: function Fakt(n:byte):longint; begin if n=o then Fakt(n):=1 else Fakt(n):=Fakt(n-1)*n; end; --- Конец цитаты --- Ты не путай рекурсию и "функция как переменная". При попытке взять значение функции внутри ее тела происходит все тот же ее вызов (а так как он внутри ее тела то и происходит рекурсивный вызов). А присвоить значение самой функции можно только в ее теле. Так что не убедил. Учись излагать свои мысли наиболее понятно для окружающих, чтобы не было двояких смыслов. --- Цитата: gepar от 21 Октябрь 2009, 21:55:18 ---Код работает , а можно в двух словах почему нужно приписывать именно :5:4 ?Ну для общего понимания что же я за действие совершаю приписав :5:4 . --- Конец цитаты --- Write/WriteLn - это макрос а не функция. Именно поэтому, туда можно запихать неограниченное количество параметров или вызвать вообще без таковых. При выводе вещественных чисел можно их форматировать. В твоем примере, writeln(x:5:4), мы видим, что число Х должно быть отформатировано до 5 символов в длинну (первое число) и при этом содержать 4 знака после запятой (второе число). Второе число можно опустить и тогда необязательные числа после запятой не будут выводиться. Например, программа: --- Код: ---uses dos,crt; var c,y:integer; x:real; t:text; l:string; begin randomize; assign(t,'d:\work\pascal\numbers.txt'); rewrite(t); writeln(t,'Real numbers formation:'); for c:=0 to 9 do begin x:=random(100)/33; Write(t,'Number: "'); Write(t,x); Write(t,'", x:6 result: "'); Write(t,x:6); WriteLn(t,'"'); Write(t,'Number: "'); Write(t,x); Write(t,'", x:4:2 result: "'); Write(t,x:4:2); WriteLn(t,'"'); Write(t,'Number: "'); Write(t,x); Write(t,'", x:8:0 result: "'); Write(t,x:8:0); WriteLn(t,'"'); end; writeln(t,'Integer numbers formation:'); for c:=0 to 9 do begin y:=random(20)*10; Write(t,'Number: "'); Write(t,y); Write(t,'", y:6 result: "'); Write(t,y:6); WriteLn(t,'"'); Write(t,'Number: "'); Write(t,y); Write(t,'", y:4 result: "'); Write(t,y:4); WriteLn(t,'"'); end; close(t); end. --- Конец кода --- и ее вывод: --- Код: ---Real numbers formation: Number: " 2.60606060606005E+0000", x:6 result: " 2.6E+0000" Number: " 2.60606060606005E+0000", x:4:2 result: "2.61" Number: " 2.60606060606005E+0000", x:8:0 result: " 3" Number: " 1.54545454545405E+0000", x:6 result: " 1.5E+0000" Number: " 1.54545454545405E+0000", x:4:2 result: "1.55" Number: " 1.54545454545405E+0000", x:8:0 result: " 2" Number: " 2.72727272727207E+0000", x:6 result: " 2.7E+0000" Number: " 2.72727272727207E+0000", x:4:2 result: "2.73" Number: " 2.72727272727207E+0000", x:8:0 result: " 3" Number: " 2.72727272727207E+0000", x:6 result: " 2.7E+0000" Number: " 2.72727272727207E+0000", x:4:2 result: "2.73" Number: " 2.72727272727207E+0000", x:8:0 result: " 3" Number: " 2.93939393939218E+0000", x:6 result: " 2.9E+0000" Number: " 2.93939393939218E+0000", x:4:2 result: "2.94" Number: " 2.93939393939218E+0000", x:8:0 result: " 3" Number: " 7.27272727272975E-0001", x:6 result: " 7.3E-0001" Number: " 7.27272727272975E-0001", x:4:2 result: "0.73" Number: " 7.27272727272975E-0001", x:8:0 result: " 1" Number: " 3.03030303030482E-0001", x:6 result: " 3.0E-0001" Number: " 3.03030303030482E-0001", x:4:2 result: "0.30" Number: " 3.03030303030482E-0001", x:8:0 result: " 0" Number: " 2.30303030303185E+0000", x:6 result: " 2.3E+0000" Number: " 2.30303030303185E+0000", x:4:2 result: "2.30" Number: " 2.30303030303185E+0000", x:8:0 result: " 2" Number: " 2.57575757575614E+0000", x:6 result: " 2.6E+0000" Number: " 2.57575757575614E+0000", x:4:2 result: "2.58" Number: " 2.57575757575614E+0000", x:8:0 result: " 3" Number: " 2.87878787878799E+0000", x:6 result: " 2.9E+0000" Number: " 2.87878787878799E+0000", x:4:2 result: "2.88" Number: " 2.87878787878799E+0000", x:8:0 result: " 3" Integer numbers formation: Number: "120", y:6 result: " 120" Number: "120", y:4 result: " 120" Number: "50", y:6 result: " 50" Number: "50", y:4 result: " 50" Number: "190", y:6 result: " 190" Number: "190", y:4 result: " 190" Number: "50", y:6 result: " 50" Number: "50", y:4 result: " 50" Number: "100", y:6 result: " 100" Number: "100", y:4 result: " 100" Number: "120", y:6 result: " 120" Number: "120", y:4 result: " 120" Number: "40", y:6 result: " 40" Number: "40", y:4 result: " 40" Number: "160", y:6 result: " 160" Number: "160", y:4 result: " 160" Number: "20", y:6 result: " 20" Number: "20", y:4 result: " 20" Number: "150", y:6 result: " 150" Number: "150", y:4 result: " 150" --- Конец кода --- Так понятно? Замечу, что для целых чисел второе число задавать нельзя, ибо они на то и целые, что у них после запятой нету дробной части. Так же обращу внимание на то, что указание дробной части для реальных чисел является округлением(!), это видно на примере. |
| topos84:
--- Цитата: HardWareMan ---Попробуй присвоить ей значение вне ее тела. --- Конец цитаты --- Ну да, этого сделать нельзя. --- Цитата: HardWareMan ---Попробуй взять ее значение внутри ее тела. --- Конец цитаты --- Вот взял: var m:longint; function Fakt(n:byte):longint; begin if n=o then begin Fakt(n):=1; m:=Fakt(n); {вот взял Fakt(0)} end else Fakt(n):=Fakt(n-1)*n; end; А уж происходил ли при этом рекурсивный вызов или нет - это дело десятое. ;) --- Цитата: MetalliC ---почему-то возникла ассоциация с беременной девкой --- Конец цитаты --- Однако ж трудно забеременеть, оставаясь в девках. :lol: --- Цитата: HardWareMan ---Учись излагать свои мысли наиболее понятно для окружающих, чтобы не было двояких смыслов. --- Конец цитаты --- Учись отличать смысл от значения: первое - это то, как понимаешь ты (преобладание субъективности), второе - то, как принято понимать в обществе (преобладание объективности). ;) Придирчивый вы наш. :) |
| aUruM:
Ассемблер, на мой взгляд, бессмысленно изучать, не понимая основы архитектуры компьютера, устройства процессора, памяти и шин и т.д. BASIC - не самый плохой язык для обучения основам программирования детей 10-12 лет (я сам в 10 лет с него начинал), но для более серьезных целей, по-моему, он подходит плохо. В целом, основы программирования лучше изучать в Паскале, а потом перейти на C/C++. После C/C++ вы спокойно освоите практически любой язык программирования за пару дней. |
| gepar:
--- Цитата: aUruM ---После C/C++ вы спокойно освоите практически любой язык программирования за пару дней. --- Конец цитаты --- А всвязи с чем ? :) |
| Silver_Shadow:
Мне кажется у некоторых программеров такой лозунг - "мне не нравится программировать но я работаю программистом". А те кому нравится они им не работают а это просто как хобби |
| aUruM:
--- Цитата: gepar ---А всвязи с чем ? --- Конец цитаты --- В связи с тем, что эти языки требуют особенно аккуратного и внимательного программирования (особенно если речь идет о чистом C). По крайней мере, на мой взгляд, писать на C значительно сложнее, чем на Паскале. |
| gepar:
Посмотрел сегодня расписание на следующие полгода - у меня программирование на ассемблере , лучше бы на си , но что поделаешь .Вообщем вопрос тот же , язык программирования только теперь другой тобишь какую умную, хорошую и проверенную книгу (надо чтобы был веб вариант/книга лежала в интернете отсканированная) вы посоветуете для изучения ассемблера ?Нагуглить пару книг я конечно и сам могу , но хотелось бы именно проверенную или с многими хорошими отзывами :) Заранее благодарен за ответы . |
| Имаго:
Остановился на Зубкове, в своё время пользовался этой книгой для подготовки к зачётам. Ещё Юров есть. Ну и Абель - классика. |
| aptyp:
Assembler под DOS это мастдай... DOS это трупешник... кому нужно программировать под трупо-DOS ? |
| gepar:
aptyp, да я тоже не шибко рад такому раскладу , особенно после паскаля это вообще как-то не правильно .Надо было либо с асемблера начинать либо его просто пропустить .Имаго,спс, посмотрю этих авторов . |
| Имаго:
Аптип, я уже говорил, сначала читаем, а потом комментируем, добро? В конце концов, речь идёт об изучении принциповов программирования на низком уровне. |
| aptyp:
Да, после такого изучения получаются недо-программисты, думающих что кодить на delphi лучше всего. :) |
| Имаго:
Ты забыл добавить, как эти "недопрограммеры" верстают! ;) Человек только начал изучение ассемблера, ему обязательно нужно начинать с динамических библиотек, ага... |
| aptyp:
С азов надо начинать... а учиться программировать под примитивную 16-bit'ную DOS'ю дико... Хотя тут важно по какой методике учат то в учреждениях тех... от этого и надо исходить в выборе пособий. А если реально, учиться, начинать ассемблировать надо под Windows... так что см. стр.1. |
| Навигация |
| Главная страница сообщений |
| Следующая страница |
| Предыдущая страница |