Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   [решено] Помогите пожайлуста со сложными циклами (http://forum.oszone.net/showthread.php?t=273523)

nekitosiks 06-12-2013 13:42 2267989

Помогите пожайлуста со сложными циклами
 
С клавиатуры вводится двузначное число, среди всех четырехзначных чисел вывести те, которые начинаются или заканчиваются этим числом.
Как мне сделать цикл что бы он проверял и 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 2268017

nekitosiks, так, давай чуть назад и с азов.
Для того, чтобы тебя понимали, не поленись оформить код тегом CODE, #
Как видно в окне набора сообщения


[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();
}
[/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();
}

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

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

Сейчас спокойненько сядь, напиши, зачем тебе нужны сравнения 1ой, 2ой, и других цифр.
Цитата:

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

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

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

nekitosiks 06-12-2013 15:35 2268071

Сравнения 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 2268094

Цитата:

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

По условию задачи этого не требуется.
Если это необходимо "в процессе решения", то на данный момент этот шаг не обоснован. (читай "снимается с рассмотрения")
Цитата:

Цитата nekitosiks
Сравнения 1-го и 2-го с вводимым числом мне нужно для нахождения подходящих чисел. »

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

nekitosiks 06-12-2013 16:40 2268107

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

mrcnn 06-12-2013 16:41 2268108

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

Drongo 06-12-2013 17:37 2268148

Цитата:

Цитата nekitosiks
С клавиатуры вводится двузначное число, среди всех четырехзначных чисел вывести те, которые начинаются или заканчиваются этим числом. »

Можно уточнить?

Допустим ввели число 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 2268160

Цитата:

Цитата Drongo
Допустим ввели число 27 »

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

Drongo 06-12-2013 19:01 2268205

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 2268536

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

nekitosiks 08-12-2013 18:46 2269051

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

lxa85 08-12-2013 23:38 2269153

Цитата:

Цитата nekitosiks
Если я правильно понял, то тут нужно воспользоваться способом соединения чисел, а не разделения. »

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

nekitosiks 10-12-2013 20:07 2270237

Спасибо, догадался. Вот программа:

Код:

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();
}



Время: 11:51.

Время: 11:51.
© OSzone.net 2001-