1. Получи 30.000 рублей. Для получения денег необходимо принять участие в конкурсе авторов codeby. С условиями и призами можно ознакомиться на этой странице ...

    Внимание! Регистрация авторов на конкурс закрыта.

    Скрыть объявление
  2. Требуются разработчики и тестеры для проекта codebyOS. Требования для участия в проекте: Знание принципов работы ОС на базе Linux; Знание Bash; Крайне желательное знание CPP, Python, Lua; Навыки системного администрирования. Подробнее ...

    Скрыть объявление

Помогите! Паскаль не слушается!

Тема в разделе "Вопросы новичков и не только", создана пользователем -, 5 июн 2010.

  1. Гость

    Репутация:
    0
    Проблема такая: Дан файл, содержащий целые числа. Нужно вывести среднее арифметическое этих чисел. А он (паскаль) выводит какую-то хрень. Почему?
    Код:
    program z_1;
    
    uses crt;
    
    var f: file of integer;
    s: integer;
    k, l: real;
    i: byte;
    
    BEGIN
    clrscr;
    assign(f, 'z.dat');
    reset(f);
    while not eof(f) do
    begin
    s:=0;
    read(f, s);
    i:=i+1;
    k:=k+s;
    end;
    close(f);
    l:=k/i;
    writeln(l:3:3);
    readkey;
    END.
    На всякий случай
    Архив с программой и текстовым файлом
     
  2. Dock1100

    Dock1100 :-]

    Репутация:
    0
    Регистрация:
    9 ноя 2009
    Сообщения:
    665
    Симпатии:
    1
    Обнуляйте переменные
    Код:
    program z_1;
    
    uses crt;
    
    var f: file of integer;
    r,i: integer; {//////////}
    k, l: real;
    
    BEGIN
    clrscr;
    assign(f, 'z.txt');
    i:=0;			 {//////////}
    k:=0;			 {//////////} 
    reset(f);
    while not eof(f) do
    begin
    read(f, r);
    i:=i+1;
    k:=k+r;
    end;
    close(f);
    l:=k/i;
    writeln(l:3:3);
    readkey;
    END.
     
  3. Гость

    Репутация:
    0
    Насчет обнуления
    Код:
    program gg;
    
    uses crt;
    
    var i: integer;
    k: byte;
    r: real;
    
    BEGIN
    clrscr;
    writeln(i);
    writeln(k);
    writeln(r);
    readkey;
    END.
    Проблема в другом. В файле содержатся числа:
    1
    3
    1
    3
    1
    0
    3
    1
    А программа выдает среднее арифметическое: 6564,818
    Очевидно, что ср. ар. будет немножко другим :) Чё делать то???
     
  4. Гость

    Репутация:
    0
    Ошибка здесь:
    Код:
    read(f, r);
    Записывает не те числа, что в файле.
    Как это исправить?
     
  5. Гость

    Репутация:
    0
    Дан файл, содержащий целые числа.
     
  6. isqoff

    isqoff Гость

    Репутация:
    0
    а разве файл должен быть не .dat?(ведь переменная f создана как типизированная,а не текстовая !!!)
    ну а если он текстовый то и переменную f задавайте(f: Text;).
    Исходя из этого, какой всё таки файл дан,содержащий целые числа?
     
  7. isqoff

    isqoff Гость

    Репутация:
    0
    Код:
    uses crt;
    var f:Text;
    a,sum,sred:integer;
    b:real;
    BEGIN
    a:=0;
    sum:=0;
    sred:=0;
    b:=0;
    Assign(f,'d:\z.txt');
    Reset(f);
    while not EOF(f)do
    begin
    readln(f,a);
    sum:=sum+a;
    inc(sred);
    end;
    Close(f);
    b:=sum/sred;
    write('Среднее арифмитическое содержимого файла z.txt = ',b);
    
    END.
    
    вот решение для текстового файла
     
  8. Гость

    Репутация:
    0
    Код:
    program z_1;
    
    uses crt;
    
    var f: file of integer;
    s: integer;
    k, l: real;
    i: byte;
    
    BEGIN
    clrscr;
    assign(f, 'z.dat');
    reset(f);
    while not eof(f) do
    begin
    s:=0;
    read(f, s);
    i:=i+1;
    k:=k+s;
    end;
    close(f);
    l:=k/i;
    writeln(l:3:3);
    readkey;
    END.
    Ладно, меняем расширение у файла. Все равно ПОКАЗЫВАЕТ ТУ ЖЕ ЕРЕСЬ!!!
     
  9. Гость

    Репутация:
    0
    Я уж наверное тут всех достал :rolleyes:
    :crash:
     
  10. Dock1100

    Dock1100 :-]

    Репутация:
    0
    Регистрация:
    9 ноя 2009
    Сообщения:
    665
    Симпатии:
    1
    Вот пример, у меня все работает:
    Код:
    var f:file of integer;
    x,k,s:integer;
    sred:real;
    begin
    assign(f,'1.tt');
    rewrite(f);
    
    x:=1; {пишем наши целые числа}
    write(f,x);
    x:=3;
    write(f,x);
    x:=1;
    write(f,x);
    x:=3;
    write(f,x);
    x:=1;
    write(f,x);
    x:=0;
    write(f,x);
    x:=3;
    write(f,x);
    x:=1;
    write(f,x);
    
    close(f);
    
    readln;
    k:=0;
    s:=0;
    
    reset(f);
    while not eof(f) do 
    begin {читаем и выводим}
    k:=k+1;
    read(f,x);
    s:=s+x;
    writeln(x);
    end;
    
    writeln;
    sred:=s/k; {считаем среднее арифм.}
    writeln(sred:8:2);
    readln;
    
    
    close(f);
    end.
     
  11. Гость

    Репутация:
    0
    Когда файл cоздается программой все ок
    Код:
    Uses
    CRT;
    var
    f:file of integer;
    l, k:real;
    i,n,a:integer;
    begin
    clrscr;
    assign(f,'C:\file.xyi');
    rewrite(f);
    write('Введите количество элементов массива: ');
    readln(n);
    for i:=1 to n do
    begin
    write('Число ',i,'-e:=');
    readln(a);
    write(f,a);
    end;
    clrscr;
    k:=0;
    i:=0;
    writeln('Содержание исходного файла: ');
    reset(f);
    while not eof(f) do
    begin
    read(f,a);
    write(a,' ');
    inc(i);
    k:=k+a;
    end;
    l:=k/i;
    writeln;
    close(f);
    writeln(l);
    readkey;
    end.
    А когда файл уже создан, то нехрена не работает!
    Код:
    Uses
    CRT;
    var
    f:file of integer;
    l, k:real;
    i,a:integer;
    
    begin
    clrscr;
    assign(f,'C:\file.dat');
    k:=0;
    a:=0;
    i:=0;
    writeln('Содержание исходного файла: ');
    reset(f);
    while not eof(f) do
    begin
    read(f,a);
    write(a,' ');
    inc(i);
    k:=k+a;
    a:=0;
    end;
    l:=k/i;
    writeln;
    close(f);
    writeln(l:3:3);
    readkey;
    end.
     
  12. Dock1100

    Dock1100 :-]

    Репутация:
    0
    Регистрация:
    9 ноя 2009
    Сообщения:
    665
    Симпатии:
    1
    1. У мяне все работает.
    2. Скачай другой паскаль с оф сайта
    3. Возможно ничего неработает потому что assign(f,'C:\file.xyi') это и это assign(f,'C:\file.dat') два разных файла.

    Добавлено: http://tp7.info/tp7.php
     
  13. Гость

    Репутация:
    0
    У меня free pascal 2.2.2 до этого все программы запускались=)

    Неа file.dat ЕСТЬ НА ДИСКЕ Ц, все с ним в порядке!
     
  14. Dock1100

    Dock1100 :-]

    Репутация:
    0
    Регистрация:
    9 ноя 2009
    Сообщения:
    665
    Симпатии:
    1
    Я пользуюсь Turbo Pascal 7.1,
    попробуй файл сохранять не assign(f,'C:\file.dat') а assign(f,'file.dat')
     
  15. Гость

    Репутация:
    0
    Пробовал, не помогло...
    У подруги трх 7,1 тоже не работает!
     
  16. Dock1100

    Dock1100 :-]

    Репутация:
    0
    Регистрация:
    9 ноя 2009
    Сообщения:
    665
    Симпатии:
    1
    Странно, у меня всё спокойно компилится и работает нормально.
     
  17. Гость

    Репутация:
    0
    Прога, где файл создается программой, а потом читается и выводит на екран- работает без проблем.
    Но если вырезать кусок создания и записи в файл, то программа читает из файла другие числа!!!
    Может проблема в кодировке?


    Короче хз. Всем написавшим в этом топике- спасибо! И как говорит малахов+: "Доброго Вам здоровьеца!!! " :)
     
  18. isqoff

    isqoff Гость

    Репутация:
    0
    Женя,Лучше всего такие вещи делать с текстовыми файлами (возможностей больше и гемора меньше):)
     
  19. Гость

    Репутация:
    0
    По мне: лучше вообще такие вещи не делать ;) , но препод сказал что файл должен быть типизированным.
     
  20. Dock1100

    Dock1100 :-]

    Репутация:
    0
    Регистрация:
    9 ноя 2009
    Сообщения:
    665
    Симпатии:
    1
    А препод сказал на какой именно фигне делать или обязательно Free Pascal.
     
Загрузка...

Поделиться этой страницей