Другое > 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.
Навигация
Главная страница сообщений
Следующая страница
Предыдущая страница

Перейти к полной версии