Часовой пояс: UTC + 3 часа




Куратор(ы):   Lord_of_Darkness   



Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 985 • Страница 33 из 50<  1 ... 30  31  32  33  34  35  36 ... 50  >
  Пред. тема | След. тема 
В случае проблем с отображением форума, отключите блокировщик рекламы
Автор Сообщение
 
Прилепленное (важное) сообщение

Убедительная просьба ко всем, кто выкладывает исходники:
1. Обязательно пользуйтесь тэгом code (иначе очень трудно читать)
2. Старайтесь делать отступы

Если вы хотите чтобы вам помогли в написании программы, внятно излагайте задание!

Прежде чем задать вопрос, воспользуйтесь учебником


Возможно, что нужная вам программа уже написана, поэтому советую просмотреть список здесь и здесь

Отредактировано куратором: Lord_of_Darkness. Дата: 07.07.2006 19:36



Партнер
 

Member
Статус: Не в сети
Регистрация: 10.02.2005
Качнул исходник а по какому принципу она работает не совсем понятно. Программа складывает числа в двоичной системе.
var sr,sf,ss:string;

function BinAdd(s1,s2:string):string;
var s:string; l,i,d,carry:byte;
begin

if length(s1)>length(s2) then while length(s2)<length(s1) do s2:='0'+s2
else while length(s1)<length(s2) do s1:='0'+s1;
l:=length(s1);
s:=''; carry:=0;
for i:=l downto 1 do begin
d := (ord(s1[i])-ord('0')) + (ord(s2[i])-ord('0')) + carry;
carry := d div 2;
d:=d mod 2;
s:=char(d+ord('0')) + s;
end;
if carry<>0 then s:='1'+s;
BinAdd:=s;
end;

begin
writeln('Введите первое число');
readln(sf);
writeln('Введите второе число');
readln(ss);
sr:=BinAdd(sf,ss);
writeln('результат = ',sr);
end.


 

Member
Статус: Не в сети
Регистрация: 04.10.2004
Цитата:
s:=char(d+ord('0')) + s;

Вместо char по-моему должно быть chr.
Читать описание функций chr и ord, работу со строками.
Сначала строки выравниваются по длине путем добавления незначащих нулей. Потом в цикле формируются символы (0 или 1) в результирующей строке с учетом переноса (carry) от предыдущего формирования ;). Если после прохождения цикла имеется перенос, то к результирующей строке добавляется 1.
Защиты от дурака нет ;).


 

Member
Статус: Не в сети
Регистрация: 10.12.2007
Откуда: Санкт-Петербург
Уважаемые господа, помогите пожалуйста!!! :(
Нужна программа по вычислению ряда с точностью до 0,00001: Е=1+х+х*х/2+...+х(в степени n)/n!


 

Member
Статус: Не в сети
Регистрация: 04.10.2004
manya
Google, однако :).


 

Member
Статус: Не в сети
Регистрация: 10.12.2007
Откуда: Санкт-Петербург
maco
Спасибо!!! :dance:


 

Member
Статус: Не в сети
Регистрация: 10.12.2007
Откуда: Санкт-Петербург
Пожалуйста, скажите в чем ошибка. Прога должна находить максимальный элемент выше главной диагонали и минимальный ниже, а у меня находит во всем массиве. :bandhead:
Код:
program zadacha1;
 const n=4;
       m=4;
 type massiv=array[1..n,1..m]of integer;
procedure zapoln(var mas1:massiv);
 var i,j:integer;
begin
 randomize;
 for i:=1 to n do
  for j:=1 to m do
                 mas1[i,j]:=random(80);
end;
procedure vivod(var mas2:massiv);
 var i,j:integer;
begin
 for i:=1 to n do
                begin
                for j:=1 to m do
                              write(mas2[i,j]:4);
                writeln;
                end;
end;
procedure maxmalndiag(var mas3:massiv;var maximalnii:integer);
 var i,j:integer;
begin
 for i:=1 to n do
  for j:=1 to m do
                 begin
                 if j>=i then
                             begin
                             maximalnii:=mas3[1,1];
                             if mas3[i,j]>=maximalnii
                                       then maximalnii:=mas3[i,j];
                             end;
                 end;
end;
procedure minmaimdiag(var mas4:massiv;var minimalnii:integer);
 var i,j:integer;
begin
 for i:=1 to n do
  for j:=1 to m do
                begin
                if j<=i then
                           begin
                           minimalnii:=mas4[1,1];
                           if mas4[i,j]<=minimalnii then
                                         minimalnii:=mas4[i,j];
                           end;
                end;
end;
 var mas:massiv;
     max,min:integer;
begin
 zapoln(mas);
 vivod(mas);
 maxmalndiag(mas,max);
 writeln('maximalnii element,legashchii vishe diagonali raven',' ',max);
 writeln;
 minmaimdiag(mas,min);
 writeln('minimalnii element,legashchii nige diagonali raven',' ',min);
 readln;
end.



 

Member
Статус: Не в сети
Регистрация: 05.12.2005
manya
А главная диагональ ведь не в счет? Если нет, то зачем знаки <= и >= ?

Потом не понятно совершенно вот эти строки:
maximalnii:=mas3[1,1];
minimalnii:=mas4[1,1];
Во-первых они должны быть в начале процедуры, а во-вторых для процедуры которая находит значение, находящееся ниже диагонали должно быть написано:
minimalnii:=mas4[n,m];

И строки:
if mas3[i,j]>=maximalnii
if mas4[i,j]<=minimalnii then
Тоже странные, если элементы равны, то зачем их запоминать? Тут должны быть знаки строгие < и >.


 

Member
Статус: Не в сети
Регистрация: 10.12.2007
Откуда: Санкт-Петербург
sashar2 Спасибо, но всё равно не работает
Код:
program zad54;
 const n=4;
       m=4;
 type massiv=array[1..n,1..m]of integer;
procedure zapoln(var mas1:massiv);
 var i,j:integer;
begin
 randomize;
 for i:=1 to n do
  for j:=1 to m do
                 mas1[i,j]:=random(80);
end;
procedure vivod(var mas2:massiv);
 var i,j:integer;
begin
 for i:=1 to n do
                begin
                for j:=1 to m do
                              write(mas2[i,j]:4);
                writeln;
                end;
end;
procedure maxmalndiag(var mas3:massiv;var maximalnii:integer);
 var i,j:integer;
begin
 maximalnii:=mas3[1,1];
 for i:=1 to n do
  for j:=1 to m do
                 begin
                 if j>i then
                             begin

                             if mas3[i,j]>maximalnii
                                       then maximalnii:=mas3[i,j];
                             end;
                 end;
end;
procedure minmaimdiag(var mas4:massiv;var minimalnii:integer);
 var i,j:integer;
begin
 minimalnii:=mas4[n,m];
 for i:=n downto 1 do
  for j:=m downto 1 do
                begin
                if j<i then
                           begin
                           if mas4[i,j]<minimalnii then
                                         minimalnii:=mas4[i,j];
                           end;
                end;
end;
 var mas:massiv;
     max,min:integer;
begin
 zapoln(mas);
 vivod(mas);
 maxmalndiag(mas,max);
 writeln('maximalnii element,legashchii vishe diagonali raven',' ',max);
 writeln;
 minmaimdiag(mas,min);
 writeln('minimalnii element,legashchii nige diagonali raven',' ',min);
 readln;
end.



 

Member
Статус: Не в сети
Регистрация: 05.12.2005
manya
Я насчет диагонали не так сказал, там должно быть условие не:
if j>i then
и
if j<i then, а должно быть:
if ((j+i)<(n+1))) then
и
if ((j+i)>(n+1))) then
Но это только справедливо для квадратной матрицы, у другой диагонали-то не будет, поэтому не ясно зачем тут n и m.


 

Member
Статус: Не в сети
Регистрация: 10.12.2007
Откуда: Санкт-Петербург
sashar2
Спасибо большое
Добавлено спустя 59 минут, 19 секунд
А можно я ещё спрошу? :oops: Задача по треугольнику Паскаля. Вводится номер строки и столбца, где находится элемент, а выводится его значение. Прога работает, но при значениях строк и столбцов больше 30 виснет. Как это исправить?
Код:
program treygpas;
 function pas(n,k:integer):longint;
begin
 if (n>k) and (k<>1) then
                 pas:=pas(n-1,k-1)+pas(n-1,k)
                 else
                 pas:=1;
end;
 var l,m:integer;
     p:longint;
begin
 readln(l);
 readln(m);
 if l>=m then
          begin
          p:=pas(l,m);
          write(p);
          end
         else writeln('nedopystimoe znachenie');
 readln;
end.


 

Member
Статус: Не в сети
Регистрация: 04.10.2004
manya писал(а):
Прога работает, но при значениях строк и столбцов больше 30 виснет.

Она вообще-то работает, при такой рекурсии и указанных числах считать придется довольно долго :). Можете ради спотивного интереса в самой функции после строки pas:=pas(n-1,k-1)+pas(n-1,k) добавить вывод на экран пары n и k, которая обсчитывалась на текущий момент (не забывая при этом операторные скобки begin end). И потом глядеть на пляшущие по экрану числа :).
Вот здесь (http://ru.wikipedia.org/wiki/Биномиальный_коэффициент - сорри, ссылка нормально не вставляется) есть пару формул, поглядите. Если вам не нужна рекурсия, то вполне может подойти.


 

Member
Статус: Не в сети
Регистрация: 10.12.2007
Откуда: Санкт-Петербург
maco Спасибо, но нужна рекурсия


 

Member
Статус: Не в сети
Регистрация: 04.10.2004
manya
Тогда уговаривайте преподавателя подождать, пока досчитает :). Или не задавайте таких больших чисел.
Можно еще демонстрировать процесс работы с помощью выведения на экран текущей пары просчитываемых коэффициентов - хоть видно будет, что не зависает, а работает.


 

Member
Статус: Не в сети
Регистрация: 10.12.2007
Откуда: Санкт-Петербург
Да, идея хорошая :applause:

_________________
Семь бед, один Reset. 95, 98 - это количество багов. В пpоцентах...
DCN - наше все


 

Member
Статус: Не в сети
Регистрация: 10.12.2007
Откуда: Санкт-Петербург
Скажите, пожалуйста, если необходимо, чтобы в матрице последний элемент каждой строки был равен среднему арифметическому предыдущих элементов той же строки, то какое условие должно быть в цикле в процедуре где он ищется?

_________________
Семь бед, один Reset. 95, 98 - это количество багов. В пpоцентах...
DCN - наше все


 

Куратор темы
Статус: Не в сети
Регистрация: 03.01.2004
Откуда: Питер
manya

например так

Код:
for i:=1 to 10 do
begin
   sum:=0;
   for j:=1 to 9 do
   begin
      sum:=sum+A[i,j];
   end;
   A[i,10]:=sum/9;
end;

_________________
Здесь так мало тех, с кем легко говорить,
Еще меньше тех, с кем не страшно молчать (c)


 

Member
Статус: Не в сети
Регистрация: 10.12.2007
Откуда: Санкт-Петербург
Lord_of_Darkness Спасибо, а то что - то странное у меня получалось :D
Добавлено спустя 38 минут, 49 секунд
Lord_of_Darkness а если в общем виде, то как это будет выглядеть?
Код:
program zadacha;
 uses crt;
 const n=3;
       m=3;
 type massiv=array[1..n,1..m]of integer;
 type preobmas=array[1..n,1..m]of real;
procedure zapoln(var mas1:massiv);
 var i,j:integer;
begin
 for i:=1 to n do
  for j:=1 to m do
    mas1[i,j]:=random(34);
end;
procedure vivod(var mas2:massiv);
 var i,j:integer;
begin
 for i:=1 to n do
  begin
  writeln;
  for j:=1 to m do
       write(mas2[i,j]:4);
  end;
 writeln;
end;
procedure sredn(var mas3:massiv;var mas4:preobmas);
 var i,j,s:integer;
begin
 for i:=1 to n do
  begin
  s:=0;
  for j:=1 to m do
                begin
                s:=s+mas3[i,j];
                end;
  mas4[i,j]:=s/(n-1);
 end;
end;
procedure viv(var mas5:preobmas);
 var i,j:integer;
begin
 for i:=1 to n do
  begin
  writeln;
  for j:=1 to m do
       write(mas5[i,j]:8:1);
  end;
end;
 var mas:massiv;
     mass:preobmas;
begin
 clrscr;
 randomize;
 zapoln(mas);
 vivod(mas);
 sredn(mas,mass);
 writeln('preobrazovannii');
 viv(mass);
 readln;
end.



 

Ребята, я понимаю, что моя задача по сравнению со всеми остальными просто детский лепет, но у меня проблемы.

Написать программу, которая вычисляет, есть ли среди цифр натурального числа нули.


Заранее спасибо.


 

Куратор темы
Статус: Не в сети
Регистрация: 03.01.2004
Откуда: Питер
manya

вот так

Код:
procedure sredn(var mas3:massiv;var mas4:preobmas);
 var i,j,s:integer;
begin
 for i:=1 to n do
 begin
  s:=0;
  for j:=1 to m-1 do
        s:=s+mas3[i,j]; 
  mas4[i,m]:=s/(m-1);
 end;
end;


Dancing Soul

в данной теме уже много раз обсуждалась проблема разбиения числа на цифры, воспользуйтесь поиском.
Если число может быть не целым, то нужно определить некую точность, т.е. до какого знака после запятой будет вестись расчет. Далее просто умножаем число на 10^x, где 10^x - определенная точность, а дробную часть отбрасываем. Теперь это исходное число для расчетов.
После чего последовательно выполняем следующие действия:
1. делим исходное число на 10 нацело, после чего умножаем на 10 и отнимаем его от исходного. Получаем последнюю цифру этого числа (проверяем, равна нулю или нет, если да, то выходим из цикла с выводом сообщения о присутствии цифры 0 в числе). Далее подаем это число (которое на 10 нацело разделено) снова на вход пункта 1, в качестве исходного.

_________________
Здесь так мало тех, с кем легко говорить,
Еще меньше тех, с кем не страшно молчать (c)


 

спасибо!
ответ доступный, думаю, разберусь.


Показать сообщения за:  Поле сортировки  
Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 985 • Страница 33 из 50<  1 ... 30  31  32  33  34  35  36 ... 50  >
-

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB | Kolobok smiles © Aiwan