1 Востаннє редагувалося Nick9956 (20.11.2015 19:38:19)

Тема: І знову задачка, цього разу я майже зробив

Коли запускаю пише помилка
Ось мій код

program ss;
var y,x:text;
i,n,b,m,c,s,stroka:integer;
str , t1: string;
  begin
  n:=1;
assign(x,'d:\prog.pas');
assign(y,'d:\prog2.pas');
reset(x);
readln(x,i);      // // зчитує кількість тестів
 while 
 n<i             
 do
 begin
 readln(x,b);     // зчитує розмір квадрату//
 stroka:=b*2-1;
 while m<=b do
 
   begin
   
           
           while stroka >= 1 do 
           begin
           
           readln(x,str);   // зчитує перший рядок першого квадрату 
           t1:= copy(str,stroka,1);  //  копіює число в позиції 5 (stroka = 5)
           c:=StrToInt64(t1);
           s:=s+c;
           stroka:=stroka-2;
           
            end;
    m:=m+1;
    
   end;
   
 n:=n+1;
 end;
write(s);
close(x);

  end.

Ось файл, з якого зчитуються змінні

2
3
4 5 6
3 2 1
4 4 5
3
5 3 3
1 2 1
4 5 1

Задачка у файлі (якщо кого цікавить) номер 2

Post's attachments

IMG_20151120_0001.pdf 585.76 kb, 344 downloads since 2015-11-20 

2

Re: І знову задачка, цього разу я майже зробив

Це Паскаль чи Делфі?
І як текст помилки виглядає?

Подякували: koala1

3

Re: І знову задачка, цього разу я майже зробив

Для того, щоб дати адекватну відповідь на питання по коду, необхідно знати:

  • завдання (є, тут все чудово)

  • код (бажано все ж з нормальними відступами і людськими назвами змінних)

  • опис проблеми, причому конкретний. "Пише помилка" - цього недостатньо; наприклад, можлива помилка "немає місця на диску" чи "неможливо відкрити файл", але ми її не відгадаємо?


З того, що бачу - у вас якийсь дивний спосіб читання файла. Процедура read читає рівно стільки символів, скільки треба, щоб отримати те, що вам треба (наприклад, число); readln же читає до кінця рядка, а потім відкидає зайве. Ви ж читаєте рядок, а потім намагаєтеся його розбирати по символу; вам не треба цього робити - просто читайте через read. Можна, дійсно, не дочитувати до кінця рядка, коли прочитаний потрібний елемент, але до нього - ви не знаєте довжину чисел, тому читайте через read.
І так, StrToInt64 перетворює рядок на Int64, а не на Integer.