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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 01.12.2007, 19:52   #1
NeAlSe
Пользователь
 
Регистрация: 01.12.2007
Сообщений: 17
Стрелка Работа с файлами в Delphi 7

Заполнить файл f натуральными числами полученными с помощью генератора случайных чисел. Найти количество квадратов нечетных чисел среди компонентов.

Вот что я налепил, поможете дальше?
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    Button2: TButton;
    Edit2: TEdit;
    Panel1: TPanel;
    Label2: TLabel;
    Label1: TLabel;
    Label3: TLabel;
    Edit3: TEdit;
    Button3: TButton;
   
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);

  private
    { Private declarations }
  public
    { Public declarations }
  end;

VAR

  Form1: TForm1;
  f: textfile;

implementation

{$R *.dfm}

PROCEDURE TForm1.Button1Click(Sender: TObject); //Создание и заполнение файла
var
fName: String [80];
i,n: integer;

begin
n:= strtoint (Edit2.Text);
fName:= Edit3.Text + Edit1.Text + '.txt';
AssignFile(f, fName);
Rewrite(f);

for i:=1 to n do
begin
writeln (f, Random(999));
end;

CloseFile(f);

end;

PROCEDURE TForm1.Button3Click(Sender: TObject); //нахождение количества квадратов нечетных чисел среди компонентов (как??)
var
begin 

Reset(f);

for a=1 to b do
readln(f, b);

CloseFile(f);
end;

PROCEDURE TForm1.Button2Click(Sender: TObject); //выход из программы и удаление созданного файла
begin
DeleteFile (Edit3.Text + Edit1.Text + '.txt');
Close;
end;

end.
Цитата:
Код вставляем в тег [CОDE][/СОDЕ] или пользуемся кнопкой # (расширенный режим). Модератор.

Последний раз редактировалось AlDelta; 02.12.2007 в 22:00. Причина: Тег [CОDE]
NeAlSe вне форума Ответить с цитированием
Старый 01.12.2007, 20:00   #2
Tayfun
Форумчанин
 
Аватар для Tayfun
 
Регистрация: 24.06.2007
Сообщений: 351
По умолчанию

Первое что бросилось в глаза
Код:
PROCEDURE TForm1.Button3Click(Sender: TObject); //нахождение количества квадратов нечетных чисел среди компонентов (как??)
var
begin 

Reset(f);

for a=1 to b do
readln(f, b);

CloseFile(f);
end;
Надо исправить...
Код:
PROCEDURE TForm1.Button3Click(Sender: TObject); //нахождение количества квадратов нечетных чисел среди компонентов (как??)
var
t,b:integer;
fName: String [80];
begin 
t:=0;
fName:= Edit3.Text + Edit1.Text + '.txt';
AssignFile(f, fName);// Желательно тоже писать
Reset(f);
while not eof(f) do begin
readln(f, b);
for i:=1 to b do
if (sqr(i)=b) and (i mod 2<>0) then t:=t+1;
end;
CloseFile(f);
//t-количество квадратов нечетных чисел среди компонентов
end;
Пишу on-line не проверяя...
Я не маюсь бездельем, я от него тащусь!

Последний раз редактировалось Tayfun; 01.12.2007 в 20:07. Причина: Допустил ошибку
Tayfun вне форума Ответить с цитированием
Старый 01.12.2007, 20:53   #3
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Цитата:
for i:=1 to b do
if (sqr(i)=b) and (i mod 2<>0) then t:=t+1;
Я это тоже не проверял, но это как-то не связано с массивом.
Вот это я проверял, раборает
Цитата:
for i:=1 to n do
if (sqr(int(sqrt(a[i])))=a[i]) and (round(sqrt(a[i]))mod 2=1) then t:=t+1;
В этом случае массив объявить типа of comp; (вещественные числа без дробной части).

Последний раз редактировалось puporev; 01.12.2007 в 21:40.
puporev вне форума Ответить с цитированием
Старый 01.12.2007, 22:07   #4
NeAlSe
Пользователь
 
Регистрация: 01.12.2007
Сообщений: 17
По умолчанию

Спасибоооо! ! ! все ok!
NeAlSe вне форума Ответить с цитированием
Старый 01.12.2007, 22:14   #5
execom
Редкий тунеядец
Форумчанин
 
Аватар для execom
 
Регистрация: 29.10.2006
Сообщений: 595
По умолчанию

Господа, не советую использовать в делфи паскальный ф-ии для работы с файлами...
execom вне форума Ответить с цитированием
Старый 02.12.2007, 21:01   #6
Tayfun
Форумчанин
 
Аватар для Tayfun
 
Регистрация: 24.06.2007
Сообщений: 351
По умолчанию

Цитата:
Господа, не советую использовать в делфи паскальный ф-ии для работы с файлами...
Интересно... А можно узать почему-?
Я не маюсь бездельем, я от него тащусь!
Tayfun вне форума Ответить с цитированием
Старый 02.12.2007, 21:40   #7
rpy3uH
добрый няша
Старожил
 
Аватар для rpy3uH
 
Регистрация: 29.10.2006
Сообщений: 4,804
По умолчанию

Цитата:
Сообщение от Tayfun Посмотреть сообщение
Интересно... А можно узать почему-?
лично я не знаю почему. к слову: я сам стандартные паскалевские функции просто не выношу!!!
зачем пользоваться старыми функциями, если можно пользоваться нормальными API функциями, либо оболочками вокруг них.
API функции
CreateFile (универсальна: создание и открытие)
ReadFile
WriteFIle
CloseHandle
родные чисто-дельфийские аналоги API функций (вызывают соответствующие API)
FileOpen (всего 2 параметра, не надо париться с аргументами, для создания FileCreate)
FileRead (нет 5 параметра)
FileWrite (нет 5 параметра)
FileClose
для работы с текстовыми файлами лучше использовать TStringList, и вообще дельфисты рекомендуют использовать для работы с файлами класс TFileStream
rpy3uH вне форума Ответить с цитированием
Старый 02.12.2007, 21:50   #8
zetrix
Delphi/C++/C#
Участник клуба
 
Аватар для zetrix
 
Регистрация: 29.10.2006
Сообщений: 1,972
По умолчанию

У меня уже было пару раз, когда Blockread, blockWrite не пашут, а ReadFile, WriteFIle работают. Хотя по сути разницы нет.
zetrix вне форума Ответить с цитированием
Старый 05.12.2007, 14:37   #9
NeAlSe
Пользователь
 
Регистрация: 01.12.2007
Сообщений: 17
По умолчанию

Почему не выводит сообщение?

Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    Button2: TButton;
    Edit2: TEdit;
    Panel1: TPanel;
    Label2: TLabel;
    Label1: TLabel;
    Label3: TLabel;
    Edit3: TEdit;
    Button3: TButton;
    l4: TLabel;
    Bevel1: TBevel;
    Bevel2: TBevel;
   
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);

  private
    { Private declarations }
  public
    { Public declarations }
  end;

VAR

  Form1: TForm1;
  f: textfile;

implementation

{$R *.dfm}

PROCEDURE TForm1.Button1Click(Sender: TObject); ////Создание и заполнение файла
var
fName: String [80];
i,n: integer;

begin
n:= strtoint (Edit2.Text);
fName:= Edit3.Text + Edit1.Text + '.txt';
AssignFile(f, fName);
Rewrite(f);

for i:=1 to n do
begin
writeln (f, Random(100));
end;
CloseFile(f);
end;

PROCEDURE TForm1.Button3Click(Sender: TObject); //нахождение количества квадратов нечетных чисел среди компонентов  
var   
var   
t,b,i: integer;
fName: String [80];

begin
t:=0;
fName:= Edit3.Text + Edit1.Text + '.txt';
AssignFile(f, fName);
Reset(f);
while not eof(f) do begin
readln(f, b);

for i:=1 to b do
if (sqr(i)=b) and (i mod 2<>0) then t:=t+1;
end;
CloseFile(f);

begin
ShowMessage('Количество квадратов нечетных чисел среди компонентов : '+IntToStr(t));
end;
//t-количество квадратов нечетных чисел среди компонентов
end;

PROCEDURE TForm1.Button2Click(Sender: TObject); //выход из программы и удаление созданного файла

begin
DeleteFile (Edit3.Text + Edit1.Text + '.txt');
Close;
end;

end.
Вложения
Тип файла: rar ЛР5 Файлы.rar (204.4 Кб, 14 просмотров)
NeAlSe вне форума Ответить с цитированием
Старый 05.12.2007, 15:42   #10
Tayfun
Форумчанин
 
Аватар для Tayfun
 
Регистрация: 24.06.2007
Сообщений: 351
По умолчанию

Цитата:
Почему не выводит сообщение?
Странно... Но ваш код, у меня, прекрастно работает...
Возможно когда вы вводите имя файла вы там-же вводите расширение, я тоже сперва ввел расширение и результат не появился, потом ввел имя файла без расширения и программа сработала корректно.
Я не маюсь бездельем, я от него тащусь!
Tayfun вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с текстовыми файлами (Delphi) Omedus Помощь студентам 6 18.12.2012 00:31
Delphi-работа с файлами,каталогами POPOV Помощь студентам 6 30.11.2007 15:12
работа с excel файлами через Delphi Winss Помощь студентам 6 08.09.2007 17:54