ANTICHAT — форум по информационной безопасности, OSINT и технологиям
ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию.
Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club,
и теперь снова доступен на новом адресе —
forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
 |
|

03.01.2010, 16:50
|
|
Новичок
Регистрация: 07.04.2009
Сообщений: 19
Провел на форуме: 35427
Репутация:
3
|
|
Ребята не могли бы вы помочь с прогой, вся прога написана, всё сделано правильно, работает, но заминка в том, что уравнение для расчёта неправильное !
Код:
program xyz;
uses
SysUtils,
Windows;
label
EnterN;
var
N, i, z : Integer;
ans : Char;
//------------------------------------------------------------------------------
function Ru(str: String): String; // Функция перевода получаемой строки из ANSI-кодировки в OEM-кодировку DOS.
begin // Начало функции.
Result := ''; // Обнуляем результат.
if Length(str) > 0 then // Если получена непустая строка, то
begin // выполняем код:
SetLength(Result, Length(str)); // Устанавливаем размер для строки результата.
CharToOem(PChar(str), PChar(Result)); // Конвертируем строку в OEM-формат (модуль 'Windows.pas').
end; // Результирующая строка уже в новой кодировке.
end; // Конец функции.
//------------------------------------------------------------------------------
begin
WriteLn(Ru('Программа для вычисления факториала нечётных чисел:')); // Вывод информации на экран о назначении программы.
WriteLn('');
WriteLn(' N!!! = 1 x 3 x 5 ... x N ');
WriteLn('');
WriteLn(Ru('Выполнил ...')); // Вывод информации на экран об авторе программы.
WriteLn('');
Writeln('...');
EnterN: // Возврат в это место при ошибке или при повторном вводе данных.
WriteLn(''); // ...
Write(Ru('Введите нечётное число N, где N > 1 : ')); // ...
ReadLn(N); // Ввод числа Х.
if (N <= 1) or (N mod 2=0) then // Если Х меньше или равен 1, то
begin // выполнить код:
WriteLn(Ru('Произошла ошибка при вводе, попробуйте ещё раз.')); // - вывести сообщение об ошибке;
GoTo EnterN; // - вернуться к началу;
end; // ...
WriteLn(''); // ...
z := 1; // Обнуляем переменную результата.
for i := 1 to N do z := z*(i*2-1); // Увеличиваем переменную результата N раз.
WriteLn(Ru('Полученный результат: '+IntToStr(z))); // Отправить Х на обработку в функцию 'Formula()' и вывести результат.
WriteLn(''); // ...
Write(Ru('Вы хотите продолжить работу с программой? (Y/N) : ')); // Предложить продолжить работу с программой.
ReadLn(ans); // Получить согласие.
if (ans='Y') or (ans='y') or (ans=Ru('Н')) or (ans=Ru('н')) then GoTo EnterN; // Если согласие получено - возврат к началу.
end.
Когда запускаешь прогу, просит ввести N, если вводим 5, то получаем такой факториал 1х3х5х7х9, а нужно чтобы 5 была последней цифрой в этом подсчёте, то есть 1х3х5.
Перепробовал многие варианты, не выходит. кто может разобраться, помогите !
|
|
|

03.01.2010, 18:42
|
|
Новичок
Регистрация: 28.12.2009
Сообщений: 7
Провел на форуме: 119162
Репутация:
0
|
|
Перед циклом
Код:
for i := 1 to N do z := z*(i*2-1);
вставь строку этим ты поставиш количество итераций цикла равным количеству непарных чисел до заданного числа N. Код не проверял но должно работать. 
|
|
|

03.01.2010, 18:47
|
|
Познающий
Регистрация: 28.09.2008
Сообщений: 65
Провел на форуме: 152084
Репутация:
8
|
|
Сообщение от DJeFRY_RASH
Ребята не могли бы вы помочь с прогой, вся прога написана, всё сделано правильно, работает, но заминка в том, что уравнение для расчёта неправильное !
Код:
program xyz;
uses
SysUtils,
Windows;
label
EnterN;
var
N, i, z : Integer;
ans : Char;
//------------------------------------------------------------------------------
function Ru(str: String): String; // Функция перевода получаемой строки из ANSI-кодировки в OEM-кодировку DOS.
begin // Начало функции.
Result := ''; // Обнуляем результат.
if Length(str) > 0 then // Если получена непустая строка, то
begin // выполняем код:
SetLength(Result, Length(str)); // Устанавливаем размер для строки результата.
CharToOem(PChar(str), PChar(Result)); // Конвертируем строку в OEM-формат (модуль 'Windows.pas').
end; // Результирующая строка уже в новой кодировке.
end; // Конец функции.
//------------------------------------------------------------------------------
begin
WriteLn(Ru('Программа для вычисления факториала нечётных чисел:')); // Вывод информации на экран о назначении программы.
WriteLn('');
WriteLn(' N!!! = 1 x 3 x 5 ... x N ');
WriteLn('');
WriteLn(Ru('Выполнил ...')); // Вывод информации на экран об авторе программы.
WriteLn('');
Writeln('...');
EnterN: // Возврат в это место при ошибке или при повторном вводе данных.
WriteLn(''); // ...
Write(Ru('Введите нечётное число N, где N > 1 : ')); // ...
ReadLn(N); // Ввод числа Х.
if (N <= 1) or (N mod 2=0) then // Если Х меньше или равен 1, то
begin // выполнить код:
WriteLn(Ru('Произошла ошибка при вводе, попробуйте ещё раз.')); // - вывести сообщение об ошибке;
GoTo EnterN; // - вернуться к началу;
end; // ...
WriteLn(''); // ...
z := 1; // Обнуляем переменную результата.
for i := 1 to N do z := z*(i*2-1); // Увеличиваем переменную результата N раз.
WriteLn(Ru('Полученный результат: '+IntToStr(z))); // Отправить Х на обработку в функцию 'Formula()' и вывести результат.
WriteLn(''); // ...
Write(Ru('Вы хотите продолжить работу с программой? (Y/N) : ')); // Предложить продолжить работу с программой.
ReadLn(ans); // Получить согласие.
if (ans='Y') or (ans='y') or (ans=Ru('Н')) or (ans=Ru('н')) then GoTo EnterN; // Если согласие получено - возврат к началу.
end.
Когда запускаешь прогу, просит ввести N, если вводим 5, то получаем такой факториал 1х3х5х7х9, а нужно чтобы 5 была последней цифрой в этом подсчёте, то есть 1х3х5.
Перепробовал многие варианты, не выходит. кто может разобраться, помогите !
в цикле организуй проверку до вычисления факториала.
те
for i := 1 to N do
begin
if i mod 2 <> 0 then
z := z*i;
end;
ну и формулу чуть подредактировал. а то я не уловил зачем было i*2-1
вот в приципе и всё.
|
|
|

03.01.2010, 19:22
|
|
Новичок
Регистрация: 07.04.2009
Сообщений: 19
Провел на форуме: 35427
Репутация:
3
|
|
Ребята
респект, спасибо большое, помогли !
|
|
|

03.01.2010, 20:34
|
|
Новичок
Регистрация: 12.12.2009
Сообщений: 10
Провел на форуме: 14658
Репутация:
0
|
|
Помогите, пожалуйста. Буду признателен.
Дана целочисельная матрица. Отсортировать строки матрицы относительно первого элемента строки по убыванию.
|
|
|

03.01.2010, 21:57
|
|
Познающий
Регистрация: 28.09.2008
Сообщений: 65
Провел на форуме: 152084
Репутация:
8
|
|
Сообщение от STIFFmaster
Помогите, пожалуйста. Буду признателен.
Дана целочисельная матрица. Отсортировать строки матрицы относительно первого элемента строки по убыванию.
не хочу всю программу расписывать...
просто проверяешь соседние элементы в строке если
a[i,j] > a[i,j+1] then
begin
x:=a[i,j+1];
a[i,j+1]:=a[i,j];
a[i,j]:=x;
end;
|
|
|

03.01.2010, 22:10
|
|
Новичок
Регистрация: 02.01.2010
Сообщений: 26
Провел на форуме: 33560
Репутация:
15
|
|
Сообщение от STIFFmaster
Помогите, пожалуйста. Буду признателен.
Дана целочисельная матрица. Отсортировать строки матрицы относительно первого элемента строки по убыванию.
PHP код:
#include <iostream>
using namespace std;
int main()
{
int l = 0;
int a[3][3] = {
3,7,3,
4,2,8,
6,8,1
};
for(int i = 0; i < 3; i++)
{
for(int j = 1; j < 3; j++)
{
int t = a[i][j], l = 0;
for(l=j-1; (l >= 0)&&(a[i][l] < t); l--)
{ a[i][l+1]=a[i][l]; }
a[i][l+1] = t;
}
}
for(int i = 0; i < 3; i++)
{
for(int j = 0; j < 3; j++)
{ cout << a[i][j] <<" "; }
cout << endl;
}
return 0;
}
|
|
|

03.01.2010, 22:13
|
|
Познающий
Регистрация: 28.09.2008
Сообщений: 65
Провел на форуме: 152084
Репутация:
8
|
|
Сообщение от XimiK69
PHP код:
#include <iostream>
using namespace std;
int main()
{
int l = 0;
int a[3][3] = {
3,7,3,
4,2,8,
6,8,1
};
for(int i = 0; i < 3; i++)
{
for(int j = 1; j < 3; j++)
{
int t = a[i][j], l = 0;
for(l=j-1; (l >= 0)&&(a[i][l] < t); l--)
{ a[i][l+1]=a[i][l]; }
a[i][l+1] = t;
}
}
for(int i = 0; i < 3; i++)
{
for(int j = 0; j < 3; j++)
{ cout << a[i][j] <<" "; }
cout << endl;
}
return 0;
}
хе хоть в C и не шарю пока особо.
товарищ зачем заранее матрицу и элементы определять?)
меня б в универе за это уже на кол посадили )
|
|
|

03.01.2010, 22:15
|
|
Новичок
Регистрация: 02.01.2010
Сообщений: 26
Провел на форуме: 33560
Репутация:
15
|
|
просто проверил алгоритм на этом примере, хотя с тобой согласен.....на константах работать нельзя....
|
|
|

03.01.2010, 23:41
|
|
Новичок
Регистрация: 07.04.2009
Сообщений: 19
Провел на форуме: 35427
Репутация:
3
|
|
Ребят, гляньте, что можно сделать ...
Код:
program xyz;
uses
SysUtils;
Function Ru ( S : string ) : string ;
VAR
T : string ; { временная строка}
i : integer ; { номер символа в строке }
code : byte ; { код символа }
BEGIN
T := S ; { получает значение параметра }
FOR i := 1 TO Length ( S ) DO { для всех символов строки S}
BEGIN { изменяет кодировку символов кириллицы }
code := Ord ( S[ i ] ) ; { определяет код символа}
CASE code OF { ПРОПИСНЫЕ БУКВЫ }
192 .. 197: T[ i ] :=Chr(code-64) ; { А-Е: 192-197 ->128-133}
168: T[ i ] :=#240; { Ё: 168->240}
198 .. 223: T[ i ] :=Chr(code-64); { Ж-Я : 198-223->128-133} { строчные буквы }
224 .. 229: T[ i ] :=Chr(code-64); { а-е : 224-229->160-165}
184: T[ i ] :=#241; { ё: 184 ->241}
230 .. 239: T[ i ] :=Chr(code-64); { е-п: 230-239->166-175}
240 .. 255: T[ i ] :=Chr(code-16); { р-я: 240-255->224-239}
END ;
END ;
Ru := T ; { возвращает значение временной строки }
END;
VAR
i,j,k,n,temp:integer; // искомые числа
repeat_it:boolean; // зацикливание программы (True/False)
ans:char; // используется для получения согласия для продолжения работы программы
label // идентификатор
p1;
Function IntSqrt(temp:integer):real; // функция для вычисления квадратного корня.
VAR
x:real;
t:real;
begin // начало функции
x:=sqrt(temp); // извлечение квадратного корня из числа.
if (x-round(x))=0 then t:=x // Если от х отнять округленный х будет равно нулю, тогда t=x.
else t:=0; // Либо t=0.
end;
begin
Writeln(Ru('Программа находит все натуральные числа, меньшие чем N, для которых выполняется соотношение a*a + b*b = c*c. [a,b,c < N]'));
Writeln; // ...
Writeln(Ru('Автор программы ...')); // Вывод информации на экран об авторе программы.
Writeln; // ...
Writeln('...'); // Вывод на экран - e-mail автора программы.
Writeln;
p1: // Возврат в это место при ошибке или при повторном вводе данных.
repeat_it:=true; // Зацикливание программы, True-правда.
while repeat_it=true do begin
Write(Ru('Введите число, которое вы хотите проверить: ')); // ...
read(temp);
Writeln('OTBET: ',IntSqrt(temp):6:0); // Отправить temp на обработку в функцию 'Formula()' и вывести результат на экран.
Writeln; // ...
Write(Ru('Введите N: ')); // ...
Read(n); // Ввод числа N
for i:=1 to N-1 do // Увеличиваем переменную результата в N-1 раз.
for j:=1 to N-1 do // Увеличиваем переменную результата в N-1 раз.
for k:=1 to N-1 do // Увеличиваем переменную результата в N-1 раз.
if i*i+j*j=k*k then Writeln('a=',i:4,'; b=',j:4,'; c=',k:4); // Если i*i+j*j=k*k, то выводятся на экран все возможные варианты решения этого уравнения.
Writeln; // ...
Write(Ru('Вы хотите продолжить работу с программой ? (Y/N): ')); // Предложить продолжить работу с программой.
Readln;
readln(ans); // Получить согласие.
writeln; // ...
if (ans='Y') or (ans='y') or (ans=Ru('Н')) or (ans=Ru('н')) then GoTo p1; // Если согласие получено - возврат к началу.
break;
end;
end.
Собственно если ввожу N = 6
то выводит ответ
a = 3 b = 4 c = 5
a = 4 b = 3 c = 5
то есть нужно просто добавить что-то (не знаю что) 
чтобы в случае если "с" совпадает несколько раз, тогда чтобы выводилось 1 раз.
|
|
|
|
 |
|
|
Здесь присутствуют: 2 (пользователей: 0 , гостей: 2)
|
|
|
|