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

RFpro.ru: Программирование на Delphi и Lazarus


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

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

Лучшие эксперты данной рассылки

Орловский Дмитрий
Статус: Профессор
Рейтинг: 4052
∙ повысить рейтинг »
Boriss
Статус: Академик
Рейтинг: 2649
∙ повысить рейтинг »
cradlea
Статус: Практикант
Рейтинг: 1258
∙ повысить рейтинг »

/ КОМПЬЮТЕРЫ И СОФТ / Программирование / Delphi и Lazarus

Номер выпуска:1583
Дата выхода:25.02.2011, 04:00
Администратор рассылки:Киселёва Алёна aka Verena (Профессор)
Подписчиков / экспертов:264 / 186
Вопросов / ответов:2 / 3

Вопрос № 182254: Добрый вечер дорогие эксперты. Требуется помощь в написании программы на Delphi 7 с использованием консольного приложения. Вот задание. Дан файл вещественных чисел. Заменить числа в файле со второго по предпоследнее средним арифметич...


Вопрос № 182256: Здравствуйте, дорогие эксперты. Требуется помощь в доработке программы. Она написана на Delphi 7 в консольном приложении..... Задача программы звучит так: Из данного текстового файла удалить слова, длина которых превышает данное число...

Вопрос № 182254:

Добрый вечер дорогие эксперты.
Требуется помощь в написании программы на Delphi 7 с использованием консольного приложения.

Вот задание.
Дан файл вещественных чисел.
Заменить числа в файле со второго по предпоследнее средним арифметическим данного, предыдущего и последующего.

Свою наработку выложить не могу...потому как не пойму как двигаться по фаилу и что делать собственно...

Жду от вас помощи, эксперты.
Спасибо.

Отправлен: 19.02.2011, 04:22
Вопрос задал: Юдин Евгений Сергеевич (7-й класс)
Всего ответов: 2
Страница вопроса »


Отвечает Влaдимир (Студент) :
Здравствуйте, Юдин Евгений Сергеевич!
Немного переделал Ваш код. Обращаю Ваше внимание, что файл открывается как File of real.
Код в приложении.
Удачи!

Приложение:

Ответ отправил: Влaдимир (Студент)
Ответ отправлен: 19.02.2011, 20:01
Номер ответа: 265924
Россия, Санкт-Петербург

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


  • Отвечает Орловский Дмитрий (Профессор) :
    Здравствуйте, Юдин Евгений Сергеевич!
    Код:
    program PMain;

    {$APPTYPE CONSOLE}

    uses
    Classes, SysUtils;

    var
    fs: TFileStream;
    FileName: String;
    data: array of Real;
    x,y,z:Real;
    cnt:Integer;
    i:Integer;

    begin
    FileName:='.....................';
    fs:=TFileStream.Create(FileName,fmOpenReadWrite);
    cnt:=fs.Size div SizeOf(Real);
    SetLength(data,cnt);
    fs.Read(x,SizeOf(Real));
    fs.Read(y,SizeOf(Real));
    data[0]:=x;
    for i:=1 to cnt-1 do
    begin
    fs.Read(z,SizeOf(Real));
    data[i]:=(x+y+z)/3;
    x:=y;
    y:=z;
    end;
    data[cnt-1]:=z;
    fs.Seek(0,soFromBeginning);
    for i:=0 to cnt-1 do fs.Write(data[i],SizeOf(Real));
    fs.Free;
    Writeln('cnt=',cnt);
    Readln;
    end.

    Ответ отправил: Орловский Дмитрий (Профессор)
    Ответ отправлен: 19.02.2011, 20:38
    Номер ответа: 265925
    Россия, Москва
    Организация: МИФИ

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


  • Вопрос № 182256:

    Здравствуйте, дорогие эксперты.
    Требуется помощь в доработке программы.
    Она написана на Delphi 7 в консольном приложении.....

    Задача программы звучит так:
    Из данного текстового файла удалить слова, длина которых превышает данное число n.

    Есть своя наработка

    Код:
    program lab1;

    {$APPTYPE CONSOLE}

    function del_words(sl:string; count:byte):string;
    var
    i,k,j:integer;
    len:integer;
    begin
    i:=1;
    len:=length(sl);
    while i<=len do begin
    j:=i;
    k := 0;
    while (sl[i]<>' ') and (i<=len) do begin
    inc(i);
    inc(k);
    end;
    if k>count then begin
    delete(sl,j,k);
    len:=length(sl);
    end; inc(i);
    end;
    del_words := sl;
    end;

    var f,g:textfile;
    s,s1,name_in,name_out:string;
    ct:byte;
    begin
    write('input file name_in: ');
    readln(name_in);
    write('input file name_out: ');
    readln(name_out);
    write('input count symbols of word: ');
    readln(ct);
    assignfile(f,name_in);
    assignfile(g,name_out);
    reset(f);
    rewrite(g);
    while not eof(f) do
    begin
    read(f,s);
    s1:=del_words(s,ct);
    writeln(g,s1);
    end;
    CloseFile(f);
    CloseFile(g);
    end.


    Суть доработки в чем:
    1)Программа действительно удаляет слова, но почему то не все и не во всех случаях...
    Тоисть, при 5 она оставляет несколько слов не удовлетворяющих условию работы и так далее..
    2)Если это возможно, то как то модернизировать программу чтобы это делалось все через 1 фаил....без вспомогательного

    Спасибо за внимание.

    Отправлен: 19.02.2011, 10:01
    Вопрос задал: Юдин Евгений Сергеевич (7-й класс)
    Всего ответов: 1
    Страница вопроса »


    Отвечает Влaдимир (Студент) :
    Здравствуйте, Юдин Евгений Сергеевич!
    1) Когда в функции del_words уничтожается слово необходимо уменьшать не только длину строки, но и указатель на номер текущего символа:
    function del_words(sl:string; count:byte):string;
    var
    ....
    begin
    ......
    len:=length(sl);
    i:=i-k;
    ....
    end;
    Кроме того, в головной программе строку
    read(f,s);
    необходимо заменить на
    readln(f,s);
    в противном случае строка не переводиться на следующую и происходит зацикливание

    2) Для работы с текстами удобно использовать класс TStringList, объявленый в модуле Classes.
    Основную программу можно написать с следующем виде

    uses
    SysUtils,Classes;
    function del_words(sl:string; count:byte):string;
    ......
    end;

    var
    i:integer;
    FileText:TStringList;
    begin
    write('input file name_in: ');
    readln(name_in);
    write('input count symbols of word: ');
    readln(ct);
    FileText:=TStringList.Create;
    File Text.LoadFromFile(name_in);
    for M := 0 to FileText.Count - 1 do
    FileText[M]:=del_words(FileText[M],ct);
    FileText.SaveToFile(name_in);
    FileText.Free;
    end.

    Ответ отправил: Влaдимир (Студент)
    Ответ отправлен: 19.02.2011, 18:49
    Номер ответа: 265923
    Россия, Санкт-Петербург

    Оценка ответа: 5
    Комментарий к оценке:
    спасибо

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


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

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

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

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

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

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

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



    В избранное