Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Помощь студентам


Ответ
 
Опции темы Опции просмотра
Старый 22.11.2011, 19:13   #1 (permalink)
gazon
Member
 
Регистрация: 21.11.2011
Сообщений: 56
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию Задача о численности населения городов

В типизированном файле записаны название городов и их численность. Увеличить численность каждого города на 5%. (Количество жителей – всегда целое число).
gazon вне форума   Ответить с цитированием

Старый 22.11.2011, 19:13
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

Похожие темы на нашем форуме, почитайте

Перепись населения
Задача по С + +
Задача по С++
Задача в Pascal'е (ЕГЭ)

Старый 22.11.2011, 19:45   #2 (permalink)
AlexZir
support
 
Аватар для AlexZir
 
Регистрация: 19.08.2007
Адрес: Зея
Сообщений: 15,797
Записей в дневнике: 71
Сказал(а) спасибо: 166
Поблагодарили 203 раз(а) в 86 сообщениях
Репутация: 75760
По умолчанию

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}
Основные операторы работы с файлами описаны, обдумать, как их применить на практике - ваша главная задача. Листинг с решением потом выложите сюда, мы поможем возможные ошибки исправить.
AlexZir вне форума   Ответить с цитированием
Старый 23.11.2011, 18:59   #3 (permalink)
gazon
Member
 
Регистрация: 21.11.2011
Сообщений: 56
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

спасибо большое
gazon вне форума   Ответить с цитированием
Старый 23.11.2011, 19:32   #4 (permalink)
gazon
Member
 
Регистрация: 21.11.2011
Сообщений: 56
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

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 пишу что то не получается
gazon вне форума   Ответить с цитированием
Старый 23.11.2011, 20:23   #5 (permalink)
AlexZir
support
 
Аватар для AlexZir
 
Регистрация: 19.08.2007
Адрес: Зея
Сообщений: 15,797
Записей в дневнике: 71
Сказал(а) спасибо: 166
Поблагодарили 203 раз(а) в 86 сообщениях
Репутация: 75760
По умолчанию

Хех, судя по вашему листингу, вы записываете в файл 2 введенные с клавиатуры значения переменных s и n, причем совсем без изменения числовых данных
Навскидку, ряд грубейших ошибок:
Вы не определили массив, в который будете считывать данные из файла, хотя тип для него прописали.
Цитата:
Сообщение от gazon Посмотреть сообщение
fl=file of city;
пишется в разделе переменных, а не до него
Цитата:
Сообщение от gazon Посмотреть сообщение
type city=record
name:string;
chis:real;
end;
Вы пишете, что численность населения всегда целое число, а определяете переменную для нее вещественной, хотя на рассчеты это не повлияет, скорее уж на форму вывода числа.
Цитата:
Сообщение от gazon Посмотреть сообщение
s:string;
n:real;
Совершенно непонятно, чем вы руководствовались, определяя эти переменные для хранения считанных из файла данных, вы же уже определили свой тип, так создайте массив вашего типа и считывайте данные непосредственно в него.
Цитата:
Сообщение от gazon Посмотреть сообщение
reset(f);
while not eof(f) do
begin
read(s,n);
end;
Исходя из вышесказанного, использование переменных s и n бессмысленно, тем более так, как вы прописали, то есть в данном цикле вы просто запрашиваете ввод с клавиатуры, так как в команде read(s,n) вы не ссылаетесь на файловую переменную как на источник, следовательно, программа будет считывать данные из стандартного потока ввода, то есть с клавиатуры. Правильнее будет так read(f,s,n), хотя лучше все же использовать массив типа city.
Цитата:
Сообщение от gazon Посмотреть сообщение
assign(f2,'d:\lab\4\file2.txt');
rewrite(f2);
write(f2,s,n);
Это явно нужно поместить в другое место, а то вы открываете результирующий файл по перезаписи и вносите в него последние значения переменных s и n, даже не увеличивая числовое значение.
Предлагаю строки
Цитата:
Сообщение от gazon Посмотреть сообщение
assign(f2,'d:\lab\4\file2.txt');
rewrite(f2);
поместить до цикла, а
Цитата:
Сообщение от gazon Посмотреть сообщение
write(f2,s,n*1.05);
в цикл, чтобы данные сразу после чтения передавались во второй файл. Естественно, опять повторюсь, что считывать данные из файла лучше в массив, причем наилучшим вариантом будет динамический массив, то есть с изменяемой размерностью.
AlexZir вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Старый 23.11.2011, 20:53   #6 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от gazon Посмотреть сообщение
что то не получается
Оно и понятно. Ошибок - просто море.
Итак.
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.
Vladimir_S вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




Часовой пояс GMT +4, время: 14:34.

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.