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

Загадка указателей - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Дана геометрическая прогрессия из N членов, 1-й элемент b1 и знаменатель q задаются случайным образом http://www.cyberforum.ru/cpp-beginners/thread1138457.html
дана геометрическая прогрессия из N членов, 1-й элемент b1 и знаменатель q задаются случайным образом. Вывести все члены прогрессии на экран и вычислить сумму элементов прогрессии, больших -4.
C++ Вычислить произведение элементов массива Буду при много благодарен за помощь Вычислить произведение элементов целочисленного массива, находящихся между минимальным и максимальным элементами. Определить номера максимального и минимального элементов. Создать функции для определения номеров максимального и минимального элементов. http://www.cyberforum.ru/cpp-beginners/thread1138453.html
C++ Создание двумерного массива
Год не кодил...всё напрочь забылось. нужно создать матрицу размером n x m, заполнить ее единичками и вывести результат. хоть убей не помню как объявить двумерный массив, учитывая то, что до этого на С# только делал, а сейчас надо на плюсах. так что среда С++. то что пока набросал: #include "stdafx.h" #include <iostream> using namespace std;
Структура "Покупатель" C++
Помогите решить пожалуйста) Покупатели продуктового магазина пользуются 10% скидкой, если покупка состоит из более чем 5 наименований товаров или суммарная стоимость покупки превышает K рублей. Составить ведомость, учитывающую скидки: покупатель, количество наименований купленных товаров, стоимость покупки, стоимость покупки с учетом скидки. Выяснить, сколько покупателей сделало покупки,...
C++ Записать в перевернутом виде строки файла F в файл G http://www.cyberforum.ru/cpp-beginners/thread1138431.html
Здравствуйте. Не знаю, как заставить работать программу. Буду очень благодарен за помощь Дан текстовый файл F. Записать в перевернутом виде строки файла F в файл G.Порядок строк в файле G должен быть обратным #include "stdafx.h" #include <stdio.h> #include <iostream> #include <conio.h> #include <string.h>
C++ Циклы и их запоминание Вопрос. Может ли с++ запомнит циклы? Пример. Чтоб вычислит наиболее большой общий делитель надо разложить оба числа на простые множители и подчеркнуть те из этих множителей, которые являются общими для обоих разложений, например: 105 = 3 ∙ 5 ∙ 7; 140 = 2 ∙ 2 ∙ 5 ∙ 7. НОД(105,140) = 5 * 7 = 35. Чтоб это делать в С++ надо чтоб программа повторялся несколько раз пока не найдет все... подробнее

Показать сообщение отдельно
bigibug
0 / 0 / 0
Регистрация: 03.04.2014
Сообщений: 3
03.04.2014, 23:06     Загадка указателей
Здравствуйте =) Привел меня к Вам следующий вопрос.
Поступило задание составить программу для решения квадратного уровнения, используя указатели.
В процессе работы наткнулся на то что, казалось бы, одно и тоже (по смыслу) выдает разные результаты.
Преподаватель работу принял, но разницу не смог обьяснить. А я теперь ночами спать не могу, понять хочу что не так сделал. =) Единственная разница выделена жирным шрифтом.
Подскажите, пожалуйста, почему 2 следующие программы выдают столь различные результаты?
Листинг 1
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
]#include<iostream>
#include<math.h>
using namespace std;
int main()
{
    int *p=new int[3],i,j=0;
    double x1,x2,d;
    char *t="abc";
    char *q=t;
    while (*q) 
    {
    cout<<*q++<<"=";
   [B] cin>>*(p+j);j++;[/B]
    for (i=0;i<3;i++) cout<<*(p+i)<<endl;     
    }
    d=pow(p[1],2)-4*p[0]*p[2];
    cout<<"d="<<d<<endl;
    if (d>=0) {x1=(-p[1]+sqrt(d))/2*(p[0]);
               x2=(-p[1]-sqrt(d))/2*(p[0]);
               cout<<"x1="<<x1<<endl<<"x2="<<x2;
        }
    else cout<<"net corney";
    delete [] p;
}

Результат 1
Кликните здесь для просмотра всего текста

a=1
1
0
0
b=5
1
5
0
c=4
1
5
4
d=9
x1=-1
x2=-4

Листинг 2
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include<iostream>
#include<math.h>
using namespace std;
int main()
{
    int *p=new int[3],i,j=0;
    double x1,x2,d;
    char *t="abc";
    char *q=t;
    while (*q) 
    {
    cout<<*q++<<"=";
   [B] cin>>*p++;[/B]
    for (i=0;i<3;i++) cout<<*(p+i)<<endl;     
    }
    d=pow(p[1],2)-4*p[0]*p[2];
    cout<<"d="<<d<<endl;
    if (d>=0) {x1=(-p[1]+sqrt(d))/2*(p[0]);
               x2=(-p[1]-sqrt(d))/2*(p[0]);
               cout<<"x1="<<x1<<endl<<"x2="<<x2;
        }
    else cout<<"net corney";
    delete [] p;
}

Результат 2
Кликните здесь для просмотра всего текста

a=1
0
0
1035
b=5
0
1035
892547121
c=4
1035
892547121
842086196
d=6ю53828e+17
x1=1.72275e+10
x2=-8.1967e+11
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 15:00. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru