Вопрос № 178498: здравствуйте.помогите написать программу на языке pascal с использованием динамических переменных,процедур и функций,модуля. из заданного на плоскости множества точек(их координаты вводить из файла)выбрать те, которые образуют треугольники ...
Вопрос № 178570: Дороги эксперты,помогите мне исправить программку. Немогли вы бы мне исправить..нахождения суммы чисел?...
Вопрос № 178582: Здравствуйте, уважаемые Эксперты! =) Помогите, пожалуйста, решить такую задачу: Дан текстовый файл, в котором записано произвольное количество строк. В каждой строке записаны подряд цифры, т.е. в каждой строке записано одно число (рязрядность м...
Вопрос № 178590: Уважаемые эксперты, помогите. В текстовом файле найти предложение с максимальным количесвом слов и записать его в новый файл....
Вопрос № 178498:
здравствуйте.помогите написать программу на языке pascal с использованием динамических переменных,процедур и функций,модуля. из заданного на плоскости множества точек(их координаты вводить из файла)выбрать те, которые образуют треугольники и нарисовать их.
Отвечает Boriss, Академик :
Здравствуйте, воронова любовь. Вот посмотрите, так ли? Много не тестировал. Напишите, если что не так В прилагаемом архиве исходный код программы и файл исходных данных для программы
Прикрепленный файл:загрузить »
----- Вывод - то место в тексте, где вы устали думать
Ответ отправил: Boriss, Академик
Ответ отправлен: 24.05.2010, 16:02
Номер ответа: 261623
Вам помог ответ? Пожалуйста, поблагодарите эксперта за это! Как сказать этому эксперту "спасибо"?
Отправить SMS#thank 261623
на номер 1151 (Россия) |
Еще номера »
Вопрос № 178570:
Дороги эксперты,помогите мне исправить программку. Немогли вы бы мне исправить..нахождения суммы чисел?
Отвечает 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 (Россия) |
Еще номера »
Вопрос № 178582:
Здравствуйте, уважаемые Эксперты! =) Помогите, пожалуйста, решить такую задачу: Дан текстовый файл, в котором записано произвольное количество строк. В каждой строке записаны подряд цифры, т.е. в каждой строке записано одно число (рязрядность может быть любой). Вывести на экран сумму всех записанных в файле чисел. Например, входные данные: 1 123 123456 1223446899075232 6684 Ответом должна быть строка: 1223446899873979
Насколько я понимаю, входные данные стоит читать как
строки, с помощью (mod 10) выделять последнюю цифру в числе и складывать с последней цифрой другого числа (похоже на сложение столбиком). но никак не пойму, как считать данные числа, ведь нам неизвестно, сколько всего чисел дано.
Отвечает 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.
Отвечает amnick, Студент :
Здравствуйте, Ратанов Валерий Семенович.
Мой вариант решения — в приложении. Предложения могут быть на нескольких строках. Недостаток этого решения: в программе нет проверки на переполнение, если предложение содержит больше 255 символов (максимальный размер STRING в Turbo Pascal), то результат будет неверный. Соответствующие места в программе помечены комментарием '{ внимание! возможно переполнение! }'
Программа проверена в Turbo Pascal 7.0 на текстовых файлах и вводе с клавиатуры. Если
есть вопросы, то обращайтесь в мини-форум. Успехов!
Приложение:
Ответ отправил: amnick, Студент
Ответ отправлен: 24.05.2010, 22:49
Номер ответа: 261628
Вам помог ответ? Пожалуйста, поблагодарите эксперта за это! Как сказать этому эксперту "спасибо"?
Отправить SMS#thank 261628
на номер 1151 (Россия) |
Еще номера »
Оценить выпуск »
Нам очень важно Ваше мнение об этом выпуске рассылки!
* Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи.
(полный список тарифов)
** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
*** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.