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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 15.10.2013, 21:32   #1
Maniffestus
Новичок
Джуниор
 
Регистрация: 15.10.2013
Сообщений: 4
Сообщение Проблема с ссылками и указателями.(С++)

Добрый вечер программисты! В общем, такая проблема: Когда выбираю передачу по указателю или по ссылке - значения цифр - нули. Причем при выборе по аргументу все в порядке!
Сама задача:Дано трехзначное натуральное n. Верно ли, что это число содержит ровно три одинаковые цифры? Вывести на экран 1 -если да, 0 - если нет.
Сделать нужно с помощью функций, с передачей по значению, указателю и ссылке соответственно.
Прошу помочь!
Вот код:
Код:
#include <iostream>
#include <clocale>
#include <windows.h>

using namespace std;

static int result;
int menu();
int dream(int a,int b, int c);//Прототипы ф-ций.
int dream1(int *a1,int *b1,int *c1);
int dream2(int &a2, int &b2, int &c2);

int main()
{
    using std::wcout;
    using std::setlocale;
    setlocale(LC_ALL,"");
    system("color 0C");
    int n;
    cout << "Введите трехначное число:" << endl;
    cin>>n;
        /*if(n<100||n>999)
    {
        cout<<"Число не трехзначное."<<endl;
        return 0;
    }
    else
    {*/
        while(1)
    {
        switch(menu())
        {
            case 1: dream(n,n,n); break;
            case 2: dream1(&n,&n,&n); break;
            case 3: dream2(n,n,n); break;
            case 4: return 0; break;
            default: cout<<"Нет такого пункта меню."<<endl; break;
        }
    }
    //}
    if(result==1)
    {
        cout<<"Все цифры числа равны. (1)."<<endl;
    }
    else cout<<"Цифры числа различны. (0)."<<endl;
    return 0;
}
int menu()
{
    int m=0;
    cout<<"Передача данных через(?):"<<endl;
    cout<<"1 - Аргумент. "<<endl;
    cout<<"2 - Указатель. "<<endl;
    cout<<"3 - Ссылка."<<endl;
    cout<<"4 - Завершение работы программы(Exit)."<<endl;
    cin>>m;
    return m;

}
int dream(int a,int b, int c)
{
   cout<<" "<<a<<" "<<b<<" "<<c<<endl;
    a=a/100;//1 цифра трехзначного числа.
    b=(b%100)/10;//2 цифра трехзначного числа.
    c=c%10;//3 цифра трехзначного числа.
    cout<<" "<<a<<" "<<b<<" "<<c<<endl;
    if(a!=b||a!=c||b!=a||b!=c||c!=a||c!=b)//Объявляем условие выполнения программой поставленной задачи.
    {//Если условие выполняется, то:
        result=1; cout<<"Успех! (1)."<<endl;
    }
    else
    {
        result=0; cout <<"Неудача! (0)."<<endl;
    }
}
int dream1(int *a1,int *b1,int *c1)
{
    cout<<" "<<*a1<<" "<<*b1<<" "<<*c1<<endl;
    *a1=*a1/100;//1 цифра трехзначного числа.
    *b1=(*b1%100)/10;//2 цифра трехзначного числа.
    *c1=*c1%10;//3 цифра трехзначного числа.
    cout<<" "<<*a1<<" "<<*b1<<" "<<*c1<<endl;
    if(*a1!=*b1||*a1!=*c1||*b1!=*a1||*b1!=*c1||*c1!=*a1||*c1!=*b1)//Объявляем условие выполнения программой поставленной задачи.
    {//Если условие выполняется, то:
        result=1; cout<<"Успех! (1)."<<endl;
    }
    else
    {
        result=0; cout <<"Неудача! (0)."<<endl;
    }
}
int dream2(int &a2, int &b2, int &c2)
{
    cout<<" "<<a2<<" "<<b2<<" "<<c2<<endl;
    a2=a2/100;//1 цифра трехзначного числа.
    b2=(b2%100)/10;//2 цифра трехзначного числа.
    c2=c2%10;//3 цифра трехзначного числа.
    cout<<" "<<a2<<" "<<b2<<" "<<c2<<endl;
    if(a2!=b2||a2!=c2||b2!=a2||b2!=c2||c2!=a2||c2!=b2)//Объявляем условие выполнения программой поставленной задачи.
    {//Если условие выполняется, то:
        result=1; cout<<"Успех! (1)."<<endl;
    }
    else
    {
        result=0; cout <<"Неудача! (0)."<<endl;
    }
}
Maniffestus вне форума Ответить с цитированием
Старый 15.10.2013, 21:54   #2
7apacb
Новичок
Джуниор
 
Регистрация: 15.10.2013
Сообщений: 13
По умолчанию

Код:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>


int main()
{
	char *a = "333";
	int i, j = 0;
	char *b;

	b = (char *) malloc(2);
	memset(b, 0, 2);
	memcpy(b, a, 1);


	for(i = 0; i < strlen(a); i++)
		if(!strncmp(b, a + i, 1))
			j++;

		if(j == 3)
			printf("....");



return 0;
}

Последний раз редактировалось Stilet; 15.10.2013 в 23:44.
7apacb вне форума Ответить с цитированием
Старый 15.10.2013, 21:59   #3
Maniffestus
Новичок
Джуниор
 
Регистрация: 15.10.2013
Сообщений: 4
По умолчанию

Замечательно. Но где в моём коде ошибка? Особое внимание на dream1 и dream2 прошу обратить. С присвоением значений там нет ошибки(как мне кажется), но когда идет операция разбиения на цифры, a1,b1,c1 и a2,b2,c2 просто превращаются в нули. Спасибо...
Maniffestus вне форума Ответить с цитированием
Старый 15.10.2013, 22:05   #4
7apacb
Новичок
Джуниор
 
Регистрация: 15.10.2013
Сообщений: 13
По умолчанию

Цитата:
Сообщение от Maniffestus Посмотреть сообщение
Замечательно. Но где в моём коде ошибка? Особое внимание на dream1 и dream2 прошу обратить. С присвоением значений там нет ошибки(как мне кажется), но когда идет операция разбиения на цифры, a1,b1,c1 и a2,b2,c2 просто превращаются в нули. Спасибо...
#define dbg(a) count<<a<<endl;

пробовали?


P.S. *int - не есть хорошо(посмотрите в отладчике)
7apacb вне форума Ответить с цитированием
Старый 15.10.2013, 22:12   #5
Maniffestus
Новичок
Джуниор
 
Регистрация: 15.10.2013
Сообщений: 4
По умолчанию

Цитата:
Сообщение от 7apacb Посмотреть сообщение
#define dbg(a) count<<a<<endl;

пробовали?


P.S. *int - не есть хорошо(посмотрите в отладчике)
Нет, мне не знакомо это, недавно изучаю С++, поэтому такие вопросы. Просто нужно что-то подправить в тех функциях, а именно меня волнует вопрос, почему не разбивается число на цифры через указатели и ссылки. Еще раз спасибо
Maniffestus вне форума Ответить с цитированием
Старый 15.10.2013, 22:20   #6
7apacb
Новичок
Джуниор
 
Регистрация: 15.10.2013
Сообщений: 13
По умолчанию

бинарный сдвиг(shift to the left/right) посмотрите что такое

и "плюсы" я бы вам не советовал изучать, лучше учите чистый С

хотя... в ЛС скиньте Ваш контакт в icq/jabber/skype - объясню что такое указатели

Последний раз редактировалось Stilet; 15.10.2013 в 23:44.
7apacb вне форума Ответить с цитированием
Старый 15.10.2013, 22:32   #7
Maniffestus
Новичок
Джуниор
 
Регистрация: 15.10.2013
Сообщений: 4
По умолчанию

Цитата:
Сообщение от 7apacb Посмотреть сообщение
хотя... в ЛС скиньте Ваш контакт в icq/jabber/skype - объясню что такое указатели
skype: manifestus4
Maniffestus вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с ссылками! prodll HTML и CSS 2 25.09.2013 07:34
Проблема с ссылками Pein95 PHP 2 05.05.2012 18:08
Проблема со ссылками Zhenya-Pvl PHP 4 13.07.2011 07:56
проблема с ссылками Lunovar HTML и CSS 1 31.03.2011 02:29
разница между указателями и ссылками Dimarik Общие вопросы C/C++ 16 10.05.2009 03:13