Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.06.2014, 01:46   #1
mishammm
Форумчанин
 
Регистрация: 21.09.2013
Сообщений: 232
По умолчанию чтения с текстового файла(не работает)

когда пытаюсь подключить внешний текстовы файл выдает вместо табличных данных то что в файле, все 0. прошу помогите исправить плиз . нужно было считать с текстового файла информацию (файл прикрепил) и отсортировать ее по сумме балов. вот программа: я вас умоляю помогите исправить вместо данных одни 0, что то не то записалось. вот код
Код:
const
  n = 4;
type
  student = record
    N: byte;
    prizv: string;

    alg: real;
    bal: 6..15;
    matan,prog,os:2..5
  end;
  var
  f:text;
  i,j: integer;
  code:integer;
  tabl: array[1..n] of student;
  v:student;

  s:string;
  {$R-}
  begin
  Assign(f,'d:\abitura.txt');
  reset(f);

   writeln('VVedi dani stydentiv');
    for i := 1 to n do
    with tabl[i] do
    begin
    writeln('vvedi prizv');
    readln(f,prizv);
    writeln('vvedi predmet1');
    readln(f,s);
    val(s,matan,code);
    writeln('vvedi predmet2');
    readln(f,s);
     val(s,prog,code);
    writeln('vvedi predmet 3');
    readln(f,s);
     val(s,os,code);


    end;

   for i:=1 to n do with tabl[ i ] do
begin
bal:=matan+prog+os;
end;

    writeln('------------------------------------------------------');
    writeln('| Surname| Matematuchnuy | Programyvannya | OS |   summa  ');
  writeln('|          |    analis     |                |    |      ');
  writeln('--------------------------------------------------------');
for i:=1 to n do
    with tabl[i] do
begin

writeln('|',prizv:10,'|',matan:15,'|',prog:16,'|',os:4,'|' , bal:5, '|');
writeln('-----------------------------------------------------------------');
end;


writeln('vidcortovano');
j:=0;
while j<=n do
      begin
      for i:=1 to n-1 do
          if tabl[i].bal<tabl[i+1].bal then
             begin
             v:=tabl[i];
             tabl[i]:=tabl[i+1];
             tabl[i+1]:=v;
             end;
      inc(j);
      end;


 writeln('------------------------------------------------------');
    writeln('| Surname| Matematuchnuy | Programyvannya | OS |   summa  ');
  writeln('|          |    analis     |                |    |      ');
  writeln('--------------------------------------------------------');
for i:=1 to n do
    with tabl[i] do
begin

writeln('|',prizv:10,'|',matan:15,'|',prog:16,'|',os:4,'|' , bal:5, '|');
writeln('-----------------------------------------------------------------');
end;

Close(f);
readln;
end.
Вложения
Тип файла: txt abitura.txt (182 байт, 135 просмотров)
mishammm вне форума Ответить с цитированием
Старый 12.06.2014, 02:07   #2
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Весь код не смотрел.
1) В файле есть шапка, которая не пропускается при считывании.
2) readln(f,prizv), насколько понимаю, считает всю строку, а не только имя, и все дальнейшие считывания оценок будут уже неправильными (будут считываться следующие строки).
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 12.06.2014, 02:17   #3
mishammm
Форумчанин
 
Регистрация: 21.09.2013
Сообщений: 232
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
Весь код не смотрел.
1) В файле есть шапка, которая не пропускается при считывании.
2) readln(f,prizv), насколько понимаю, считает всю строку, а не только имя, и все дальнейшие считывания оценок будут уже неправильными (будут считываться следующие строки).
можете помочь исправить плиз, что мне надо сделать?? и что значит В файле есть шапка, которая не пропускается при считывании ? а какая она должна быть ?? спасибо
mishammm вне форума Ответить с цитированием
Старый 12.06.2014, 02:49   #4
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Вот пример считывания 1 строки и заполнения данных об 1 студенте:
Код:
type
  student = record
    prizv: string;
    bal: 6 .. 15;
    matan, prog, os: 2 .. 5;
  end;

var
  t: text;
  s: string;
  k: integer;
  p: student;

const
  zero = ord('0');

begin
  assign(t, 'input.txt');
  reset(t);
  readln(t, s);
  k := length(s);
  with p do
  begin
    prizv := copy(s, 1, pos(' ', s) - 1);
    matan := ord(s[k - 4]) - zero;
    prog := ord(s[k - 2]) - zero;
    os := ord(s[k]) - zero;
    bal := matan + prog + os;
    writeln(prizv, ' ', matan, ' ', prog, ' ', os);
  end;
  close(t);
  readln;
end.
Пример файла:
Цитата:
ivanov 2 3 5
То есть каждая строка в файле должна содержать фамилию и три оценки, разделенные одинарными пробелами. Если шапка не нужна, то самое простое, это просто удалить её из входного файла.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 12.06.2014, 08:20   #5
mishammm
Форумчанин
 
Регистрация: 21.09.2013
Сообщений: 232
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
Вот пример считывания 1 строки и заполнения данных об 1 студенте:


Пример файла:

То есть каждая строка в файле должна содержать фамилию и три оценки, разделенные одинарными пробелами. Если шапка не нужна, то самое простое, это просто удалить её из входного файла.
спасибо а это только для одной строки? а как быть с остальными студентами? и как быть с сортированием

Последний раз редактировалось mishammm; 12.06.2014 в 08:24.
mishammm вне форума Ответить с цитированием
Старый 12.06.2014, 12:52   #6
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Код:
const
  zero = ord('0');
  n = 10;

type
  student = record
    prizv: string;
    bal: 6 .. 15;
    matan, prog, os: 2 .. 5;
  end;

var
  t: text;
  s: string;
  k, i, j, count: integer;
  p: array [1 .. n] of student;
  b: student;

begin
  assign(t, 'input.txt');
  reset(t);
  count := 0;
  while (not eof(t)) and (count < n) do
  begin
    inc(count);
    with p[count] do
    begin
      readln(t, s);
      k := length(s);
      prizv := copy(s, 1, pos(' ', s) - 1);
      matan := ord(s[k - 4]) - zero;
      prog := ord(s[k - 2]) - zero;
      os := ord(s[k]) - zero;
      bal := matan + prog + os;
    end;
  end;
  close(t);
  for i := 1 to count - 1 do
    for j := i + 1 to count do
      if p[i].bal < p[j].bal then
      begin
        b := p[i];
        p[i] := p[j];
        p[j] := b;
      end;
  for i := 1 to count do
    with p[i] do
      writeln(prizv, ' ', matan, ' ', prog, ' ', os);
  readln;
end.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Права чтения файла a.n.o.n.i.m C# (си шарп) 0 25.03.2014 10:24
Чтения с файла и пошук Souljaboy Помощь студентам 1 30.09.2013 22:04
ошибка чтения файла Umnik1 Общие вопросы Delphi 12 25.06.2013 22:57
функция чтения из файла с++ Dolilla Помощь студентам 2 26.12.2011 18:54
Чтения всего текстового файла sergeiqwe PHP 4 04.05.2010 16:15