Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RFpro.ru: Программирование на языке Pascal


Хостинг портала RFpro.ru:
Московский хостер
Профессиональный ХОСТИНГ на базе Linux x64 и Windows x64

РАССЫЛКИ ПОРТАЛА RFPRO.RU

Чемпионы рейтинга экспертов в этой рассылке

lamed
Статус: Профессионал
Рейтинг: 2689
∙ повысить рейтинг »
Boriss
Статус: Академик
Рейтинг: 2406
∙ повысить рейтинг »
star9491
Статус: Профессионал
Рейтинг: 2069
∙ повысить рейтинг »

/ КОМПЬЮТЕРЫ И ПО / Программирование / Pascal (Паскаль)

Номер выпуска:1092
Дата выхода:28.05.2010, 17:30
Администратор рассылки:Boriss, Академик
Подписчиков / экспертов:222 / 180
Вопросов / ответов:4 / 4

Вопрос № 178498: здравствуйте.помогите написать программу на языке pascal с использованием динамических переменных,процедур и функций,модуля. из заданного на плоскости множества точек(их координаты вводить из файла)выбрать те, которые образуют треугольники ...


Вопрос № 178570: Дороги эксперты,помогите мне исправить программку. Немогли вы бы мне исправить..нахождения суммы чисел?...
Вопрос № 178582: Здравствуйте, уважаемые Эксперты! =) Помогите, пожалуйста, решить такую задачу: Дан текстовый файл, в котором записано произвольное количество строк. В каждой строке записаны подряд цифры, т.е. в каждой строке записано одно число (рязрядность м...
Вопрос № 178590: Уважаемые эксперты, помогите. В текстовом файле найти предложение с максимальным количесвом слов и записать его в новый файл....

Вопрос № 178498:

здравствуйте.помогите написать программу на языке pascal с использованием
динамических переменных,процедур и функций,модуля.
из заданного на плоскости множества точек(их координаты вводить из файла)выбрать те,
которые образуют треугольники и нарисовать их.

Отправлен: 19.05.2010, 15:59
Вопрос задал: воронова любовь, Посетитель
Всего ответов: 1
Страница вопроса »


Отвечает Boriss, Академик :
Здравствуйте, воронова любовь.
Вот посмотрите, так ли? Много не тестировал. Напишите, если что не так
В прилагаемом архиве исходный код программы и файл исходных данных для программы Прикрепленный файл: загрузить »

-----
Вывод - то место в тексте, где вы устали думать

Ответ отправил: Boriss, Академик
Ответ отправлен: 24.05.2010, 16:02
Номер ответа: 261623

Вам помог ответ? Пожалуйста, поблагодарите эксперта за это!
Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 261623 на номер 1151 (Россия) | Еще номера »
  • Отправить WebMoney:

  • Вопрос № 178570:

    Дороги эксперты,помогите мне исправить программку.
    Немогли вы бы мне исправить..нахождения суммы чисел?

    Отправлен: 22.05.2010, 19:46
    Вопрос задал: Сергей Маринин, Посетитель
    Всего ответов: 1
    Страница вопроса »


    Отвечает lamed, Профессионал :
    Здравствуйте, Сергей Маринин! Немножко упростил программу, старался не менять стиль, поэтому, в частности, функции не использовал. Чтобы упростить вычитание, пришлось пойти на побочный эффект, если второе число больше первого, меняем их местами.
    Если требуются комментарии - пожалуйста, в мини-форум.
    Код:
    program pr1;
    { программа работает только с неотрицательными числами одинаковой длины }
    { порядок работы:
    1. ввести число цифр n
    2. ввести n цифр первого числа: цифра, ввод, цифра, ввод, и т.д.
    3. ввести n цифр второго числа: цифра, ввод, цифра, ввод, и т.д.
    Если одно из чисел должно быть короче другого, вставляем впереди
    необходимое количество нулей, например, чтобы сложить 1+22,
    вводим
    длину числа 2,
    0, ввод, 1 , ввод
    2, ввод, 2, ввод
    }

    uses
    crt;
    type cifra=0..9;
    chislo=array [1..1000] of cifra;
    VAR
    minus : boolean;
    m1,m2,sum,razn, vrem : chislo;
    n, i, p, k : integer;
    X,Y : integer;

    begin

    {vvod chisel}
    write('vvedi n ');
    readln(n);

    write('vvedi 1oe chislo ');
    (* после каждой цифры набираете Enter *)
    X:= WhereX;
    Y:= WhereY;
    for i:=1 to n do
    begin
    GotoXY(X+i, Y);
    readln(m1[i]);
    end;

    write('vvedi 2oe chislo ');
    X:= WhereX;
    Y:= WhereY;
    for i:=1 to n do
    begin
    GotoXY(X+i, Y);
    readln(m2[i]);
    end;

    {summa chisel}
    p:=0;
    for i:=n downto 1 do begin
    k:=m1[i]+m2[i]+p;
    p := k div 10;
    sum[i] := k mod 10;
    end;

    if p>0 then begin
    n:= n+1;
    for i:= n downto 2 do
    sum[ i] := sum[i-1];
    sum[1] := 1;
    end;

    write('summa=');
    for i:=1 to n do
    write(sum[i]);
    writeln;

    {sravnenie}
    minus := false; (* пока счмтаем разность неотрицательной *)
    for i:= 1 to n do
    if m1[i] > m2[i] then
    break
    else if m1[i]<m2[i] then
    begin
    minus := true;
    break;
    end;

    if minus then (* обмен m1 и m2 *)
    begin
    vrem := m1;
    m1 := m2;
    m2 := vrem;
    end;

    {vichitanie}
    p:=1;
    for i:=n downto 1 do begin
    k:=m1[i]-m2[i]-(1-p);
    if k>=0 then
    p:= 1
    else
    begin
    k:= k+10;
    p := 0;
    end;
    razn[i] := k;
    end;

    write('raznost=');
    i:= 1;
    while (i<=n) and (razn[i]=0) do
    i := i+1;
    if (i=n+1) then
    write('0')
    else
    begin
    if minus then
    write ('-');
    while (i<=n) do
    begin
    write(razn[i]);
    i:= i+1;
    end;
    end;
    writeln;

    end.

    Ответ отправил: lamed, Профессионал
    Ответ отправлен: 25.05.2010, 20:46
    Номер ответа: 261644

    Вам помог ответ? Пожалуйста, поблагодарите эксперта за это!
    Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 261644 на номер 1151 (Россия) | Еще номера »
  • Отправить WebMoney:

  • Вопрос № 178582:

    Здравствуйте, уважаемые Эксперты! =)
    Помогите, пожалуйста, решить такую задачу:
    Дан текстовый файл, в котором записано произвольное количество строк. В каждой строке записаны подряд цифры, т.е. в каждой строке записано одно число (рязрядность может быть любой). Вывести на экран сумму всех записанных в файле чисел.
    Например, входные данные:
    1
    123
    123456
    1223446899075232
    6684
    Ответом должна быть строка:
    1223446899873979

    Насколько я понимаю, входные данные стоит читать как строки, с помощью (mod 10) выделять последнюю цифру в числе и складывать с последней цифрой другого числа (похоже на сложение столбиком).
    но никак не пойму, как считать данные числа, ведь нам неизвестно, сколько всего чисел дано.

    Заранее благодарю за помощь=)

    Отправлен: 23.05.2010, 05:01
    Вопрос задал: John_the_Revelator, Посетитель
    Всего ответов: 1
    Страница вопроса »


    Отвечает lamed, Профессионал :
    Здравствуйте, John_the_Revelator!. ABC-Pascal
    Текст программы
    Код:
    program p178582;
    { Дан текстовый файл, в котором записано произвольное количество строк.
    В каждой строке записаны подряд цифры, т.е. в каждой строке записано
    одно число (рязрядность может быть любой). Вывести на экран сумму всех
    записанных в файле чисел. }

    function sum(var s1,s2: string):string;
    // сложение строк цифр, результат - строка
    var
    l1, l2: integer; // длина первой строки
    i : integer; // длина второй строки
    s3 : string; // строка - результат
    carry : 0..1; // флаг переноса 0,1
    digit : 0..9; // десятичная цифра
    num : integer; // сумма цифр в текущем разряде
    begin
    l1 := length(s1);
    l2 := lengt h(s2);

    // приписываем нули в короткой строку слева, выравниваем по длине
    if l1>l2 then
    for i:= 1 to l1-l2 do
    s2 := '0'+s2
    else if l2>l1 then
    begin
    for i:= 1 to l2-l1 do
    s1 := '0'+s1;
    l1:= l2;
    end;

    s3 := ''; // вначале результат пуст
    carry := 0; // флаг переноса - в нуль
    for i:= l1 downto 1 do
    begin
    num := ord(s1[i])-ord('0')+ord(s2[i])-ord('0')+carry;
    digit := num mod 10; // цифра суммы разрядов
    s3:= chr(digit+ord('0'))+s3; // приписываем эту цифру слева
    carry := num div 10;
    end;
    if carry=1 then // приписывем перенос слева от результата
    s3:='1'+s3;
    sum := s3;
    end;

    var
    f: text; // файловая переменная
    fname: string; // имя файла
    s1, s2, s3: string; // строки
    first_string: boolean; // для & quot;украшательства"
    len: integer; //
    begin
    fname := 'a.dat'; // файл данных
    if not FileExists(fname) then
    begin
    writeln('файл не существует');
    readln;
    exit;
    end
    else
    begin
    len := 0;
    s1:='0';
    assign(f, fname);
    reset(f);
    first_string := true;
    while not eof(f) do
    begin
    readln(f, s2);
    if not first_string then
    write('+')
    else
    first_string := false;
    if len >70 then
    begin
    len := 0;
    writeln;
    end;
    write(s2);
    len := len+length(s2);
    s1:= sum(s1,s2); // складываем предыдущую сумму с новой строкой
    end;
    close(f);
    end;
    write('=');
    writeln(s1);
    readln;
    end.


    Содержание файла a.dat
    Код:
    1
    123
    123456
    1223446899075232
    6684
    668483

    Пример вывода
    Код:
    1+123+123456+1223446899075232+6684+668483=1223446899873979


    Ответ отправил: lamed, Профессионал
    Ответ отправлен: 23.05.2010, 20:21
    Номер ответа: 261592

    Вам помог ответ? Пожалуйста, поблагодарите эксперта за это!
    Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 261592 на номер 1151 (Россия) | Еще номера »
  • Отправить WebMoney:

  • Вопрос № 178590:

    Уважаемые эксперты, помогите.

    В текстовом файле найти предложение с максимальным количесвом слов и записать его в новый файл.

    Отправлен: 23.05.2010, 16:16
    Вопрос задал: Ратанов Валерий Семенович, Посетитель
    Всего ответов: 1
    Страница вопроса »


    Отвечает amnick, Студент :
    Здравствуйте, Ратанов Валерий Семенович.

    Мой вариант решения — в приложении. Предложения могут быть на нескольких строках. Недостаток этого решения: в программе нет проверки на переполнение, если предложение содержит больше 255 символов (максимальный размер STRING в Turbo Pascal), то результат будет неверный. Соответствующие места в программе помечены комментарием '{ внимание! возможно переполнение! }'

    Программа проверена в Turbo Pascal 7.0 на текстовых файлах и вводе с клавиатуры.
    Если есть вопросы, то обращайтесь в мини-форум.
    Успехов!

    Приложение:

    Ответ отправил: amnick, Студент
    Ответ отправлен: 24.05.2010, 22:49
    Номер ответа: 261628

    Вам помог ответ? Пожалуйста, поблагодарите эксперта за это!
    Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 261628 на номер 1151 (Россия) | Еще номера »
  • Отправить WebMoney:

  • Оценить выпуск »
    Нам очень важно Ваше мнение об этом выпуске рассылки!

    Задать вопрос экспертам этой рассылки »

    Скажите "спасибо" эксперту, который помог Вам!

    Отправьте СМС-сообщение с тестом #thank НОМЕР_ОТВЕТА
    на короткий номер 1151 (Россия)

    Номер ответа и конкретный текст СМС указан внизу каждого ответа.

    Полный список номеров »

    * Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи. (полный список тарифов)
    ** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
    *** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.


    © 2001-2010, Портал RFpro.ru, Россия
    Авторское право: ООО "Мастер-Эксперт Про"
    Автор: Калашников О.А. | Программирование: Гладенюк А.Г.
    Хостинг: Компания "Московский хостер"
    Версия системы: 2010.6.16 от 26.05.2010

    В избранное