Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.11.2011, 06:46   #1
Tiva
Пользователь
 
Регистрация: 23.11.2011
Сообщений: 49
По умолчанию задача с++(переделать под указатели)

Код:
#include <iostream>
using namespace std;
#include <locale>
int spisok(int x, int* ics);
int main(void)
{
    setlocale(LC_CTYPE, "russian");
    int k=0,x;
    int* ics; // тут подсчитывает кол-во нужных трехзначных чисел
    *ics=0;
    cout<<"Введите трехзначное число:"<<endl;
    cin>>x;
    if ((x/100==0)||(x/1000!=0)) cout<<"Вы ввели не трехзначное число"<<endl;
    else
    {
        cout<<spisok(x, &ics);
        cout<<"Таких чисел "<<ics<<" штук"<<endl;
    }
   
   
}

int spisok(int x, int *ics)
/*
Найти и распечатать все трехзначные числа, сумма цифр которых равна сумме цифр вводимому с клавиатуры числу.
Подсчитать также количество та-ких чисел или сообщить о том, что их нет.
*/
{
    int c,c1,c2,c3,i,ic,i1,i2,i3;
/*
с - сумма цифр числа с клавиатуры
с1 - первая цифра(сотни)
с2 - вторая(десятки)
с3 - третья(единицы)
ic - сумма цифр каждого трехзначного числа из цикла
ic1,ic2,ic3 - сотни\десятки\единицы каждого числа из цикла
*/
   
        c1=x/100;
        c2=x/10;
        c2=c2%10;
        c3=x%10;
        c=c1+c2+c3;
        cout<<"Список трехзначных чисел, сумма цифр которых равнa "<<c<<":"<<endl;
        for (i=100; i<1000; i++)
        {
                i1=i/100;
                i2=i/10;
                i2=i2%10;
                i3=i%10;
                ic=i1+i2+i3;
                if (ic==c)
                {
                    cout<<i<<endl;
                    *ics=*ics+1;
                   
                }

        }
       
        return 0;

       
}
вот код
сперва был не много другой, без указателей, и программа работала
сказали переделать чтоб кол-во таких чисел считалось через указатели, я сделал, но не работает. Подскажите, в чем ошибся?

ps - visual studio 2008

Последний раз редактировалось Tiva; 23.11.2011 в 06:55. Причина: подписал переменные
Tiva вне форума Ответить с цитированием
Старый 23.11.2011, 11:49   #2
_kilik_
Пользователь
 
Аватар для _kilik_
 
Регистрация: 16.08.2011
Сообщений: 69
По умолчанию

1)Указатель нужно инициализировать до его использования.
К примеру:
Int t=5;
Int *k;
K=&t;
///////////////////////
В вашем случае можно сделать так :
int *ics=new int;
перед выходом из программы удаляем
delete ics;

/////////////////////
2)вы немного напутали с передачей параметров функции
Вы на писали

cout<<spisok(x, &ics);
нужно
cout<<spisok(x, ics);

исправлено:
Код:

#include <iostream>
using namespace std;

int spisok(int x, int* ics);
int main()
{
    setlocale(LC_CTYPE, "russian");
    int k=0,x;
    int *ics=new int; // тут подсчитывает кол-во нужных трехзначных чисел
    *ics=0;
    cout<<"Введите трехзначное число:"<<endl;
    cin>>x;
    if ((x/100==0)||(x/1000!=0)) cout<<"Вы ввели не трехзначное число"<<endl;
    else
    {
        cout<<spisok(x, ics);
        cout<<"Таких чисел "<<*ics<<" штук"<<endl;
    }
   
   delete ics;
   system ("pause");
   return 0;
}

int spisok(int x, int *ics)
/*
Найти и распечатать все трехзначные числа, сумма цифр которых равна сумме цифр вводимому с клавиатуры числу.
Подсчитать также количество та-ких чисел или сообщить о том, что их нет.
*/
{
    int c,c1,c2,c3,i,ic,i1,i2,i3;
/*
с - сумма цифр числа с клавиатуры
с1 - первая цифра(сотни)
с2 - вторая(десятки)
с3 - третья(единицы)
ic - сумма цифр каждого трехзначного числа из цикла
ic1,ic2,ic3 - сотни\десятки\единицы каждого числа из цикла
*/
   
        c1=x/100;
        c2=x/10;
        c2=c2%10;
        c3=x%10;
        c=c1+c2+c3;
        cout<<"Список трехзначных чисел, сумма цифр которых равнa "<<c<<":"<<endl;
        for (i=100; i<1000; i++)
        {
                i1=i/100;
                i2=i/10;
                i2=i2%10;
                i3=i%10;
                ic=i1+i2+i3;
                if (ic==c)
                {
                    cout<<i<<endl;
                    *ics=*ics+1;
                   
                }

        }
       
        return 0;

       
}

Последний раз редактировалось _kilik_; 23.11.2011 в 12:32.
_kilik_ вне форума Ответить с цитированием
Старый 23.11.2011, 12:57   #3
Tiva
Пользователь
 
Регистрация: 23.11.2011
Сообщений: 49
По умолчанию

спасибо!

получается я просто не правильно инициализировал указатель и не удалил его потом, да?

амперсант я поставил там потому что так учили
вызывая функцию, с указателем, перед указателем ставить амперсант... это на корню не верно?)
Tiva вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Переделать прогу под WinApi malcolm666 Фриланс 3 18.12.2010 09:33
переделать прогу под Linux Sparky Помощь студентам 4 26.05.2010 23:54
переделать под windows al072 C/C++ Сетевое программирование 13 16.02.2010 20:57
задача на с. указатели функции строки(хз как переделать) нонфактор Помощь студентам 1 12.01.2010 16:46
Переделать программу под структуры. Си++ Влад-mego Помощь студентам 0 12.04.2009 22:14