Страница 1 из 2
Использовать функцию ввода двоичного вектора
Добавлено: 20 янв 2016, 11:55
uncontrol1
интервал в булевом пространстве размерности N задан своими максимальными и минимальными элементам. Вывести соответствующий интервалу троичный вектор ( 1011, 1000-->10--).
Код: Выделить всё
#include "stdafx.h"
#include <iostream>
#include <math.h>
using namespace std;
unsigned int vvod(char s[32], int n)
{
unsigned int b = 0;
n = strlen(s);
gets_s :( s);
for (int i = 0; i < n; i++)
{
if (s[i] == '1') b = b | (1 << (n - i - 1));
}
return b;
}
int main()
{
int n;
char str1[32];
cin >> str1;
char str2[32];
cin >> str2;
n = strlen(str1);
bool fl = true;
for (int i = 0; i < n && fl; i++)
fl = fl && (str1[i] >= str2[i]);
if (fl)
for (int i = 0; i < n; i++)
cout << (str1[i] == str2[i] ? str1[i] : '-');
else
cout << "ne interval\n";
return 0;
}
нужно было сделать , через функцию ввода двоичного вектора , но у меня получается , что она вообще не задействована
помогите исправить
Re: Использовать функцию ввода двоичного вектора
Добавлено: 20 янв 2016, 12:08
Romeo
- Функция vvod написано достаточно криво (мало того, что алгоритм перевода усложнен без надобности, так ещё есть подозрение, что функция вообще не компилируется).
- Если вводить чисто через эту функцию, то формирование третьего элемента вектора будет более сложным, чем при строковых входных данных.
- Из всего вышеперечисленного возникает резонный вопрос: зачем вообще использовать эту функцию, если она усложняет как ввод, так и дальнейшую работу с числами?
Re: Использовать функцию ввода двоичного вектора
Добавлено: 20 янв 2016, 12:20
uncontrol1
Romeo писал(а):- Функция vvod написано достаточно криво (мало того, что алгоритм перевода усложнен без надобности, так ещё есть подозрение, что функция вообще не компилируется).
- Если вводить чисто через эту функцию, то формирование третьего элемента вектора будет более сложным, чем при строковых входных данных.
- Из всего вышеперечисленного возникает резонный вопрос: зачем вообще использовать эту функцию, если она усложняет как ввод, так и дальнейшую работу с числами?
из-за того , что преподу нужно именно , через функцию ввода , без нее не принимает
Re: Использовать функцию ввода двоичного вектора
Добавлено: 20 янв 2016, 12:36
Romeo
Хорошо, тогда вопросы по функции vvod.
- Зачем в неё передаётся параметр s, а потом он же читает с помощью gets?
- Зачем в неё передаётся параметр n, а потом его значение перетирается результатом вызова функции strlen?
- Зачем используется такой сложный алгоритм перевода, если достаточно делать сдвиг всего результата на каждой итерации, что резко упростит формулу,
- Как быть с ошибкой компиляции gets_s:(s)?
Как минимум из-за последнего пункта функцию нельзя использовать в этой программе. Я очень сомневаюсь, что преподаватель может настаивать на том, чтобы студент использовал функцию, которая не компилируется.
Re: Использовать функцию ввода двоичного вектора
Добавлено: 20 янв 2016, 13:12
uncontrol1
Romeo писал(а):Хорошо, тогда вопросы по функции vvod.
- Зачем в неё передаётся параметр s, а потом он же читает с помощью gets?
- Зачем в неё передаётся параметр n, а потом его значение перетирается результатом вызова функции strlen?
- Зачем используется такой сложный алгоритм перевода, если достаточно делать сдвиг всего результата на каждой итерации, что резко упростит формулу,
- Как быть с ошибкой компиляции gets_s

s)?
Как минимум из-за последнего пункта функцию нельзя использовать в этой программе. Я очень сомневаюсь, что преподаватель может настаивать на том, чтобы студент использовал функцию, которая не компилируется.
это был первоначальный вариант который давал препод , я думаю , что
Код: Выделить всё
unsigned int vvod(char s[32],int n)
{unsigned int b=0;
for(int i=0;i<n;i++)
if(s[i]=='1') b=b|(1«(n-i-1));
return b;
это функция , а остальное предназначалось самой проге.
А насчет алгоритма , что дали тем и пользуюсь.
Re: Использовать функцию ввода двоичного вектора
Добавлено: 20 янв 2016, 14:15
Romeo
Ну хорошо. Можно тогда сделать вот так: считываешь два числа с помощью vvod, потом переводишь их в строки и оставшуюся часть программы, которая работает со строками, оставляешь, как есть
Написать функцию, которая из числа делает строку, осилишь?
Re: Использовать функцию ввода двоичного вектора
Добавлено: 20 янв 2016, 14:33
uncontrol1
Romeo писал(а):Ну хорошо. Можно тогда сделать вот так: считываешь два числа с помощью vvod, потом переводишь их в строки и оставшуюся часть программы, которая работает со строками, оставляешь, как есть
Написать функцию, которая из числа делает строку, осилишь?
что-то типо ?
Код: Выделить всё
void main() {
char str[1];
int number = 123;
cout<<(str, number);
}
Re: Использовать функцию ввода двоичного вектора
Добавлено: 20 янв 2016, 14:44
Romeo
Нет, cout считывает данные с клавиатуры, так что не имеет никакого отношения к переводу. Более того, то, что ты написал, вообще не скомпилируется.
Нужно написать алгоритм, который проанализирует биты числа и построит по ним строку. Перевод из строки в число уже сделан в функции vvod, а нам нужно выполнить обратное преобразование.
Re: Использовать функцию ввода двоичного вектора
Добавлено: 20 янв 2016, 15:27
Сионист
Как минимум из-за последнего пункта функцию нельзя использовать в этой программе. Я очень сомневаюсь, что преподаватель может настаивать на том, чтобы студент использовал функцию, которая не компилируется.
Задание может быть и на поиск преднамеренной ошибки.
Re: Использовать функцию ввода двоичного вектора
Добавлено: 20 янв 2016, 16:31
uncontrol1
Romeo писал(а):Нет, cout считывает данные с клавиатуры, так что не имеет никакого отношения к переводу. Более того, то, что ты написал, вообще не скомпилируется.
Нужно написать алгоритм, который проанализирует биты числа и построит по ним строку. Перевод из строки в число уже сделан в функции vvod, а нам нужно выполнить обратное преобразование.
не могу догнать как перевести , если не cout , sprintf не работает