Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.05.2020, 21:50   #31
Alexalex777
Пользователь
 
Регистрация: 02.04.2020
Сообщений: 97
По умолчанию

Бит поинты ставил на всех строках программы отладку делал в visual studia 2017
Alexalex777 вне форума Ответить с цитированием
Старый 12.05.2020, 22:15   #32
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Для приведенной программы должно быть:
x=1 y=1 temp=1%1=0 total=0
x=1 y=2 temp=2%1=0 total=0
x=1 y=3 temp=3%1=0 total=0
x=1 y=4 temp=4%1=0 total=0
x=1 y=5 temp=5%1=0 total=0
printf 0 0
x=3 y=3 temp=3%3=0 total=0
x=3 y=4 temp=4%3=1 total=1
x=3 y=5 temp=5%3=2 total=3
printf 2 3
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Старый 12.05.2020, 23:21   #33
Alexalex777
Пользователь
 
Регистрация: 02.04.2020
Сообщений: 97
По умолчанию

Все четко теперь ! у меня отладчик неправильно значение x и y показывал.
BDA а ты каким отладчиком пользуешься?
Alexalex777 вне форума Ответить с цитированием
Старый 12.05.2020, 23:48   #34
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Голым отладчиком редко пользуюсь. А если в связке с IDE, то чаще всего отладчик GDB в Eclipse или CodeBlocks. В Visual Studio свой отладчик, ну если проект под VS, то и использую их отладчик.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Старый 14.05.2020, 00:35   #35
Alexalex777
Пользователь
 
Регистрация: 02.04.2020
Сообщений: 97
По умолчанию

понятно
Alexalex777 вне форума Ответить с цитированием
Старый 14.05.2020, 00:43   #36
Alexalex777
Пользователь
 
Регистрация: 02.04.2020
Сообщений: 97
По умолчанию

Программу пытаюсь писать случайных чисел для лото 6 из 37 и чтоб в ней не было похожих чисел .Два варианта не очень есть повторяющиеся числа в последнем с числами порядок но массив меняется размером то 6 то 7 цифр выдает.При исключении похожих чисел массив меняется в размере.
Код:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include<time.h.>
#include<stdlib.h>
void main(void)
{
	int i, box[10],j,k=0;
	srand((unsigned)time(NULL));
	for (i = 0; i <10; i++)
	{
		box[i] = rand() % 37 + 1;
			for (j = 0; j <i; j++)
			if ((box[i] = box[j])||(i=j))
				break;
			if (i!=j||box[i] != box[j])
		{
			box[k]++;
			//k++;
			//printf("%d ", box[k]);
			continue;
			
       		}
			
	}
	printf("%d ", box[k]);
	for (k = 0; k < 10;k++)
		
}
Код:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include<time.h.>
#include<stdlib.h>
void main(void)
{
	int i, box[10], j;
	{
		srand((unsigned)time(NULL));
		for (i = 0; i<6; i++) 
		{
			b[i] = (rand() % 36) + 1;
			for (j = 0; j<i; j++) 
			{
				if (b[j] == b[i])
				{
					i--;
					break;
				}
				
			}
			printf("%d ", b[i]);
		}
	}
Код:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include<time.h.>
#include<stdlib.h>
void main(void)
{
	int i, a[20], j, flag = 0, b[20],k=0;
	srand((unsigned)time(NULL));
	for (i = 0; i <7; i++)
	{
		a[i] = (rand() % 36) + 1;
		flag = 0;
		for (j = 0; j <7; j++)
		{
			flag = flag || (a[i] == a[j] && i>j);
			if (flag)
			break;
		}
		if (!flag)
		{
			b[k] = a[i];
			k++;
		}
	}
	for (i = 0; i < k; i++)
		printf("%d ", b[i]);
	}
Последний вариант выдает через раз 6 или 7 чисел
Alexalex777 вне форума Ответить с цитированием
Старый 14.05.2020, 01:13   #37
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Замечания по коду. "=" это присваивание, а не сравнение на равенство. Обычно счетчик цикла for стараются не менять внутри цикла.
Код:
#include <stdio.h>
#include <time.h.>
#include <stdlib.h>

const int k = 40;
const int n = 40;
const int runs = 10000;

void fully_random(void)
{
    int i, b[k], j;
    for (i = 0; i < k; ++i) {
        do {
            b[i] = (rand() % n) + 1;
            for (j = 0; j < i && b[i] != b[j]; j++);
        } while (j != i);
        //printf("%d ", b[i]);
    }
}

void one_of_the_remaining(void)
{
    int i, b[k], j;
    for (i = 0; i < k; ++i) {
        b[i] = (rand() % (n - i)) + 1;
        j = 0;
        while (j < i) {
            if (b[i] == b[j]) {
                ++b[i];
                j = 0;
            } else
                ++j;
        }
        //printf("%d ", b[i]);
    }
}

void one_of_the_remaining_with_array(void)
{
    int i, b[k], j, ch[n], tmp;
    for (i = 0; i < n; ++i)
        ch[i] = i + 1;
    for (i = 0; i < k; ++i) {
        j = (rand() % (n - i)) + i;
        b[i] = ch[j];
        tmp = ch[i];
        ch[i] = ch[j];
        ch[j] = tmp;
        //printf("%d ", b[i]);
    }
}

void print_time(void (*fun_ptr)(void))
{
    clock_t begin = clock();
    for (int i = 0; i < runs; ++i)
        fun_ptr();
    clock_t end = clock();
    double time_spent = (double)(end - begin) / CLOCKS_PER_SEC;
    printf("time spent: %f\n", time_spent);
}

int main(void)
{
    unsigned seed = (unsigned) time(NULL);
    srand(seed);
    print_time(fully_random);
    srand(seed);
    print_time(one_of_the_remaining);
    srand(seed);
    print_time(one_of_the_remaining_with_array);
    return 0;
}
Попробовал реализовать подход выбора нового числа только из тех, что еще не выбраны. Теоретически он находит ответ за известное время, но по замерам оказался хуже, чем просто рандом. Добавил еще подход, где использую дополнительный массив для хранения оставшихся чисел. Он получился самым быстрым.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 14.05.2020 в 17:14.
BDA на форуме Ответить с цитированием
Старый 15.05.2020, 15:51   #38
Alexalex777
Пользователь
 
Регистрация: 02.04.2020
Сообщений: 97
По умолчанию

Такие два варианта вышли с готовыми массивами не идеальные тоже.
Код:
#include <stdio.h>
#include<time.h.>
#include<stdlib.h>
void main(void)
{
	int i, j;
	int a[] = {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};
	srand((unsigned)time(NULL));
	for (i = 0; i <7; i++)
	{
		a[i] = (rand() % 36) + 1;
			for (j = 0; j <7; j++)
		{
			if (a[i] == a[j]&&i==j );
			break;
		}
				a[i]++;			
			printf("%d ",a[i]);
		}
	return 0;
	}
Код:
#include <stdio.h>
#include<time.h.>
#include<stdlib.h>
void main(void)
{
	int i, j;
	int a[] = {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};
	srand((unsigned)time(NULL));
	for (i = 0; i < 7; ++i)
	{
		do
		{
			a[i] = (rand() % 37) + 1;
			for (j = 0; j != i && a[i] != a[j]; j++);
		} 
		while (j != i);
		printf("%d ", a[i]);
	}
}
Alexalex777 вне форума Ответить с цитированием
Старый 15.05.2020, 16:00   #39
Alexalex777
Пользователь
 
Регистрация: 02.04.2020
Сообщений: 97
По умолчанию

или этот старый вариант
Код:
#include <stdio.h>
#include<time.h.>
#include<stdlib.h>
void main(void)
{
	int i,  j, flag = 0, b[20],k=0;
        int a[]=  
 {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};
	srand((unsigned)time(NULL));
	for (i = 0; i <7; i++)
	{
		a[i] = (rand() % 36) + 1;
		flag = 0;
		for (j = 0; j <7; j++)
		{
			flag = flag || (a[i] == a[j] && i>j);
			if (flag)
			break;
		}
		if (!flag)
		{
			b[k] = a[i];
			k++;
		}
	}
	for (i = 0; i < k; i++)
		printf("%d ", b[i]);
	}
Alexalex777 вне форума Ответить с цитированием
Старый 15.05.2020, 16:44   #40
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Так в этих последних трех вариантах заполнение массива ни на что не влияет, так как значения тут же переписываются рандомным числом.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Разница между числами businessman Паскаль, Turbo Pascal, PascalABC.NET 6 21.05.2015 12:55
Дана последовательность из 100 вещественных чисел. Определить , со скольких чётных чисел она начинается SnS Lazarus, Free Pascal, CodeTyphon 2 22.09.2013 18:48
Прога должна строить множества Idiot Помощь студентам 2 11.12.2010 22:45
программа должна считать по этой формуле CheyZe Помощь студентам 0 25.11.2010 19:10
Евклид - программа должна запрашивать у пользователя 2 числа и считать их НОД amfisat Помощь студентам 2 17.09.2010 09:53