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

Машана Тюринга - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.67
Ylubochka
14 / 0 / 1
Регистрация: 10.11.2011
Сообщений: 15
16.11.2011, 22:02     Машана Тюринга #1
Здравствуйте. У меня возникла проблема с заданием на курсовой роботе. Мне нужно написать алгоритм перевода чисел с 16-ой системы чиления в 2-у....НО, на Машине Тюрига. И ещё написать програму на С++.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.11.2011, 22:02     Машана Тюринга
Посмотрите здесь:

C++ Машина Тюринга
Машина Тюринга. Квадраты чисел
Задание в машине Тюринга
Перенос кода с С++ на С# (Машина Тюринга) C#

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ylubochka
14 / 0 / 1
Регистрация: 10.11.2011
Сообщений: 15
16.11.2011, 22:16  [ТС]     Машана Тюринга #2
Надеюсь что есть))) Я например придумала такой тяжолый, длинный, неуклюжий алгоритм.. И оказалось, что он работает лишь для отдельного примера(((

Добавлено через 3 минуты
А в С++ прогу можете показать как писать и обьяснить
alkagolik
 Аватар для alkagolik
1510 / 616 / 79
Регистрация: 15.07.2011
Сообщений: 3,552
16.11.2011, 22:23     Машана Тюринга #3
Ylubochka, писать такие программы нет смысла. все числа и так представлены в двоичном формате, а считать число как 16-чное нет проблем. Вы имели ввиду машину Тьюринга. Тут чуть ниже есть раздел форума алгоритмы.
Ylubochka
14 / 0 / 1
Регистрация: 10.11.2011
Сообщений: 15
16.11.2011, 22:32  [ТС]     Машана Тюринга #4
да). Тьюринга) но на С++ тоже нужно написать програму которая с 16 в 2 переводит.

Добавлено через 1 минуту
А что за ссылка?

Добавлено через 1 минуту
а форум не могу найти... Как слепой котёнок тут((
alkagolik
 Аватар для alkagolik
1510 / 616 / 79
Регистрация: 15.07.2011
Сообщений: 3,552
16.11.2011, 22:33     Машана Тюринга #5
Цитата Сообщение от Ylubochka Посмотреть сообщение
А что за ссылка?
мировоззрение
Цитата Сообщение от Ylubochka Посмотреть сообщение
но на С++ тоже нужно написать програму
на Си устроит?
Ylubochka
14 / 0 / 1
Регистрация: 10.11.2011
Сообщений: 15
16.11.2011, 22:35  [ТС]     Машана Тюринга #6
Я верующая, как-то не привычно слушать этого человека...

Добавлено через 19 секунд
Лучше на С++
alkagolik
 Аватар для alkagolik
1510 / 616 / 79
Регистрация: 15.07.2011
Сообщений: 3,552
16.11.2011, 22:57     Машана Тюринга #7
да, я думаю что нету смысла изобретать велосипед когда есть готовый. вот Си стайл, лень писать шаблон по переводу в СС
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <cstdio>
 
int main()
{
    unsigned int x, tmp = (1 << 31);
    printf("введите шестнадцатиричное число х = ");
    scanf("%x", &x);
    while ( x )
    {
        printf("%u", (x & tmp) >> 31);
        x <<= 1;
    }
    return 0;
}
Ylubochka
14 / 0 / 1
Регистрация: 10.11.2011
Сообщений: 15
16.11.2011, 23:00  [ТС]     Машана Тюринга #8
спасибо только не понимаю как она работает(
alkagolik
 Аватар для alkagolik
1510 / 616 / 79
Регистрация: 15.07.2011
Сообщений: 3,552
16.11.2011, 23:16     Машана Тюринга #9
Цитата Сообщение от Ylubochka Посмотреть сообщение
спасибо только не понимаю как она работает(
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
25
26
27
28
29
30
#include <cstdio>
 
int main()
{
    unsigned int x, tmp = (1 << 31);
/*
переменная tmp = 2 в степени 31 т.е. мы устанавливаем 32 й бит (их 
всего 32) в единицу, а все остальные биты в нуль
*/
    printf("введите шестнадцатиричное число х = ");
    scanf("%x", &x);
/*
спецификатор %x сообщает компилятору о том что число шестнадцатиричное
*/
    while ( x ) //пока х не равен 0
    {
        printf("%u", (x & tmp) >> 31);
/*
спецификатор %u сообщает компилятору о том что число беззнаковое
это значит что все 32 бита отведены под значения, в то время как в знаковых
32й бит отвечает за знак "+" или "-"
(x & tmp) >> 31 мы производим векторное логическое И (конъюнкция) двух значений
поскольку мы знаем точно что tmp во всех битах кроме 32-го имеет нули, то мы извлекаем из этого
выгоду, а именно - значение 32-го бита переменной tmp, после чего мы сдвигаем это значение
на 31 позицию вправо, т.е. устанавливаем его из 32-го бита в 1-й и получаем 0 или 1
*/
        x <<= 1; //сдвигаем х на 1 бит влево
    }
    return 0;
}
я забыл учесть особенности архитектур

Добавлено через 5 минут
вот так с учетом архитектур
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <cstdio>
 
int main()
{
    unsigned int x, tmp = (1 << (sizeof(unsigned int) * 8 - 1) );
    printf("введите десятично число х = ");
    scanf("%x", &x);
    while ( x )
    {
        printf("%u", (x & tmp) >> (sizeof(unsigned int) * 8 - 1));
        x <<= 1;
    }
    return 0;
}
Ylubochka
14 / 0 / 1
Регистрация: 10.11.2011
Сообщений: 15
16.11.2011, 23:24  [ТС]     Машана Тюринга #10
Я уже не хочу на программиста учиться(

Пойду завтра старший курс мучать, пусть обьяснят мне на пальцах...

Но я таки пойму)

Добавлено через 3 минуты
возьму твою прогу)))

Добавлено через 47 секунд
а вопрос, эта прога будет работать?

Добавлено через 38 секунд
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
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#include <iostream.h>
#include <string.h>
#include <ctype.h>
#include <math.h>
#include <stdio.h>
#include <conio.h>
 
int HEX_TO_DEC(char st[10])
{
    int i,s,k,p;
    s=0;
    p=strlen(st)-1;
    for (i=0; st[i]!='\0'; i++)
    {
        switch (toupper(st[i]))
        {
        case 'A','a': 1010; break;
        case 'B','b': k=1011; break;
        case 'C','c': k=1100; break;
        case 'D,'d'': k=1101; break;
        case 'E','e': k=1110; break;
        case 'F','f': k=1111; break;
        case '1': k=0001; break;
        case '2': k=0010; break;
        case '3': k=0010; break;
        case '4': k=0100; break;
        case '5': k=0101; break;
        case '6': k=0110; break;
        case '7': k=0111; break;
        case '8': k=1000; break;
        case '9': k=1001; break;
        case '0': k=0; break;
        }
        s=s+k*pow(16,p);
        p--;
    }
    cout<<s;
 return 0;
}
 
void main()
{
    char s[10];
    char ch;
    cout<<"Plese, enter string: \n";
    cin>>s;
    cout<<"Rezultant: ";
    HEX_TO_DEC(s);
    cin>>ch;
}
alkagolik
 Аватар для alkagolik
1510 / 616 / 79
Регистрация: 15.07.2011
Сообщений: 3,552
16.11.2011, 23:37     Машана Тюринга #11
Ylubochka, "навскидку" нет. case 1 подразумевает также и обработку следующего символа. И алгоритм неверный
Ylubochka
14 / 0 / 1
Регистрация: 10.11.2011
Сообщений: 15
16.11.2011, 23:39  [ТС]     Машана Тюринга #12
тоесть прогу будет понимать что Аа = 1010? а не то что А=1010 и а=1010... Просто я думала, чтоб регистр не имел значения.
Net_Wanderer
235 / 208 / 19
Регистрация: 08.06.2011
Сообщений: 467
16.11.2011, 23:41     Машана Тюринга #13
Цитата Сообщение от alkagolik Посмотреть сообщение
вот так с учетом архитектур
ну тогда замените еще 8 на CHAR_BIT из limits.h
на случай, если в байте не восемь бит будет...
Ylubochka
14 / 0 / 1
Регистрация: 10.11.2011
Сообщений: 15
16.11.2011, 23:41  [ТС]     Машана Тюринга #14
алгоритм кстати с этого сайта, но для (с 16 в 10)... жаль...
alkagolik
 Аватар для alkagolik
1510 / 616 / 79
Регистрация: 15.07.2011
Сообщений: 3,552
16.11.2011, 23:50     Машана Тюринга #15
Цитата Сообщение от Net_Wanderer Посмотреть сообщение
на случай, если в байте не восемь бит будет...
это уже частности реалии утвердились в такой форме.
улыбочка, посмотрите сюда

посмотрите книгу Ахо А., Хопкрофт Дж., Ульман Дж. "Построение и анализ вычислительных алгоритмов" на странице 39. Там описывается машина Тьюринга.
Ylubochka
14 / 0 / 1
Регистрация: 10.11.2011
Сообщений: 15
17.11.2011, 00:15  [ТС]     Машана Тюринга #16
ммм, сейчас поищу) Спасибо огромное) мне это очень кстати) т.к. будет ещё что в курсовую дописать)
greshnikk
 Аватар для greshnikk
30 / 30 / 0
Регистрация: 05.11.2008
Сообщений: 162
17.11.2011, 00:21     Машана Тюринга #17
Цитата Сообщение от Ylubochka Посмотреть сообщение
НО, на Машине Тюрига.
Скажите, Вам нужно к какому дню ? Дело в том, что у меня индивидуальное задание в университете - написать на C++, эту самую машину Тьюринга, которое необходимо закончить до декабря и реализовать на ней программу перевода из одной системы счисления в другую. Транслятор должен работать и как компилятор и как интерпретатор. Также он должен рисовать таблицу и коды, с возможностью считывания данных из файла, учитывая точки останова, с экраном наблюдения состояния заданных ячеек. В общем нужен полноценный транслятор. Если сроки не слишком поздние буду рад с Вами поделиться своим проектом.
Ylubochka
14 / 0 / 1
Регистрация: 10.11.2011
Сообщений: 15
17.11.2011, 00:38  [ТС]     Машана Тюринга #18
У меня в следущем месяце, 3 числа защита курсовой роботы, но у меня очень малый уровень знаний в этой области и есть желание не просто сдать и как-то там защитить, а разобраться и уметь доходчиво и на пальцах помочь другим людям с этим.

Добавлено через 13 минут
Очень рада, что зарегестрирована сдесь. Я одна из много количества новичков, но вниманием не была обделена. Что самое главное, нужную мне информацыю предоставили). Заодно я уверилась, что я ещё совсем ни чего не знаю и нет времени для лени) учить нужно) Огромное спасибо вам всем)
greshnikk
 Аватар для greshnikk
30 / 30 / 0
Регистрация: 05.11.2008
Сообщений: 162
17.11.2011, 00:47     Машана Тюринга #19
Цитата Сообщение от Ylubochka Посмотреть сообщение
разобраться и уметь доходчиво и на пальцах помочь другим людям с этим.
Я пишу свой проект как конечный продукт для потребителя, что означает что я уделяю большое внимание структурированию кода и комментариям. Но если Вас это не устраивает все равно был рад помочь.
Yandex
Объявления
17.11.2011, 00:47     Машана Тюринга
Ответ Создать тему
Опции темы

Текущее время: 16:26. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru