Войти

Показать полную графическую версию : [решено] Помогите пожайлуста со сложными циклами


nekitosiks
06-12-2013, 13:42
С клавиатуры вводится двузначное число, среди всех четырехзначных чисел вывести те, которые начинаются или заканчиваются этим числом.
Как мне сделать цикл что бы он проверял и 1-ю цифру, а не только 2-ю? вот моя программа(Я взял пока что числа поменьше):


setlocale(LC_ALL, "Russian");
int n, i, a;
cout<<"Введите однозначное число ";
cin>>n;
for(i=10; i<100; i++){
if (i%10==n){
cout<<"число: "<<i<<"\t";
}}
//for (a=10; a<100; a++){
//a=a/10;
//if (a%10==n){
// cout<<"число: "<<a<<"\t";
//}}
getch();
}

lxa85
06-12-2013, 14:22
nekitosiks, так, давай чуть назад и с азов.
Для того, чтобы тебя понимали, не поленись оформить код тегом CODE, #



setlocale(LC_ALL, "Russian");
int n, i, a;
cout<<"Введите однозначное число ";
cin>>n;
for(i=10; i<100; i++){
if (i%10==n){
cout<<"число: "<<i<<"\t";
} // if
} // for
getch();
}




setlocale(LC_ALL, "Russian");
int n, i, a;
cout<<"Введите однозначное число ";
cin>>n;
for(i=10; i<100; i++){
if (i%10==n){
cout<<"число: "<<i<<"\t";
} // if
} // for
getch();
}

Правда красиво?
Так для читающий и помогающих будет понятней.

----
Теперь рассказывай, что ты придумал? Своими словами.
Вариант "Код хорошо документирован на языке С++" не подходит.
У меня такое ощущение, что ты занимаешься глупостью. Или может не глупостью, но не в ту сторону.
Это нормальный ход событий, каждый этим время от времени страдает.

Сейчас спокойненько сядь, напиши, зачем тебе нужны сравнения 1ой, 2ой, и других цифр.
Как мне сделать цикл что бы он проверял и 1-ю цифру, а не только 2-ю?
Зачем тебе это действие?

----
Порядок изложения мыслей:
Цель, задачи, как решаются, возникающие расхождения (ошибки), выводы.

Цель:
Полная постановка задачи.
Задачи:
Циклы, сравнения и т.п. Т.е. декомпозиция задачи на составляющие.
Решения:
Чётко "провязанное" решение каждой задачи
Расхождения:
Так же "провязанные" сложности в том или ином действии
Выводы:
a) Собственные рассуждения
б) Привыкай делать выводы. Работы без выводов уходят в урну, просто без раздумий (да, возможно жестоко, но это так).

nekitosiks
06-12-2013, 15:35
Сравнения 1-го и 2-го с вводимым числом мне нужно для нахождения подходящих чисел.
Если я введу число 7, то программа должна вывести: 17, 27,37,47,57,67,77,87,97,(эти числа получилось вывести) ну и 70,71,72,73,74,75,76,78,79(эти числа не получилось вывести)

lxa85
06-12-2013, 16:16
Сравнения 1-го и 2-го с вводимым числом мне нужно для нахождения подходящих чисел.
Если я введу число 7, то программа должна вывести: 17, 27,37,47,57,67,77,87,97,(эти числа получилось вывести) ну и 70,71,72,73,74,75,76,78,79(эти числа не получилось вывести) »
По условию задачи этого не требуется.
Если это необходимо "в процессе решения", то на данный момент этот шаг не обоснован. (читай "снимается с рассмотрения")
Сравнения 1-го и 2-го с вводимым числом мне нужно для нахождения подходящих чисел. »
Интересно, а если я скажу что "не нужно". Как быть? Кому верить? :)
Без обид. Учись объяснять предпосылки и прогнозировать последствия.
Старайся следовать предложенной схеме. Это в первую очередь тебе поможет привести мысли в порядок.
Т.е. это не я тут такой вредный и спрашиваю какую-то околесицу, я помочь пытаюсь! :)

nekitosiks
06-12-2013, 16:40
Для большей ясности скину сами задания вместе с "теорией", которые нам задали. 2 курс программист.
Я сам не в восторге как нас учат...
Задают нам по 4 задания, я остановился на сложных циклах 3 лабораторной 13 задание

mrcnn
06-12-2013, 16:41
Деление на 10 является правильной идеей - в том коде, который закомментирован. В массиве из четырех элементов можно сохранять получившиеся значения. И в этом массиве искать значения из массива из двух элементов, в котором сохранены цифры двухзначного числа.

Drongo
06-12-2013, 17:37
С клавиатуры вводится двузначное число, среди всех четырехзначных чисел вывести те, которые начинаются или заканчиваются этим числом. »Можно уточнить?

Допустим ввели число 27
Среди прочих 4-значных чисел есть: 1234, 3456, 2345, 2745, 4572, 2678, 7432
Что нужно вывести? Числа начинающиеся на 27 или начинающиеся и заканчивающиеся на 2?

В итоге будет создан динамический массив array с размером равным количеству чисел в введённом числе и в этом массиве будет сохранено число поразрядно - 4357
array[0] = 4;
array[1] = 3;
array[2] = 5;
array[3] = 7;Оперируя с этим массивом можете проверять первый и последний индексы.

#include <iostream>
using std::cout;
using std::cin;
using std::endl;

// Функция расчитывающая количество чисел во введённом числе...
int Rasriad(int enterNumber)
{
int n = enterNumber, x = 0;
while (n != 0) {
n /= 10;
x++;
}
return x;
}

int main()
{
int enterNumber,
lenght = 0,
indexRas,
decimal = 1,
z;

cout << "Enter Number: ";
cin >> enterNumber;

// Длина числа.
lenght = Rasriad(enterNumber);

int *array = new int [lenght]; // Создаём массив необходимой длины

// С какого делителя будем начинать деление?
for(int j = 1; j < lenght; j++)
decimal *= 10;

for(int i = 0; i < lenght; i++){
array[i] = enterNumber / decimal % 10; // Отрывание разрядов с первого числа по последнее и сохранение в массив
decimal /= 10;
}

cin >> z;

return 0;
}
//---------------------------

nekitosiks
06-12-2013, 17:51
Допустим ввели число 27 »
Должны будут выведены числа такие как: 2700,2701,2702... и 1027,1127...2327... Варианты: 3270, 9279, неподходят
К сожалению я до масивов не добрался, и не знаю что это

Drongo
06-12-2013, 19:01
nekitosiks, Так если в условии прямо сказано, введено двухзначное число и нужно сравнить с четырёхзначным, что мешает сделать примитивно? Я там сравниваю с прямым числом 27 (переменная num), но это в качестве примера, вместо 27 можно поставить переменную с введённым.

#include <iostream>
using namespace std;

int main()
{
int const size = 10; // грубо говоря, размер массива
int first, // 1-е совпадение в начале
last, // 2-е совпадение в конце
num = 27; // число с которым сравниваем

int array[size] = {1234, 3456, 2345, 2745, 4572, 2700, 7432, 6657, 9327, 2727};

for(int i = 0; i < size; i++){
first = array[i] / 100; // на 100, потому что отрывать от четырёхзначных будет первые два числа
last = array[i] % 100; // на 100, даёт остаток последние два числа, кроме целочисленного остатка в ноль
if(first == num) // условно 27, сравниваем с введённым
cout << "Array[" << i << "] = " << array[i] << " First = " << first << endl;
if(last == num) // условно 27, сравниваем с введённым
cout << "Array[" << i << "] = " << array[i] << " Last = " << last << endl;
}

cin >> last;
}

lxa85
07-12-2013, 17:32
Вчера до форума не добрался ...
У меня другая мысль появилась. А зачем нам вообще ~9000 (1000 - 9999) сравнений, причем с двумя делениями в каждом цикле!
Деление с т.з. процессора штука не простая. Если оптимизирующий компилятор догадается, то он объединит инструкции в одну, а если нет?
Ответов у нас около 200 (грубо).
Вида ХХСС и ССХХ
Где CC -- заданная двухзначная константа,
ХХ -- некая переменная часть числа.
Нас не просят найти/сформировать массив/выбрать из заданного/и т.п. нас просят "вывести".
И сделать соотв. два цикла 10-99 и подписать введенное числа либо спереди, либо с сзади.
----
nekitosiks, очень жаль, что предложенной схемой рассуждений вы так и не воспользовались.

nekitosiks
08-12-2013, 18:46
Мне кажется что это даже легче выйдет. Если я правильно понял, то тут нужно воспользоваться способом соединения чисел, а не разделения. Но я не знаю как это сделать. Я чайник и самое сложное что я знаю, это цикл.

lxa85
08-12-2013, 23:38
Если я правильно понял, то тут нужно воспользоваться способом соединения чисел, а не разделения. »
Если брать арифметику, то это работа с порядками. Умножил на 10, увеличил порядок, разделил - уменьшил. Соединение - сложение.
Кстати умножение, является более простой операцией, нежели деление, т.к. сводится либо к сложению, либо к умножителю, позволяющему произвести операцию за 1-3 такта на современных процессорах. (Для верности надо уточнить в пару-тройке спецификаций)
А если брать работу со строками ...

nekitosiks
10-12-2013, 20:07
Спасибо, догадался. Вот программа:


using namespace std;
int main()
{
setlocale(LC_ALL, "Russian");
int n, i, a, k;

cout << "Введите число от 10 до 99";
cin >> n;
n = n * 100;
for(i = 10; i < 100; i++){
a = n + i;
cout << a << "\t";
}

cout << "\n" << "\n";
n = n / 100;
for (int j = 1000; j < 10000; j = j + 100){
k = n + j;
cout << k << "\t";
}

getch();
}




© OSzone.net 2001-2012