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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.01.2012, 06:54   #1
Sergey_Black
 
Регистрация: 10.11.2011
Сообщений: 5
По умолчанию Stack overflow в СИ

Код:
#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>

void mas(int);
int proverka(int);
int a=1, sum=11, p=0, A[4][4];

int main()
{
	int y, x, r=0;
	mas(a);
	for(y=0; y<=4; y++)
	{
		for(x=0; x<=4; x++) printf("%d ", A[y][x]);
		printf("\n");
	}
	getc(stdin);
}

void mas(int a)
{
	p++;
	srand(p);
	int i, j, r=0;
	for(i=0; i<=4; i++)
	{
		for(j=0; j<=4; j++) A[i][j]=rand()%10;
	}
	if(A[0][0]==a) r=proverka(sum);
	else mas(a);
	if(r==1) return;
	else mas(a);
}

int proverka(int sum)
{
	int stroka0, stroka1, stroka2, stroka3, stroka4, stolb0, stolb1, stolb2, stolb3, stolb4, diag0, diag1;
	stroka0=A[0][0]+A[0][1]+A[0][2]+A[0][3]+A[0][4];
	stroka1=A[1][0]+A[1][1]+A[1][2]+A[1][3]+A[1][4];
	stroka2=A[2][0]+A[2][1]+A[2][2]+A[2][3]+A[2][4];
	stroka3=A[3][0]+A[3][1]+A[3][2]+A[3][3]+A[3][4];
	stroka4=A[4][0]+A[4][1]+A[4][2]+A[4][3]+A[4][4];
	stolb0=A[0][0]+A[1][0]+A[2][0]+A[3][0]+A[4][0];
	stolb1=A[0][1]+A[1][1]+A[2][1]+A[3][1]+A[4][1];
	stolb2=A[0][2]+A[1][2]+A[2][2]+A[3][2]+A[4][2];
	stolb3=A[0][3]+A[1][3]+A[2][3]+A[3][3]+A[4][3];
	stolb4=A[0][4]+A[1][4]+A[2][4]+A[3][4]+A[4][4];
	diag0=A[0][0]+A[1][1]+A[2][2]+A[3][3]+A[4][4];
	diag1=A[4][0]+A[3][1]+A[2][2]+A[1][3]+A[0][4];
	if(stroka0==sum && stroka1==sum && stroka2==sum && stroka3==sum && stroka4==sum && stolb0==sum && stolb1==sum && stolb2==sum && stolb3== sum && stolb4==sum && diag0==sum && diag1==sum) return 1;
	else mas(a);
}
Можете подсказать как для рекурсии сделать динамическую область памяти?
Sergey_Black вне форума Ответить с цитированием
Старый 23.01.2012, 07:45   #2
Hacker19_90
Delphi Warrior
Старожил
 
Аватар для Hacker19_90
 
Регистрация: 15.08.2008
Сообщений: 2,502
По умолчанию

нда!
Судя по вашему коду, динамика вам не поможет!
во первых вы постояно выходите за границы массива
Цитата:
Код:
A[4][4];
Цитата:
Код:
for(y=0; y<=4; y++)
	{
		for(x=0; x<=4; x++) printf("%d ", A[y][x]);
Может лучше вы озвучите задание! А потом уже насчёт динамики думать?
Mess with the best, die like the rest. (с) Hackers
Лабораторные, курсовые на Delphi\Pascal\C++
ya.flex-freelance@yandex.ru Icq - 636-954-303
Hacker19_90 вне форума Ответить с цитированием
Старый 23.01.2012, 15:35   #3
Sergey_Black
 
Регистрация: 10.11.2011
Сообщений: 5
По умолчанию

Код у меня на одно условие не дописан (на определение простого числа). Хотел сперва хотя бы так сделать.
Вообще задание такое:
Программа должна находить матрицы, удовлетворяющие условиям:
- Каждая строка(слева направо), каждый столбец (сверху вниз) и каждая диагональ (слева направо) матрицы - пятизначное простое число.
- Все эти простые числа должны иметь одинаковую сумму цифр.
- Цифра в самом первом углу матрицы задается заранее.
- Простое число не может начинаться с нуля( например 00005).

Число в верхнем левом углу задается заранее, сумма цифр тоже задается заранее. Для каждого найденного варианта решения записать матрицу.

Задание сделать с применением рекурсии.
Sergey_Black вне форума Ответить с цитированием
Старый 28.01.2012, 00:52   #4
Sergey_Black
 
Регистрация: 10.11.2011
Сообщений: 5
По умолчанию

Код:
#include "stdafx.h"
#include <stdio.h>

void gen_primes(unsigned *arr, unsigned len)
{ 
	unsigned i, p, j;
	bool is_prime;
	if(len == 1) { arr[0] = 0; return; }
	if(len == 2) { arr[0] = 0; arr[1] = 1; return; }
	arr[0] = 0;
	arr[1] = 1; 
	i = 2; 
	p = 1;
	while(i < len)
		{ 
			p++; 
			is_prime = true; 
			for(j = 2; j < i && is_prime; j++) if(p%arr[j] == 0) is_prime = false;
			if(is_prime) { arr[i] = p; i++; }
		}
}

unsigned get_symbol(unsigned val, unsigned pos)
{ 
	if(pos == 0) return val%10;
	if(pos == 1) return (val%100)/10;
	if(pos == 2) return (val%1000)/100;
	if(pos == 3) return (val%10000)/1000;
	if(pos == 4) return val/10000;
	return 0;
}

int main()
{ 
	unsigned primes[10000]; 
	unsigned selected[10000]; 
	unsigned symbols[5]; 
	unsigned lines[5]; 
	unsigned i, j, first_pos, last_pos, sum = 0, start = 0;
	unsigned test_sum, last_pos_in_selected = 0;
	FILE * pFileIn; FILE * pFileOut;

	gen_primes(primes, 10000);  
	for(i = 0; i < 10000; i++) if(primes[i] > 10000) { first_pos = i; break; }
	for(i = first_pos; i < 10000; i++) if(primes[i] > 99999) { last_pos = i; break; }
	pFileIn = fopen ("input.txt", "r");
	if(pFileIn ==NULL) { printf("Oshibka chtenia iz faila"); return 0; }
	fscanf(pFileIn, "%d %d", &sum, &start);
	fclose (pFileIn);
	if(sum == 0 || start == 0) { printf("Nevernie znachenia"); return 0; }
	for(i = first_pos; i < last_pos; i++)
		{ 
			symbols[0] = get_symbol(primes[i], 0);
			symbols[1] = get_symbol(primes[i], 1);
			symbols[2] = get_symbol(primes[i], 2);
			symbols[3] = get_symbol(primes[i], 3);
			symbols[4] = get_symbol(primes[i], 4);
			test_sum = 0;
			for(j = 0; j < 5; j++) test_sum += symbols[j];
			if(test_sum == sum) 
                        {
				selected[last_pos_in_selected++] = primes[i];
			}
		} 
	printf("Naideno %d chisel sootvetstvuyshih usloviyu.\n", last_pos_in_selected); 
	for(i = 0; i < last_pos_in_selected; i++) 
	printf("%d - %d\n", i, selected[i]); 
	getc(stdin);
}
Вот код, находящий простые числа нужной суммы. Как теперь можно реализовать эффективный алгоритм создания массива с заданными условиями?

Последний раз редактировалось Sergey_Black; 28.01.2012 в 01:39.
Sergey_Black вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Stack Overflow Xeonc Общие вопросы C/C++ 3 22.10.2010 08:07
stack overflow! BaiAs Общие вопросы Delphi 1 27.05.2010 02:08
Stack overflow GaLiof Помощь студентам 7 12.12.2009 12:56
Stack Overflow Neeter БД в Delphi 2 03.06.2009 00:39
Stack OverFlow Tanya2008 Общие вопросы Delphi 6 11.05.2009 15:16