Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Изучаю C++ иногда бывает непонятно - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Написать программу ввода и вывода строки на C++ http://www.cyberforum.ru/cpp-beginners/thread710820.html
Регите пожалуйста !
C++ Одномерный массив. Вычислить сумму полож. эл-в, раполож. до максимального и заменить все отрицат. эл-ты на их квадраты Посмотрите код, первая работа с массивами. Задача- В одном. массиве, сост. из н веществен. чисел, вычислить сумму полож. эл-в, раполож. до максимального и заменить все отрицат. эл-ты на их квадраты.... http://www.cyberforum.ru/cpp-beginners/thread710818.html
исправьте ошибки в коде C++
посмотрите пожалуйста что не так с кодом? вот задание:Дана целочисленная квадратная матрица. Определить: • количество строк, не содержащих ни одного нулевого элемента; • максимальное из чисел,...
Цикл с постусловием: Вычислить сумму ряда с точностью Е, член которого Аn= 2(n!)/3(n!)^2 C++
Здравствуйте! Помогите пожалуйста написать программу цикла с постусловием на языке С++. Буду очень благодарна. Вычислить сумму ряда с точностью Е, член которого Аn= 2(n!)/3(n!)^2
C++ високосный год http://www.cyberforum.ru/cpp-beginners/thread710760.html
Год является високосными, если его номер кратен 4, однако из кратных 10 високоснымы является лишь кратные 400, например 1900-невисокосные год, 2000-високосний. Дано число n. Определить, является ли...
C++ Правильные прототипы операторов Подскажите правильные прототипы: operator =, operator +, operator +=, operator -, operator -=. operator *, operator *=, operator /, operator /=. Какие типы должны возвращать эти операторы?... подробнее

Показать сообщение отдельно
taras atavin
Ушёл с форума.
3569 / 1753 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
29.11.2012, 07:59
Цитата Сообщение от koderman Посмотреть сообщение
Я имею ввиду здесь на форуме буквами вводить текст, напечатать.
А как ты бумагу на форум запихаешь?

Добавлено через 4 минуты
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
тебе похоже довольно сложно понять вообще, что такое функции. В такие моменты хочется посоветовать изучить ассемблер "для понимания, как это работает"
но сам понимаешь, что изучать асм будет может даже ещё сложнее.
Нет. Раз уж он мыслит в терминах сигналов и физических процессов, то чем ниже уровень, тем ему будет проще. Это полный уникум и начинать ему надо с ЭНИАКа, потом переходить к программированию в опкодах, потом к ассемблеру, потом к решётке с паскалем, потом к чистым сям и только после этого браться за плюсы.

Добавлено через 4 минуты
Цитата Сообщение от Kastaneda Посмотреть сообщение
В 64 битных системах немного по другому - первые четыре аргумента передаются на регистрах RCX, RDX, R8 и R9. Остальные аргументы передаются через стек.
А при чём здесь разрядность системы? В любой системе с любой разрядностью возможна оптимизация в виде передачи части параметров через регистры.

Добавлено через 3 минуты
Цитата Сообщение от koderman Посмотреть сообщение
Вот например важной я считаю информацию о том сколько места в памяти занимают переменные int, long, double
Рано. Сначала надо понять смысл операций. В том числе, вызова/возврата. И только потом браться за ручную оптимизацию по расходу памяти. Иначе всё равно не сможешь применить разрядности типов.

Добавлено через 7 минут
Цитата Сообщение от koderman Посмотреть сообщение
Может надо вместо этих цифр х и y поставить?
Нет.
Цитата Сообщение от koderman Посмотреть сообщение
Куда вернуть?
Функция же где то вызвана, например,
C++
1
a=func1(x, y);
, вот в этот оператор присваивание и вернёт. В тех языках, где функции отличают от процедур, функция есть подпрограмма, возвращающая значение через собственное имя, на сях и плюсах так ведут себя все подпрограммы с единственной оговоркой: если тип функции void, то через собственное имя она возвращает специальное значение без данных, которое девать некуда, причём, такой возврат значения происходит лишь в представлении человека, который прогу написал, или читает, на низком же уровне происходит выход из процедуры без возврата значения.

Добавлено через 2 минуты
Цитата Сообщение от koderman Посмотреть сообщение
Вычисления в теле функции могут быть любые, после чего возможен вариант того что результат вычислений будет присвоен какойто переменной например Х и с этой переменной результат отправляется в функцию через команду return.
Из функции. Из, а не в.

Добавлено через 2 минуты
Цитата Сообщение от koderman Посмотреть сообщение
/Отсюда результат вычислений строки 18 передаётся в функцию Convert
* * * * * * * * *//через переменную Cel..
* * * * * * * * //Но на какую именно функцию? На ту что на строке 15 или сразу
* * * * * * * *// на ту что на строке 10 откуда она
* * * * * * * // была вызвана?
Значение Cel подставляется вместо имени функции Convert в строке 10, где она была вызвана. Строка 15 - это только адрес точки входа, ни какие значения туда вернуть нельзя, да и не поможет.

Добавлено через 10 минут
Цитата Сообщение от koderman Посмотреть сообщение
В строке 3 указан тип возвращаемого значения для функции Convert это float(перед функцией Convert). Этот тип виден во всём коде потому что это глобальная переменная, поэтому в строке 10 не указан этот тип для Convert. Почему тогда тип возвращаемого значения для функции надо указывать в определении функции? В строке 15.
Это не переменная. Это именно тип. Кроме того, эйси.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
float Convert(float);
int main ()
{
float TempFer;
float TempCel;
std::cout<<"Please enter the temperature in Fahrenheit:";
std::cin>>TempFer;
Convert(TempFer);
std::cout<<"\nHere`s temperature in Celsius:";
std::cout<<TempCel<<std::endl;
}
 
Convert(float Fer)
{
 float Cel;
  Cel=((Fer-32)*5)/9
 
  return Cel;
}
сравни строки 10 и 15 и поймёшь, что теперь строка 15 - это вызов функции, причём, синтаксически ошибочный, так как не завершён точкой с запятой. Можно сказать: "функция возвращает float и его надо куда то девать, а он не передан в операнд какого либо оператора, или в параметр другой функции, то есть не исспользован.". Но на сях и плюсах нет процедур. А это значит, что void-функции не отличаются ни чем, кроме типа.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
void f(int *a, int n, int *max);
int main ()
{
 int a[10]={2, 1, 3, 54, 4, 8, 3, 2, 4, 6};
 int m;
 f(a, 10, m);
 std::cout<<m<<std::endl;
 return 0;
}
f (int *a, int n, int *max)
{
 int *m;
 int *p;
 for (p=a+n-1, m=a; p>a; --a)
 {
   if (*p<*m)
   {
    m=p;
   }
 }
 *max=*m;
}
Добавлено через 3 минуты
Чем теперь 11-я строка отличается от 7-й? Ни чем. Как же описать функцию, прототип которой объявлен заранее?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
void f(int *a, int n, int *max);
int main ()
{
 int a[10]={2, 1, 3, 54, 4, 8, 3, 2, 4, 6};
 int m;
 f(a, 10, m);
 std::cout<<m<<std::endl;
 return 0;
}
void f (int *a, int n, int *max)
{
 int *m;
 int *p;
 for (p=a+n-1, m=a; p>a; --a)
 {
   if (*p<*m)
   {
    m=p;
   }
 }
 *max=*m;
}
. Теперь в 11-й строке тип говорит о том, что это не операция, а декларация, а значит не вызов, так как всякий вызов есть операция. Декларация чего? Скобки с параметрами говорят, что функции, а не переменной.

Добавлено через 3 минуты
Цитата Сообщение от koderman Посмотреть сообщение
Зависит от того глобальная ли переменная в строке 10 или локальная)
Нет.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
float Convert(float);
int main ()
{
float TempFer;
int TempCel;
std::cout<<"Please enter the temperature in Fahrenheit:";
std::cin>>TempFer;
TempCel=Convert(TempFer);
std::cout<<"\nHere`s temperature in Celsius:";
std::cout<<TempCel<<std::endl;
}
 
float Convert(float Fer)
{
 float Cel;
  Cel=((Fer-32)*5)/9
 
  return Cel;
}
. Это валидный текст, значение float при присваивании будет округлено вниз и присвоено переменной int, но тип функции всё равно float.

Добавлено через 1 минуту
Цитата Сообщение от koderman Посмотреть сообщение
Видно функция принимает тип который ей дадут return´ом или всёже из прототипа берёт тип.))
Ни то, ни то. Прототип вообще не обязателен, если функция не используется до своего описания. А тип она берёт из собственного заголовка, у тебя это строка 15.

Добавлено через 1 минуту
Цитата Сообщение от koderman Посмотреть сообщение
ведь функция без типа это автоматически int
Функция не может не иметь типа, если ты не написал тип, то это вызов, а не объявление, таким образом функции без типа и исключаются. И ни каких автоматических типов.

Добавлено через 2 минуты
Цитата Сообщение от ValeryS Посмотреть сообщение
из прототипа
не путай прототип с заголовком. Только из заголовка, прототип же сравнивается на совпадение и при различии типов будет зафиксирована синтаксическая ошибка.

Добавлено через 1 минуту
При вызове можно указать тип.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
float Convert(float);
int main ()
{
float TempFer;
float TempCel;
std::cout<<"Please enter the temperature in Fahrenheit:";
std::cin>>TempFer;
TempCel=(int)Convert(TempFer);
std::cout<<"\nHere`s temperature in Celsius:";
std::cout<<TempCel<<std::endl;
}
 
float Convert(float Fer)
{
 float Cel;
  Cel=((Fer-32)*5)/9
 
  return Cel;
}
Добавлено через 1 минуту
В строке 9 будет двойное приведение типа: приведение float к int, при котором значение округляется вниз до целого и неявное int к foat, чтоб присвоить результат первого приведения переменной типа float.

Добавлено через 27 секунд
На саму функцию это не влияет.
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru