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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 08.03.2012, 21:27   #1
cbuilderx
Пользователь
 
Регистрация: 12.03.2010
Сообщений: 18
Восклицание Простые числа...

всем привет.вот такая проблема.Переписываю свой алгоритм с Delphi на C.Компилируется,но ожидаемый результат не тот...Подозреваю,что это связано с функцией Simple и тем как я её перепилил.Просьба помочь найти ошибку.Весьма буду признателен...

Код Pascal:
Код:
program Project1;

{$APPTYPE CONSOLE}

uses
  SysUtils;

var
 x: Array of longint;
 i,w1,w2: integer;
 t: boolean;
 t1,t2: Text;
{Определить,является ли число простым}
{Данную задачу можно обобщить,например,так:определить,верно ли,
что заданное натуральное число N не делится ни на одно число,большее
или равное M (2<=M<=N), но меньшее N}
{Соответствующая функция должна принимать значение 'истина' в двух случаях:
 * Если M=N
 * Если N не делится на M и функция принимает значение истина для чисел M+1 и N}
function Simple(M,N: integer): boolean;
begin
 if m=n then Simple:=True
 else Simple:=(N mod M<>0) and Simple(M+1,N);
end;

begin
 assign(t1,'input.txt'); reset(t1);
 assign(t2,'output.txt'); rewrite(t2);

 read(t1,w1,w2);

 SetLength(x,w2-1);

 i:=0;

 while(i<w2-1) do
  begin
   x[0]:=w1;
   x[i+1]:=x[i]+1;
   inc(i);
  end;

 for i:=0 to w2-2 do
  begin
   t:=Simple(2,x[i]);
   if (t=True) then write(t2,x[i],' ');
  end;

 close(t1);
 close(t2);
end.
Код C:
Код:
#include <stdio.h>
#include <stdlib.h>
#include <memory.h>
#include <malloc.h>
#include <math.h>

bool Simple(int, int);

void main(void)
{
	FILE *f1;
	FILE *f2;
	int i,w1,w2;
	bool t;


	f1=fopen("input.txt","rt");
	fscanf(f1,"%d %d",&w1,&w2);
	fclose(f1);

	int *x = new int [w2];

	memset(x,0,w2);

	i=0;

	while(i<w2-1)
	{
		x[0]=w1;
		x[i+1]=x[i]+1;
		++i;
	}

	f2=fopen("output.txt","wt");

	for(i=0; i<w2-1; i++)
	{
		t=Simple(2,x[i]);
		if (t=true) fprintf(f2,"%d ",x[i]);
	}

	fclose(f2);
	delete [] x;
}

bool Simple(int m, int n)
{
	if (m=n) return true;
	else ((n % m != 0) && (m+1,n));
	return true;
}
Дорога возникает только под шагами идущего...
cbuilderx вне форума Ответить с цитированием
Старый 08.03.2012, 21:38   #2
Базиля
Участник клуба
 
Аватар для Базиля
 
Регистрация: 03.12.2009
Сообщений: 1,013
По умолчанию

Код:
if (m=n)
Код:
if (t=true)
Не забываем про знак равно, ==
Код:
if (m==n)
Код:
if (t==true)
Базиля вне форума Ответить с цитированием
Старый 08.03.2012, 21:44   #3
cbuilderx
Пользователь
 
Регистрация: 12.03.2010
Сообщений: 18
По умолчанию

Thanx...в основном то я паскалист,поэтому забываю такие важные моменты...
Весьма признателен тебе,форумчанин!

исправил,но добавилась одна проблемка...
вывод в Delphi: 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97
верно
вывод в C: 2 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39 41 43 45 47 49 51 53 55 57 59 61 63 65 67 69 71 73 75 77 79 81 83 85 87 89 91 93 95 97 99
не верно
Дорога возникает только под шагами идущего...

Последний раз редактировалось cbuilderx; 08.03.2012 в 21:54.
cbuilderx вне форума Ответить с цитированием
Старый 08.03.2012, 22:25   #4
VIK_aka_TOR
Участник клуба
 
Аватар для VIK_aka_TOR
 
Регистрация: 30.01.2011
Сообщений: 1,578
По умолчанию

Код:
bool Simple(int m, int n)
{
	if (m=n) return true;
	else ((n % m != 0) && Simple(m+1,n));
	return true;
}
для полного соответствия...
пишу код не только за печеньки
VIK_aka_TOR вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Простые числа SanechekS Паскаль, Turbo Pascal, PascalABC.NET 6 05.04.2011 15:51
Простые числа. С++ mephistophel Помощь студентам 3 03.02.2011 22:12
простые числа Koko Shanel' Помощь студентам 2 08.09.2010 01:13
Простые числа werser Помощь студентам 8 18.06.2008 07:24