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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.67
Alex Z
27 / 1 / 0
Регистрация: 29.06.2011
Сообщений: 136
#1

В массив типа double записываю целые числа (типа int), но ошибка не вылазиет! - C++

26.03.2012, 13:09. Просмотров 1325. Ответов 8
Метки нет (Все метки)

Вот программулька:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
using namespace std;
 
#include <conio.h>
 
int main()
{
    double arr[]={1,2,3,4,5};
    double *parr=&arr[0];
    double y;
 
    parr++;
    y=*parr;
    cout<<y;
 
    cout<<endl;
    getch();
    return 0;
}
Я там пишу в самом начале:
C++
1
double arr[]={1,2,3,4,5};
Я подумал, что компилятор должен выдать ошибку. Например при sqrt(5) выдаёт ошибку, т.к. функция sqrt не перегружена для целых чисел, а 5 воспринимается как int (это мне на этом же форуме рассказали). Надо писать sqrt(5.0). И тут вроде аналогично, надо писать:
C++
1
double arr[]={1.0, 2.0, 3.0, 4.0, 5,0}
ведь массив double
Хотя всё работает и так. Почему?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.03.2012, 13:09     В массив типа double записываю целые числа (типа int), но ошибка не вылазиет!
Посмотрите здесь:

Как преобразовать дробную часть числа типа double в int - C++
Есть дробное число, например Z = 123,456 нужно разбить его на два целых числа int I = 123 int F = 456 как это можно сделать ? ...

Как из числа типа double сделать int (сохранение целой и дробной части в отдельных целочисленных переменных) - C++
Например есть число double d = 123.4567 Как сделать что бы int i1 = 123; int i2 =4567;

Считать числа типа double из файла и записать их в массив - C++
Проблема следущая: нужна программа которая считывает числа типа double из файла (в моем случае это индексы валютного курса) и записывает их...

Перегрузка типа int и double и сортировка - C++
Дано задание: В одномерном массиве состоящем из n элементов вычислить: 1 номер минимального по модулю элемента. 2 сумму модулей...

С++: числа типа double - C++
Всем добрый вечер!:) Товарищи, я - начинающий чайник, прошу вас объяснить мне как работать с типом double. Мне надо написать такую...

Целые числа типа float - C++
Помогите разобратся: вот написал маленькую прогу, но она пишет десятичные числа типа float и double только в виде целой части. Почему? вот...

Ошибка в переменной типа double - C++
Не могу понять в чем проблема делаю такие вычисления #include &lt;iomanip&gt; summ5=0; summ5+=((double) 1/1035*2); ...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
panicwassano
591 / 559 / 20
Регистрация: 07.11.2010
Сообщений: 2,004
26.03.2012, 13:14     В массив типа double записываю целые числа (типа int), но ошибка не вылазиет! #2
компилятор сам добавит нолик

Добавлено через 20 секунд
неявное преобразование в double
go
Эксперт C++
3586 / 1366 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
26.03.2012, 13:15     В массив типа double записываю целые числа (типа int), но ошибка не вылазиет! #3
Alex Z, В данном случае ваш int будет приведен автоматический к double. (Но лучше это делать явно)
Что же касается sqrt, так она перегружена. И к какому значению необходимо приводить ваш int(т.е. какую из перегруженных функций вызывать) компилятор не знает.
Alex Z
27 / 1 / 0
Регистрация: 29.06.2011
Сообщений: 136
26.03.2012, 13:19  [ТС]     В массив типа double записываю целые числа (типа int), но ошибка не вылазиет! #4
Цитата Сообщение от go Посмотреть сообщение
Alex Z, В данном случае ваш int будет приведен автоматический к double. (Но лучше это делать явно)
Это как бы "Преобразование типов" называется?
А как заранее угадать, где будет преобразование типов, а где сообщение об ошибке?
panicwassano
591 / 559 / 20
Регистрация: 07.11.2010
Сообщений: 2,004
26.03.2012, 13:22     В массив типа double записываю целые числа (типа int), но ошибка не вылазиет! #5
Цитата Сообщение от Alex Z Посмотреть сообщение
Это как бы "Преобразование типов" называется?
А как заранее угадать, где будет преобразование типов, а где сообщение об ошибке?
почитать про приведение типов, явное и неявное
easybudda
Эксперт CЭксперт С++
9468 / 5481 / 927
Регистрация: 25.07.2009
Сообщений: 10,505
26.03.2012, 14:29     В массив типа double записываю целые числа (типа int), но ошибка не вылазиет! #6
Цитата Сообщение от Alex Z Посмотреть сообщение
А как заранее угадать, где будет преобразование типов, а где сообщение об ошибке?
Лучше вообще не гадать, а приводить данные к нужному типу. В общем случае там, где требуется double, целочисленное значение будет преобразовано автоматически, там, где есть варианты (перегруженная функция в С++ к примеру), нужно самому уточнять, что именно передаёшь. В С вот такой код работает:
Код
[andrew@ftp ~/cpp]$ cat > sqrt5.c
#include <stdio.h>
#include <math.h>
int main(void){
    printf("%f\n", sqrt(5));
    return 0;
}
[andrew@ftp ~/cpp]$ gcc -o sqrt5 sqrt5.c
[andrew@ftp ~/cpp]$ ./sqrt5
2.236068
go
Эксперт C++
3586 / 1366 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
26.03.2012, 20:22     В массив типа double записываю целые числа (типа int), но ошибка не вылазиет! #7
Цитата Сообщение от easybudda Посмотреть сообщение
В С вот такой код работает:
Ну в данном случае не из-за языка он не отработает. Вот вариант, когда и С++ отработает
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <cstdio>
#include <cmath>
 
namespace go
{
   double sqrt(double val)
   {
      return std::sqrt(val);
   }
}  
 
int main(void){
    printf("%f\n", go::sqrt(5));
    return 0;
}
http://liveworkspace.org/code/1c46e6...e6974deffcb567
Вообще лучше шаблонные функции использовать.
easybudda
Эксперт CЭксперт С++
9468 / 5481 / 927
Регистрация: 25.07.2009
Сообщений: 10,505
26.03.2012, 20:53     В массив типа double записываю целые числа (типа int), но ошибка не вылазиет! #8
Цитата Сообщение от go Посмотреть сообщение
Ну в данном случае не из-за языка он не отработает.
Ну да, так-то перегрузка функций и пространства имён и в С есть, только как там ими пользоваться, никто не знает...
Мало того!
Код
andrew@rd-andrew ~/cpp/shitcode
$ cat > sqrt5.cpp
#include <iostream>
#include <math.h>
int main(){
    std::cout << sqrt(5) << std::endl;
    return 0;
}

andrew@rd-andrew ~/cpp/shitcode
$ g++ -o sqrt5 sqrt5.cpp

andrew@rd-andrew ~/cpp/shitcode
$ ./sqrt5
2.23607

andrew@rd-andrew ~/cpp/shitcode
$
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.03.2012, 21:49     В массив типа double записываю целые числа (типа int), но ошибка не вылазиет!
Еще ссылки по теме:

Разбить число типа double на 2 числа - C++
Добрый день! Попалась мне такая задача - есть 2 интовые переменные, есть число double. Их нужно сложить таким образом : к 1-му интовому...

Чтение из файла числа типа double - C++
Добрый вечер! Уже долго бьюсь над тем, что у меня слишком маленькая точность считываемого числа... char word; ifstream...

Ошибка вывода значения 0 типа double - C++
При выполнении этого кода при значении x=0 не выводится четкий ноль. Почему? Я так понимаю нужно проводить округление? С printf такого нет....

Непонятно выводится значение числа типа double - C++
#include &lt;iostream&gt; #include &lt;math.h&gt; using namespace std; int main() { double a,y,z; cout &lt;&lt; &quot;Vvedite chislo: &quot; &lt;&lt; endl; ...

Вывод числа типа double как есть - C++
Кто-нибудь помогите понять тип double!!! Как вывести заданное число как оно есть? Например, записываем в f число 14049.30493 то нужно...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
go
26.03.2012, 21:49     В массив типа double записываю целые числа (типа int), но ошибка не вылазиет!
  #9

Не по теме:

Цитата Сообщение от easybudda Посмотреть сообщение
Ну да, так-то перегрузка функций и пространства имён и в С есть,
Причем здесь это. Я просто привел пример функции, с именем существующей стандартной.

Yandex
Объявления
26.03.2012, 21:49     В массив типа double записываю целые числа (типа int), но ошибка не вылазиет!
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru