Модераторы: Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [C++] Указатели и ссылки 
V
    Опции темы
dav1d
Дата 1.4.2007, 13:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 1.4.2007

Репутация: нет
Всего: нет



стоит цель сначала сделать эти задачи с использованием ссылок, а затем - указателей (ну или наоборот):

1. Даны действительные числа  x и у (x не равно y). Меньшее из этих чисел заменить их полусуммой, а большее — их удвоенным произведением.
2. Натуральное число из n цифр  называется числом Армстронга, если сумма его цифр, возведенная в степень n, равна самому числу. Напишите функцию, определяющую, является ли переданное ей число числом Армстронга. Напишите программу, использующую вашу функцию, для определения всех чисел Армстронга из двух и трех цифр.

спасибо!
PM MAIL ICQ   Вверх
powerfox
Дата 1.4.2007, 14:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I wanna fork()
****


Профиль
Группа: Комодератор
Сообщений: 3990
Регистрация: 1.10.2005
Где: Санкт-Петербург

Репутация: 3
Всего: 97



Первая задача.
Код

#include<iostream>
using namespace std;

void remake(double&x, double&y)
{
    double x_tmp = x;
    if (x<y){
        x=(x+y)/2;
        y=2*x_tmp*y;
    }
    else if (x>y)
    {
        x=2*x*y;
        y=(x_tmp+y)/2;
    }
}

void remake_ptr(double*x, double*y)
{
    double x_tmp = *x;
    if (*x<*y){
        *x=(*x+*y)/2;
        *y=2*x_tmp**y;
    }
    else if (*x>*y)
    {
        *x=2**x**y;
        *y=(x_tmp+*y)/2;
    }
}


int main()
{
    double x,y;
    cout<<"Enter the value of x\n";
    cin>>x;
    cout<<"\nEnter the value of y\n";
    cin>>y;
    cout<<x<<y<<endl;
    //remake(x,y);
    remake_ptr(&x,&y);
    cout<<"X: "<<x<<"; Y: "<<y;
}




--------------------
user posted image
PM WWW   Вверх
apook
Дата 1.4.2007, 14:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 794
Регистрация: 12.7.2006

Репутация: 10
Всего: 23



Решение второй задачи (с исп и указателей и ссылок) число Армстронга
просто название понравилось smile правда не проверял бо не знаю такого числа!

                                                    --== число Армстронга ==--
---------------------------------------------------------------------------------------------------------
Код

#include<stdio.h>
#include<string.h>
#include<math.h>
#include<stdlib.h>

#define LEN -3
#define DIV -2
#define VAL -1


long ARMSTRONG( int *Num )
{
int i, summ=0;
long value=0;
for( i=0; i<Num[ LEN ]; ++i )
    summ+=Num[ i ];
value=pow( summ, Num[ DIV ] );
return ( value!=Num[ VAL ] ) ? (-1) : 0;
}


void main()
{
int i, j, num[ 10 ];
char s[ 4 ];

printf( "Введите число из 2-x 3-x чисел:" );
fgets( s, 4, stdin );
printf( "Ведите число больше 0:" );
scanf( "%d", &j );

for( i=0; s[ i ]!='\0'; ++i );
num[ 0 ]=i;
num[ 1 ]=j;
num[ 2 ]=atoi( s );
for( i=3, j=0; j<num[ 0 ]; ++i, ++j )
    num[ i ]=(s[ j ]-48);

printf( "Это %s Число Армстронга\n", (ARMSTRONG(&num[ 3 ])==0) ? "" : "Не" );
return;
}


Это сообщение отредактировал(а) apook - 1.4.2007, 17:18


--------------------
Мои руки из дуба, голова из свинца ну и пусть ...
PM MAIL   Вверх
powerfox
Дата 1.4.2007, 16:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I wanna fork()
****


Профиль
Группа: Комодератор
Сообщений: 3990
Регистрация: 1.10.2005
Где: Санкт-Петербург

Репутация: 3
Всего: 97



apook, что-то ты понаписывал...


Цитата(apook @  1.4.2007,  15:56 Найти цитируемый пост)
long ARMSTRONG( int *Num )


Цитата(apook @  1.4.2007,  15:56 Найти цитируемый пост)
for( i=0; i<Num[ LEN ]; ++i )    
    summ+=Num[ i ];


Num у тебя указатель на int, а не int[]. Эррорить будет. И в main что-то странное.



--------------------
user posted image
PM WWW   Вверх
apook
Дата 1.4.2007, 16:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 794
Регистрация: 12.7.2006

Репутация: 10
Всего: 23



powerfox  Не гони волну ни каких эрроров

int *Num это как-раз таки указатель на массив num[]


--------------------
Мои руки из дуба, голова из свинца ну и пусть ...
PM MAIL   Вверх
vinter
Дата 1.4.2007, 16:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

Репутация: 1
Всего: 56



Цитата
for( i=0; s[ i ]!='\0'; ++i );


зачем? чем strlen не устраивает??
Цитата(powerfox @  1.4.2007,  16:20 Найти цитируемый пост)
Num у тебя указатель на int, а не int[]

отбросив некотырые аспекты, это одно и тоже.
Цитата(apook @  1.4.2007,  16:34 Найти цитируемый пост)
int *Num это как-раз таки указатель на массив num[]

тогда уж указатель на num[0]



--------------------
Мой блог
PM MAIL WWW   Вверх
apook
Дата 1.4.2007, 16:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 794
Регистрация: 12.7.2006

Репутация: 10
Всего: 23



Цитата

зачем? чем strlen не устраивает??

а чем так плохо здесь это не в напряг
Цитата

тогда уж указатель на num[0]

посмотри внимательней код-на num[3]


--------------------
Мои руки из дуба, голова из свинца ну и пусть ...
PM MAIL   Вверх
powerfox
Дата 1.4.2007, 17:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I wanna fork()
****


Профиль
Группа: Комодератор
Сообщений: 3990
Регистрация: 1.10.2005
Где: Санкт-Петербург

Репутация: 3
Всего: 97



Вот решение второй задачи c указателями,. Проверяет int'ы.

Код

#include <iostream>
#include <sstream>
#include <string>
using namespace std;
bool check(const int *number)
{
    int summ=0;
    int buf;
    int num = *number;
    ostringstream s;
    s<<num;
    string str = s.str();
    for (int i =0; i < str.size(); ++i)
        {    
            int digit=1;
            buf = str[i] - '0';
            for (int i =1; i<=str.size(); i++)
            {
                digit*=buf;
            }
            summ+=digit;

        }
    if (summ == *number)
        return 1;
    else
        return 0;
}


int main()
{

    for (int i =10; i<=999;i++)
       if (check(&i) )
        cout<<i<<" is a Armstrong number"<<endl;
    return 0;
}



Добавлено через 2 минуты и 9 секунд
Цитата(apook @  1.4.2007,  17:34 Найти цитируемый пост)
powerfox  Не гони волну ни каких эрроров

int *Num это как-раз таки указатель на массив num[]


Мои извинения. Но такая функция очень тяжело читается. Куда лучше, чтоб она с int работала, а не с массивом.


--------------------
user posted image
PM WWW   Вверх
apook
Дата 1.4.2007, 17:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 794
Регистрация: 12.7.2006

Репутация: 10
Всего: 23



К слову сказать если товарищь не предлагает своих вариантов 
возникает подозрение что ему не важна читабельность т.к
разбираться в ней не собирается.



--------------------
Мои руки из дуба, голова из свинца ну и пусть ...
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.0491 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.