Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.56/18: Рейтинг темы: голосов - 18, средняя оценка - 4.56
0 / 0 / 1
Регистрация: 19.05.2010
Сообщений: 30
1

Преобразовать string в последовательность чисел

24.06.2010, 11:53. Показов 3568. Ответов 40
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Помогите, пожалуйста, понять свои ошибки.. не могу правильно написать аргументы функций... и вообще наверное проблема в самих функциях... задача такая: у меня есть стринг(набор 1 и 0)= TMS_IR.. мне нужно преобразовать его в последовательность чисел..типа двоичный код..и на определенном этапе "включить" следующий сигнал - заданный символьной строкой... и затем вывести это все на экран... причем запуск программы должен быть только после ввода команды "idcode" ..
буду очень благодарна за комментарии в программе...
и еще... где правильнее поставить определение переменных и почему?
теории начиталась.. а практики 0..


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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
char  comand,
      instruction[7],
      TMS_IR[]="1111101100000000",  
      IDCode[]= "01001";
int  i=0,
     n=0,    
     k=0,
     TMS,
     TDI,
       c;   
 
int  TMSf(char TMS_IR[]);
int  Instr();
                        
int TMSf(char ,int )
 
{
 
//int  c=0;
    
          for (i=0; i< 17;i++)
           {if (TMS_IR[i] == '1')
              TMS = 1;
            if (TMS_IR[i] == '0')
             TMS = 0;
           else TMS = 0;
            }
           printf("%i ", TMS);
           return TMS;
}                                  
 
 
 
 
int Instr(void)
{  
 
 
    for (i=11; i<17;i++)
             for (k=0; k< 6;k++)                     
             if (IDCode[k] == '1')
                 TDI = 1;
             else TDI = 0;
                     
             
             return TDI;
}
 
 
 
                                    
 
int main()
{
 
cout <<"vvedite instruction  " ;
cin >> instruction;                                     
 
comand = strcmp(instruction,"idcode");
//printf("%s  ",comand);
                       
 if (comand == 0)               
 
  {  TMSf(int i, char TMS_IR);
   Instr(int i, int k, char IDCode[]);
  
 }
 
 
//  {while (!TDI)}
else printf("Nevernaja komanda  "); 
return 0;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.06.2010, 11:53
Ответы с готовыми решениями:

Преобразовать последовательность из n вещественных чисел a1, ..., an.
Ребят подкиньте идей. Дана последовательность из n вещественных чисел a1, ..., an. Преобразовать...

Преобразовать последовательность char в string
Как преобразовать последовательность char в string? т.е. IEnumerable&lt;char&gt; в string ?

Нельзя преобразовать тип Tuple<string,string,string,string> к string
Здравствуйте, у меня возникла проблема. При запуске кода, вылезает ошибка &quot;Нельзя преобразовать тип...

Преобразовать последовательность чисел
Преобразовать последовательность чисел,заменив каждое числом, которое получается записью его...

40
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
24.06.2010, 12:50 2
программу с функциями можно сделать без функций
функция main() может содержать всю программу
переменные лучше объявлять в функции main()
и объявлять лучше вверху, чтобы всегда легко узнавать, какие переменные уже есть, а какие ещё можно создать

у функции бывает:
1. прототип (его ещё называют объявление, в C - объявление в новом стиле)
2. определение
3. вызов

они по-разному записываются и работают тоже по-разному

Добавлено через 1 минуту
C
1
char TMS_IR[] = "1111101100000000";
вот это у тебя правильно, но записать его надо в main() и имя маленькими буквами
2
146 / 146 / 32
Регистрация: 26.10.2008
Сообщений: 782
24.06.2010, 13:01 3
1)
Цитата Сообщение от Jlu Посмотреть сообщение
int TMSf(char TMS_IR[]);
Где реализация данной функции?

2)
Цитата Сообщение от Jlu Посмотреть сообщение
int TMSf(char ,int )
{
//int c=0;
for (i=0; i< 17;i++)
{if (TMS_IR[i] == '1')
TMS = 1;
if (TMS_IR[i] == '0')
TMS = 0;
else TMS = 0;
}
printf("%i ", TMS);
return TMS;
}
Где имена переменных в списке параметров?

3) Если вы объявляете функцию, то определение лучше делать уже после main.
4) Глобальные переменные лучше не делать.
5) Где отступы?
6) Лучше не использовать cout и printf одновремнно.

Думаю, так правильно:

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>
using namespace std;
 
int Instr(char IDCode[], int TDI)
{  
    int i, k;
    for (i=11; i<17;i++)
        for (k=0; k< 6;k++)
            if (IDCode[k] == '1')
                TDI = 1;
            else
                TDI = 0;
    return TDI;
}
 
int TMSf(char TMS_IR[], int TMS) 
{
    int i;
    for (i = 0; i < 17; i++)
    {
        if (TMS_IR[i] == '1')
            TMS = 1;
        if (TMS_IR[i] == '0')
            TMS = 0;
        else TMS = 0;
    }
    cout << TMS << endl;
    return TMS;
}
 
int main()
{
    char  comand, instruction[7];
    char TMS_IR[]="1111101100000000";
    char IDCode[]= "01001";
    int  i, n, k, TMS, TDI, c;
    i = n = k = TMS = TDI = 0;
 
    cout <<"vvedite instruction  " ;
    cin >> instruction;
    comand = strcmp(instruction,"idcode");
    if (comand == 0)
    {
        TMS = TMSf(TMS_IR, TMS);
        TDI = Instr(IDCode, TDI);
    }
    else 
        cout << "Nevernaja komanda\n"; 
    return 0;
}
2
0 / 0 / 1
Регистрация: 19.05.2010
Сообщений: 30
24.06.2010, 14:17  [ТС] 4
Спасибо огромное... хоть какая -то ясность наступила..

Добавлено через 27 минут
TMS и TDI на экран не выводятся... в чем может быть проблема?
0
146 / 146 / 32
Регистрация: 26.10.2008
Сообщений: 782
24.06.2010, 16:31 5
Исправьте соответствующий код на этот:
C++
1
2
3
4
5
6
if (comand == 0)
        {
                TMS = TMSf(TMS_IR, TMS);
                TDI = Instr(IDCode, TDI);
                cout << TMS << " " << TDS << endl;
        }
Добавлено через 2 минуты
И TMS выводится в функции TMSf. Если вы будете выводить в main эти значения, тогда в функции вывод на консоль можно убрать.
1
0 / 0 / 1
Регистрация: 19.05.2010
Сообщений: 30
24.06.2010, 17:20  [ТС] 6
выводит :
0 0
и больше ничего

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
int Instr(char IDCode[], int TDI)
{  
        int i, k;
        for (i=11; i<17;i++)
                for (k=0; k< 6;k++)
                        if (IDCode[k] == '1')
                                TDI = 1;
                        else
                                TDI = 0;
        return TDI;
}
 
int TMSf(char TMS_IR[], int TMS) 
{
        int i;
        for (i = 0; i < 17; i++)
        {
                if (TMS_IR[i] == '1')
                        TMS = 1;
                if (TMS_IR[i] == '0')
                        TMS = 0;
                else TMS = 0;
        }
            return TMS;
}
 
int main()
{
        char  comand, instruction[7];
        char TMS_IR[]="1111101100000000";
        char IDCode[]= "01001";
        int  i, n, k, TMS, TDI, c;
        i = n = k = TMS = TDI = 0;
 
        cout <<"vvedite instruction  " ;
        cin >> instruction;
        comand = strcmp(instruction,"idcode");
        if (comand == 0)
        {
             TMS = TMSf(TMS_IR, TMS);
             TDI = Instr(IDCode, TDI);
             cout << TMS << " " << TDI << endl;
             
        }
 
        else 
                cout << "Nevernaja komanda\n"; 
        return 0;
}
0
146 / 146 / 32
Регистрация: 26.10.2008
Сообщений: 782
24.06.2010, 17:30 7
Это ошибки в ваших функциях. Они возвращают нулевые значения.
0
0 / 0 / 1
Регистрация: 19.05.2010
Сообщений: 30
24.06.2010, 17:44  [ТС] 8
а как тогда вывести символьную строку набором цифр??
0
146 / 146 / 32
Регистрация: 26.10.2008
Сообщений: 782
24.06.2010, 18:05 9
Я немного не понял ваше задание.
Что значит вывести символьную строку набором цифр?
Если вам нужно просто вывести строку TMS_IR в таком виде как она есть, то её преобразовывать не надо, её можно просто вывести, используя стандартные функции вывода на консоль, т.е.
C++
1
cout << TMS_IR << endl;
1
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
25.06.2010, 03:58 10
C
1
2
3
4
5
    char tms_ir[] = "1111101100000000";
    int c, i;
    
    for (i = 0; (c = tms_ir[i]) != '\0'; i++)
        printf("%c" "\n", c);
ещё дальше идём
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
    char tms_ir[] = "1111101100000000";
    int arr[100], arrsize;
    int c, i;
    
    for (i = 0; (c = tms_ir[i]) != '\0'; i++) {
        /* printf("%c" "\n", c); */
        arr[i] = (c == '0') ? 0 : 1;
        printf("%d" "\n", arr[i]);
    }
 
    arrsize = i;
 
    /* теперь есть массив чисел arr,
       где каждый элемент - отдельная цифра из tms_ir,
       а количество цифр записано в arrsize */
1
0 / 0 / 1
Регистрация: 19.05.2010
Сообщений: 30
25.06.2010, 12:12  [ТС] 11
а может вот так?? а то тот вариант, который Вы предлагаете, у меня не работает


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
char tms_ir[] = "1111101100000000", arr[100] ;
    int c, i,arrsize;
    
    for (i = 0;i< (c = strlen(tms_ir)) ; i++) {
        /* printf("%c" "\n", c); */
        arr[i] = (tms_ir[i] == '0') ? 0 : 1;
        printf("%d" "\n", arr[i]);
    }
 
    arrsize = i;
 
    /* теперь есть массив чисел arr,
       где каждый элемент - отдельная цифра из tms_ir,
       а количество цифр записано в arrsize */
Добавлено через 26 минут
получилось, спасибо огромное за совет
0
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
26.06.2010, 05:46 12
не, arr должен быть int, так как в нём предполагается хранить числа
1
0 / 0 / 1
Регистрация: 19.05.2010
Сообщений: 30
26.06.2010, 12:54  [ТС] 13
скажите пожалуйста.. а как происходит вызов функций??мне нужно,чтобы функции выполнялись параллельно почти..как это сделать?????
0
146 / 146 / 32
Регистрация: 26.10.2008
Сообщений: 782
26.06.2010, 14:40 14
Чтобы функции выполнялись параллельно, для этого нужно создавать отдельные потоки.
Цитата Сообщение от Jlu Посмотреть сообщение
скажите пожалуйста.. а как происходит вызов функций??
Вас сам механизм интересует?
Если интересует просто вызов, то вы это уже применяли, когда в функции main писали

Цитата Сообщение от Jlu Посмотреть сообщение
Instr(int i, int k, char IDCode[]);
Это и есть вызов функции.
1
0 / 0 / 1
Регистрация: 19.05.2010
Сообщений: 30
26.06.2010, 15:02  [ТС] 15
а можно чуточку по-подробнее о создании отдельных потоков?
0
98 / 94 / 16
Регистрация: 16.05.2010
Сообщений: 310
26.06.2010, 15:28 16
Цитата Сообщение от Jlu Посмотреть сообщение
а можно чуточку по-подробнее о создании отдельных потоков?
это можно сделать при помощи параллельного программирования, а именно средств OpenMP, MPI. Если интересно почитайте здесь Многопоточные приложения
1
0 / 0 / 1
Регистрация: 19.05.2010
Сообщений: 30
26.06.2010, 15:40  [ТС] 17
спасибо, постараюсь разобраться
0
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
27.06.2010, 08:31 18
C
1
printf("Nevernaja komanda  ");
функция printf(), происходит вызов этой функции, в функцию передаётся один аргумент
так как строки целиком не передаются, то функция получает в качестве аргумента просто адрес первого символа строки "Nevernaja komanda ", конец строки функция определит по нуль-символу в конце строки, все строки, даже "", содержат нуль-символ '\0'
строковые литералы располагаются в неменяемой области памяти, то есть их можно читать, но нельзя редактировать

C
1
comand = strcmp(instruction,"idcode");
функция strcmp(), вызывается функция, в неё передаётся два аргумента, instruction - это символьный массив, значит он будет преобразован в адрес первого элемента массива, первого символа, "idcode" - тоже символьный массив и строковой литерал, имени у него нет, но при передаче он будет преобразован в адрес первого символа
функция возвращает значение типа int, которое сразу присваивается переменной command

printf() тоже возвращает значение типа int, количество выведенных символов, его можно проверять, она может вернуть отрицательное значение при ошибке вывода
1
0 / 0 / 1
Регистрация: 19.05.2010
Сообщений: 30
30.06.2010, 11:29  [ТС] 19
подскажите еще ,пожалуйста, у мя есть 3 массива одномерных, как мне из них сделать 1 многомерный?????
0
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
01.07.2010, 02:31 20
надо сделать многомерный массив и скопировать в него одномерные массивы
копировать можно через циклы (более точное копирование, более гибкое)
копировать можно через memcpy() (это копирование блоками, подключить <string.h> - для C или <cstring> - для C++ )
0
01.07.2010, 02:31
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.07.2010, 02:31
Помогаю со студенческими работами здесь

Преобразовать последовательность целых чисел по правилу
Здравия желаю! помогите! срочняком необходимо! буду душевно признателен))) Даны целые числа...

Преобразовать последовательность целых чисел по правилу
Даны целые числа a1,...,a2...b1.....b25. Преобразовать последовательность b1,...,b25 по правилу : ...

Преобразовать последовательность целых чисел по заданному правилу
даны целые числа a1,a2...an и b1,b2...bn. Преобразовать последовательность b1,b2...bn по правилу :...

В файле А записана последовательность целых чисел. Преобразовать их в вещественные и записать в файл В по 5 в строку.
В файле А записана последовательность целых чисел. Преобразовать их в вещественные и записать в...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru