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




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



Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 985 • Страница 13 из 50<  1 ... 10  11  12  13  14  15  16 ... 50  >
  Пред. тема | След. тема 
В случае проблем с отображением форума, отключите блокировщик рекламы
Автор Сообщение
 
Прилепленное (важное) сообщение

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

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

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


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

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



Партнер
 

Member
Статус: Не в сети
Регистрация: 05.07.2004
Откуда: г. Москва
Код:
uses crt;
var
  mas: array[0..1000] of integer;
  mmax, mmin, msum, mcount, i : integer;
begin
 clrscr;
 i:=0;
 while mas[i]<>0 then
 begin
 writeln('M[', i , ']= ');
 read(mas[i]);
 inc(i);
 end;
 mcount:=i-1;
 i:=0; msum:=0; mmax:=0; mmin:=mas[0];
 while mas[i]<>0 then
  begin
  msum:=msum+mas[i];
  if trunc(mas[i]/3)=0 then
     begin
       if mas[i]>mmax then mmax:=mas[i];
       if mas[i]<mmin then mmin:=mas[i];
     end;
  inc(i);
 end;
 writeln('Сумм: ',msum);
 writeln('Макс: ',mmax);
 writeln('Мин: ',mmin);
 writeln('Кол: ',mcount);
 readkey;
end.


с trunc мог напутать - точно не помню, help-а близко нет.
Нужна функции, которая получает значение после запятой фун(1,56)=0,56
Отредактировано куратором: Lord_of_Darkness. Дата: 05.03.2006 15:18

_________________
"Не припадайте к статуям, нет правды в их ногах."


 

Куратор темы
Статус: Не в сети
Регистрация: 03.01.2004
Откуда: Питер
SergGreen
Цитата:
if trunc(mas[i]/3)=0 then
это условие верно ВСЕГДА. trunc просто отбрасывает дробную часть числа. Нужно использовать mod - возвращает остаток от деления.
Цитата:
while mas[i]<>0 then
Зачем это, если ты уже знаешь индекс последнего элемента массива (это у тебя mcount), используй for

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


 

Member
Статус: Не в сети
Регистрация: 18.07.2005
Откуда: Из Москвы
Lord_of_Darkness думаю в строчку,а про разряды не знаю честно говоря

_________________
Let's have no sadness — furrowed brow.
There's nothing new in dying now


 

Куратор темы
Статус: Не в сети
Регистрация: 03.01.2004
Откуда: Питер
Russia KamRat
Цитата:
думаю в строчку
значит вариант SergGreen не подходит? Просто сам посуди, как можно выделить отдельные числа из строки вида 756762530 ? Если сделать ввод так: 75 6 76 2 5 3 0 будет уже лучше, но в любом случае реализация разбора такой строки будет не очень легкой и не очень короткой.
ЗЫ на самом деле, судя по дальнейшим вычислениям, уровень программы настолько низок, что вариант с вводом в цикле должен вполне подойти.

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


Последний раз редактировалось Lord_of_Darkness 10.03.2006 19:00, всего редактировалось 2 раз(а).

 

Member
Статус: Не в сети
Регистрация: 10.03.2003
Откуда: Россия, Моск...
блин, сейчас надо уйти. С 21,00 до 22,00 здесь будет рабочая прога. Программа элементарная...
Добавлено спустя 3 часа, 20 минут, 1 секунду
малец задержался, вот:

Код:
Program Over;
  Uses CRT;
  Var I,K,J,S,MIN,MAX : INTEGER;
                  A,B : Array[1..20] Of INTEGER;
  Function Minimum(MIN,X : INTEGER) : INTEGER;
    Begin
      If X<Min Then
        Minimum:=X
      Else
        Minimum:=MIN;
    End;
  Function Maximum(MAX,X : INTEGER) : INTEGER;
    Begin
      If X>MAX Then
        Maximum:=X
      Else
        Maximum:=MAX;
    End;
Begin
  Clrscr;
  Writeln('Vvedite massiv');
  Writeln;
  For I:=1 To 20 Do
    Begin
      Write('A[',I,']=');
      Readln(A[I]);
    End;
  {poisk indeksa 0}
  For I:=1 To 20 Do
    Begin
      If A[I]=0 Then
        K:=I; {slaboe mesto}
    End;
  Writeln;
  Writeln('Nomer nulevogo K=',K);
  {videlenie elementov kratnih 3 v massiv B}
  J:=1;
  S:=0;
  For I:=1 To K-1 Do
    If A[I] Mod 3 = 0 Then
      Begin
        B[J]:=A[I];
        J:=J+1;
      End
    Else;
  Writeln('Kratnie 3');
  Writeln;
  MAX:=B[1];
  MIN:=B[1];
  {Vivod massiva B}
  For I:=1 To J-1 Do
    Begin
      Writeln('B[',I,']=',B[I]);
      S:=S+B[I];
      MAX:=Maximum(MAX,B[I]);
      MIN:=Minimum(MIN,B[I]);
    End;
  Writeln;
  Writeln('Summa S=',S);
  Writeln('MIN=',MIN);
  Write('MAX=',MAX);
  Readln;
End.

Добавлено спустя 5 минут, 40 секунд
Число 20 взято от балды. Можно сделать, чтоб пользователь вводил (плохо помню, но если надо вспомню. Помню что что через пользовательский тип...).
"Слабое место" - смысл в том, что если будет 2 нуля, то определится последний, что не есть гуд. Можно ввести еще одну переменную и сделать из нее счетчки измения К. Если после цикла К равно единице, то все гуд. Или, что более вероятно, лучше использовать другой тип цикла, но, опять же... надо вспоминать.

Еще можно чуток подумать и, как мне кажется, сделать одну функцию вместо двух. Но может и не получится.
Добавлено спустя 3 минуты, 4 секунды
SergGreen
Как сказал бы мой преподаватель: "Ты не интеллигентно пишешь". :D


 

Member
Статус: Не в сети
Регистрация: 18.07.2005
Откуда: Из Москвы
m2 пасибо тебе огромное :beer:

_________________
Let's have no sadness — furrowed brow.
There's nothing new in dying now


 

Куратор темы
Статус: Не в сети
Регистрация: 03.01.2004
Откуда: Питер
m2 надо просто сделать так:
Код:
repeat
inc(i);
......
until A[i]=0;

число значащих элементов массива будет равно i-1, а массив сделать [1..100] или даже 1000, вдруг трудолюбивый юзер попадется (читай придирчивый препод ;)
SergGreen Я сразу не заметил, но это
Код:
 while mas[i]<>0 then
begin
writeln('M[', i , ']= ');
read(mas[i]);
inc(i);
end;

работать не будет, т.к. ты проверяешь каждый раз еще не заполненный элемент массива.

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


 

Member
Статус: Не в сети
Регистрация: 10.03.2003
Откуда: Россия, Моск...
Russia KamRat
пожалуйста
Lord_of_Darkness
в точку


 

Member
Статус: Не в сети
Регистрация: 05.07.2004
Откуда: г. Москва
Lord_of_Darkness
Согласен:) Надо, repeat...until использовать:)
А вот на счет trunk...ну я же написал, что не помню точно функцию:) и хелпа под рукой нет.
И на счет циклов, где-то читал, что по скорости все циклы равны, но - да, согласен, for использовать лучше...сам хотел поправить, но и так торопился. Решил что не суть важно:)

m2
Ну...понятие интеллигентности у всех разное - предпочитаю короткий а не академически правильный код. Я, например, не увидел смысла вводить лишние функции, тем более, что они применимы только для этой задачи. И выйгрыша не дают не в коде, не в скорости. Разве что написать общую, типа minmax, с переключающим параметром.

[/b]Russia KamRat[b]
Писал за 5 минут до ухода домой - звиняйте. Хотя такая простая ошибочка с while...обыдно:(

_________________
"Не припадайте к статуям, нет правды в их ногах."


 

Member
Статус: Не в сети
Регистрация: 10.03.2003
Откуда: Россия, Моск...
SergGreen
:beer:

Ни у кого нет программки для сортировки массивов (от наименьшего к наибильшему)? Массив рандомный, число элементов вводит пользователь. Алгоритм есть (два метода), но времени на реализацию нет. Как всегда дотянул до последнего.


 

Куратор темы
Статус: Не в сети
Регистрация: 03.01.2004
Откуда: Питер
m2 у меня на ПС и сайте есть методом Шелла, правда на Delphi, но и в паскале работать будет.
Добавлено спустя 1 минуту, 1 секунду
А вообще методов много, в школах обычно используют метод пузырька и иже с ними

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


 

Member
Статус: Не в сети
Регистрация: 10.03.2003
Откуда: Россия, Моск...
А алгоритм таков, находим максимальный элемент, ставим на последнее место. Находи максимальный для -1 элементов и так далее... Сортировка обменом кажется называется
Отредактировано куратором: Lord_of_Darkness. Дата: 05.03.2006 15:20


 

Куратор темы
Статус: Не в сети
Регистрация: 03.01.2004
Откуда: Питер
неэффективно. попробуй так:
берем два рядом стоящих элемента и если 1-й больше 2-го - меняй их местами, иначе идем далее. Когда число перестановок за один проход будет равно 0, массив окажется отсортирован.
ЗЫ советую не изобретать колесо, а воспользоваться готовым алгоритмом.

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


 

Member
Статус: Не в сети
Регистрация: 10.03.2003
Откуда: Россия, Моск...
Lord_of_Darkness
задание такое...начинаю делать, прогу выложу вечерком, может что-то посоветуете
Добавлено спустя 1 час, 9 минут, 20 секунд
Ну вот... не работает...Почему-то не N не меняется
Код:
Program Sort;
  Uses CRT;
  Var A,B : Array[1..20] Of INTEGER;
      I,MAX,MAX1,C,N,K : INTEGER;
 Function Maximum(MAX,X : INTEGER) : INTEGER;
    Begin
      If X>MAX Then
        Maximum:=X
      Else
        Maximum:=MAX;
    End;
Begin
  K:=0;
  Clrscr;
  Writeln('Ishodnii massiv');
  Writeln;
  {vvod,vivod massiva}
  For I:=1 To 20 Do
    Begin
      A[I]:=Random(99);
      Writeln('A[',I,']=',A[I]);
    End;
  MAX:=A[1];
  Repeat
    {max}
    For I:=1 To 20-K Do
      MAX:=Maximum(MAX,A[I]);
    {nomer max}
    For I:=1 To 20-K Do
      If MAX=A[I] Then
        N:=I
      Else;
    {meniaem mestami}
    C:=A[20-K];
    A[20-K]:=MAX;
    A[N]:=C;
    K:=K+1;
  Until K=20;
 { Writeln('N=',N);
  Writeln('MAX=',MAX);}
  Writeln;
  Writeln('Novii massiv');
  Writeln;
  For I:=1 To 20 Do
    Writeln('A[',I,']=',A[I]);
  Writeln;
  Writeln('Programmu razrabotal Chuvstvin M.B; PT0502');
  Readln
End.

Добавлено спустя 23 минуты, 40 секунд
Надо было строчку
MAX:=A[1];
поместить в цикл! :bandhead:

Возможно ли оптимизации? Эту прогу надо сделать по заданию модулем. Тобишь написать прогу, которая вызывает модуль... Никогда с модулями не работал...


 

Куратор темы
Статус: Не в сети
Регистрация: 03.01.2004
Откуда: Питер
m2
1. ИМХО будет гораздо лучше смотреться, если массив выводить в строку, разделяя пробелами, а не так как у тебя в столбец.
2. вместо своего repeat...until напиши так:
Код:
var
  I1: integer;

.......................

for k:=0 to 19 do
begin
   MAX:=A[1];
   I1:=1;
   for i:=2 to 20-k do
      if A[i]>MAX then
      begin
         MAX:=A[i];
         I1:=i;
      end;
    A[I1]:=A[20-k];
    A[20-k]:=MAX;
end;

Вот, вроде ничего не напутал, прям сюда писал.
И нечего зря кучу циклов лишних плодить...
3. Чего тут оптимизировать то? Вот циклы лишние покромсай, как я написал.
4. модуль - очень просто
-делаешь свою прогу функцией (на входе массив объявляешь как var, т.е. function sort(var A: array [1..20] of integer); )
-создаешь pas файл unit такой-то; interface, uses и т.д. в справке все расписано подробно
-в своей проге напишешь uses мой_модуль;
все можещь использовать свою функцию.

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


 

Member
Статус: Не в сети
Регистрация: 10.03.2003
Откуда: Россия, Моск...
Lord_of_Darkness
сенкс


Какие-нибудь проги существуют, чтобы создавать блок-схемы, тоько традиционные, а не типа тех, что делает прога Visustin...


 

Куратор темы
Статус: Не в сети
Регистрация: 03.01.2004
Откуда: Питер
m2
Цитата:
Какие-нибудь проги существуют, чтобы создавать блок-схемы
да, ручки :) Нормальную блок-схему можно только так нарисовать.

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


 

Member
Статус: Не в сети
Регистрация: 08.03.2004
Два слова наз. близнецами, если одно из них получается из другого перестановкой букв. Например, пальто и палоть. Составить програграмму, которая ищет слова близнецы в данном предложении.


Пусть n человек встают вкруг и получают номера, считая по часовой стрелке, 1,2,..,n. Начиная с 1-ого, по часовой стрелке, отсчитывается k-ый по порядку чел(т.к. люди стоят в кругу, то за n-ым человеком стоит 1-ый). Этот k-ый человек выходит из круга, после чего, начиная со следующего, снова остчитывается k-ый чел. Процесс продолжается до тех пор, пока из всего круга не остаётся один чел. Написать программу, определяющую номер k-ого человека в первоначальном кругу.

Помогите пллз, ато меня убьют...


 

Member
Статус: Не в сети
Регистрация: 10.03.2003
Откуда: Россия, Моск...
Надо целое число написать словами.

Например, дано число 123. Как в переменную А записать 1, в переменную В - 2, а в С - 3?

Тема строки...
Добавлено спустя 2 минуты, 51 секунду
числп меньше 1000


 

Куратор темы
Статус: Не в сети
Регистрация: 03.01.2004
Откуда: Питер
m2 вот лови
Код:
program Num2Str;
uses crt;

const
  A: array[0..9, 1..3] of string =
  (('', '', ''),
    ('сто ', '', 'один '),
    ('двести ', 'двадцать ', 'два '),
    ('триста ', 'тридцать ', 'три '),
    ('четыреста ', 'сорок ', 'четыре '),
    ('пятьсот ', 'пятьдесят ', 'пять '),
    ('шестьсот ', 'шестьдесят ', 'шесть '),
    ('семьсот ', 'семдесят ', 'семь '),
    ('восемьсот ', 'восемдесят ', 'восемь '),
    ('девятьсот ', 'девяносто ', 'девять '));
  B: array[0..9] of string =
    ('десять ', 'одинадцать ', 'двенадцать ',
     'тринадцать ', 'четырнадцать ', 'пятнадцать ',
     'шестнадцать ', 'семнадцать ', 'восемнадцать ','девятнадцать ');

var
  i, InputNum: integer;
  Numbers: array [1..3] of integer;
  res: string;
begin
  clrscr;
  textcolor(2);
  write('Введите число [0..1000]: ');
  textcolor(white);
  readln(InputNum);
  textcolor(2);
  write('Введено число ');
  if (InputNum<0) or (InputNum>1000) then writeln('введенное число вне допустимого диапазона.')
  else if InputNum=0 then writeln('нуль')
  else if InputNum=1000 then writeln('тысяча')
  else
  begin
    Numbers[1]:=InputNum div 100;
    Numbers[2]:=(InputNum div 10) - Numbers[1]*10;
    Numbers[3]:=InputNum - (Numbers[1]*100 + Numbers[2]*10);

    if Numbers[2]<>1 then
      res:=A[Numbers[1],1]+A[Numbers[2],2]+A[Numbers[3],3]
    else
      res:=A[Numbers[1],1]+B[Numbers[3]];

    textcolor(white);
    write(res);

  end;


  readln;
end.

прога ведь не сложная, только муторная малость, мог бы и сам написать...

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


Последний раз редактировалось Lord_of_Darkness 03.05.2006 14:23, всего редактировалось 1 раз.

Показать сообщения за:  Поле сортировки  
Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 985 • Страница 13 из 50<  1 ... 10  11  12  13  14  15  16 ... 50  >
-

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


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

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


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

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