Архив метки: while

Массив разных случайных чисел

С++Задача:

Заполнения массива случайными неповторяющимися элементами числами (язык Си)

Решение:

Алгоритм решения заполнения массива содержит три цикла: в первом цикле выбираем номер заполняемого элемента (переменная i); внутри первого цикла выполняется второй цикл (do…while), который будет выполняться еще раз, если потребуется повтор; внутри цикла (do…while) выполняются еще три действия: вычисляется значение нового элемента, переменной x задается значение «не повторять» и запускается третий цикл – сравнения вычисленного значения со всеми предыдущими (цикл for по переменной j).

Листинг решения:

#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
#include <time.h>
#define N 20 //количество элементов в массиве
#define Povtor 1 //есть ли повторения

inline void rus() // Русификация вывода в консольное окно
{
setlocale( LC_CTYPE, ".1251" );
setlocale( LC_MONETARY, ".1251" );
}
void randomize()
{
srand(time(0));
}

unsigned int random(int range)
{
return (rand() % range);
}

int main()
{
char c[N];
int i, j, x,range;

rus();
randomize();
printf("Заполнение одномерного массива символами \n");
printf("в случайном порядке. Символы не должны повторяться. \n");
printf("Коды символов расположены в диапазоне от 33 до 90.\n");

range = 90-33+1;
*c=random(range) + 33; // Первый элемент

for (i=1;i<N; i++) // Цикл заполнения элементов,
{ // i – номер очередного элемента
do
{
*(c+i)=random(range) + 33; // Новое значение
x = !Povtor; // Считаем, что повтор поиска не нужен
for(j=0; j<i; j++) // Цикл сравнения со всеми предыдущими
if (*(c+i)==*(c+j))
{
x = Povtor; // Элементы совпали, надо повторить поиск
break;
}
}
while (x==Povtor);
}
// Вывод одномерного массива символов
printf("Распечатка массива \n");
for (i=1; i<N; i++) //заметьте еще раз, проверяется условие i<N
printf("%c",(*(c+i)));
return 0;
}

Можно также реализовать функцию, проверяющая повторился ли элемент y в массиве x или нет, к примеру может иметь следующий вид (считаем, что количество элементов в массиве x равно n).

Листинг примера функции для поиска повторяющегося элемента

int povtor(int *x, int n, int y)
{ int Povtor, i;
Povtor = 0;
for (i=0;i<n;i++) {if (x[i]==y) Povtor=1;}
return Povtor;
}

Циклы в С++

Циклы в С++Циклы в С++

В С++ существует несколько способов представления циклов.

В языке существует 3 типа циклов.

1 тип — цикл for

Общий вид:

for (команда-инициализации; условие; выражение ) выполняемая команда

//бесконечный цикл с выходом из него по определенному условию
for ( ; ; ) {
        if ( some_condition )
            break; //выход из цикла если выполняется условия
        // выполняемые команды
    }

Листинг примера с циклом for

//выводим в столбец значения от 0 до 9
for (int i=0; i<10;i++) cout<<i<<"\n";

 2 тип — цикл while

Общий вид:

while (условие == истина) выполняемые команды

Если вычисление условия дает false, цикл останавливается

Листинг примера с циклом while

//выводим в столбец значения от 0 до 9
int i=0;
while (i<10) cout<<i++<<"\n";

 3 тип — цикл do

Общий вид:

do выполняемые команды while (условие==истина)

Если вычисление условия дает false, цикл останавливается

Листинг примера с циклом while

//выводим в столбец значения от 1 до 10
int i=0;
do {cout<<i++<<"\n";} while (i<11);

Пример программы с циклами здесь