• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о проекте и правила – там коротко описано, как задать вопрос так, чтобы быстро получить ответ. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по старой ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

Задача о численности населения городов

  • Автор темы Автор темы gazon
  • Дата начала Дата начала

gazon

Новые
Регистрация
21 Ноя 2011
Сообщения
56
Реакции
0
Баллы
0
Задача о численности населения городов

В типизированном файле записаны название городов и их численность. Увеличить численность каждого города на 5%. (Количество жителей – всегда целое число).
 
gazon
Может быть, вы имели в виду увеличение на 5% численности населения каждого города?
А в чем проблема возникла при решении этого типа задачи? Работа с типизированными файлами расписана от и до на нашем форуме, напомню основные моменты:
F:Text; {в разделе var определяем файловую переменную для работы с текстовыми файлами}
assign(F,patch); {связываем файловую переменную с конкретным названием файла, прописывая полный путь к нему}
reset(F); {открываем файл по чтению}
rewrite(F); {открываем файл по перезаписи}
append(F); {открываем файл по дозаписи}
read(F,s,n); {считать из файла F значения и присвоить их переменным s и n}
write(F,s,n); {записать в файл F значения переменных s и n}
Основные операторы работы с файлами описаны, обдумать, как их применить на практике - ваша главная задача. Листинг с решением потом выложите сюда, мы поможем возможные ошибки исправить.
 
спасибо большое
 
Program srs1307;
type city=record
name:string;
chis:real;
end;
fl=file of city;
var f,f2:fl;
i,k:integer;
s:string;
n:real;
Begin
assign(f,'d:\lab\4\file.txt');
reset(f);
while not eof(f) do
begin
read(s,n);
end;
assign(f2,'d:\lab\4\file2.txt');
rewrite(f2);
write(f2,s,n);
close(f);
close(f2);
End.
Я в PascalABC пишу что то не получается
 
Хех, судя по вашему листингу, вы записываете в файл 2 введенные с клавиатуры значения переменных s и n, причем совсем без изменения числовых данных :))
Навскидку, ряд грубейших ошибок:
Вы не определили массив, в который будете считывать данные из файла, хотя тип для него прописали.
пишется в разделе переменных, а не до него
type city=record
name:string;
chis:real;
end;
Вы пишете, что численность населения всегда целое число, а определяете переменную для нее вещественной, хотя на рассчеты это не повлияет, скорее уж на форму вывода числа.
Совершенно непонятно, чем вы руководствовались, определяя эти переменные для хранения считанных из файла данных, вы же уже определили свой тип, так создайте массив вашего типа и считывайте данные непосредственно в него.
reset(f);
while not eof(f) do
begin
read(s,n);
end;
Исходя из вышесказанного, использование переменных s и n бессмысленно, тем более так, как вы прописали, то есть в данном цикле вы просто запрашиваете ввод с клавиатуры, так как в команде read(s,n) вы не ссылаетесь на файловую переменную как на источник, следовательно, программа будет считывать данные из стандартного потока ввода, то есть с клавиатуры. Правильнее будет так read(f,s,n), хотя лучше все же использовать массив типа city.
assign(f2,'d:\lab\4\file2.txt');
rewrite(f2);
write(f2,s,n);
Это явно нужно поместить в другое место, а то вы открываете результирующий файл по перезаписи и вносите в него последние значения переменных s и n, даже не увеличивая числовое значение.
Предлагаю строки
assign(f2,'d:\lab\4\file2.txt');
rewrite(f2);
поместить до цикла, а
в цикл, чтобы данные сразу после чтения передавались во второй файл. Естественно, опять повторюсь, что считывать данные из файла лучше в массив, причем наилучшим вариантом будет динамический массив, то есть с изменяемой размерностью.
 
что то не получается
Оно и понятно. Ошибок - просто море.
Итак.
1. На кой пёс Вы вводите запись? Всё равно в программе она не используется, и даже переменных это типа Вы не объявляете, только тип файла, но об этом - дальше.
2. С файлами и их типами. Тут возможны два варианта - либо, как советует AlexZir, объявить файлы текстовыми, либо объявить их файлами записей. Но если Вы работаете с файлами записей, то заранее подготовить файл с перечнем городов и населением в текстовом редакторе невозможно, и придется заполнять его программно.
3. Строки нужно считывать как с экрана, так и из файла, оператором readln, а не read. Очень желательно и числа тоже.
Ниже я приведу два варианта программы - один с текстовыми файлами и простыми переменными, другой - с записями и файлами записей. В последнем случае предусмотрен вывод на экран результатов "увеличения" численности населения, потому что если Вы откроете файл записей текстовым редактором, то ничего, кроме крякозябров, там не увидите. Имена и пути файлов, разумеется, можете поменять. В обеих программах предусмотрен консольный ввод исходных данных. И еще, как всегда - я пользуюсь нормальным Турбо-Паскалем и за глюки этого идиотизма (АВС) не отвечаю.
Код:
Const
 Nt=3;
Var
 f1,f2:Text;
 S:String;
 n:Real;
 i:Integer;
Begin
 Assign(f1,'D:\lab1.txt');
 Rewrite(f1);
 For i:=1 to Nt do
  begin
   Writeln('Name of the town:');
   Readln(S);
   Writeln(f1,S);
   Write('Population: ');
   Readln(n);
   Writeln(f1,n:0:0);
  end;
 Close(f1);
 Reset(f1);
 Assign(f2,'D:\lab2.txt');
 Rewrite(f2);
 For i:=1 to Nt do
  begin
   Readln(f1,S);
   Writeln(f2,S);
   Readln(f1,n);
   Writeln(f2,n*1.05:0:0);
  end;
 Close(f1);
 Close(f2);
End.
Код:
Const
 Nt=3;
Type
 city=record
       name:string;
       chis:real;
      end;

Var
 f1,f2:file of city;
 A:city;
 i:Integer;
Begin
 Assign(f1,'D:\lab1');
 Rewrite(f1);
 For i:=1 to Nt do
  begin
   Writeln('Name of the town:');
   Readln(A.name);
   Write('Population: ');
   Readln(A.chis);
   Write(f1,A);
  end;
 Close(f1);
 Reset(f1);
 Assign(f2,'D:\lab2');
 Rewrite(f2);
 For i:=1 to Nt do
  begin
   Read(f1,A);
   A.chis:=A.chis*1.05;
   Write(f2,A);
  end;
 Close(f1);
 Close(f2);
 Reset(f2);
 For i:=1 to Nt do
  begin
   Read(f2,A);
   Writeln(A.name);
   Writeln(A.chis:0:0);
  end;
 Readln
End.
 
Назад
Сверху