ПрофильПрофиль
ПользователиПользователи
ГруппыГруппы
ПоискПоиск
 
ВходВход
 
Учебный форум для написания тестовых писем (песочница)

Форумы на FizMat >> IT-клуб >>
 
Практика (реш.задач)
Предыдущая тема :: Следующая тема Страница 1 из 2
На страницу 1, 2  След.
Гость
На начало сообщения Практика (реш.задач)
Вт 14 Июн 2005 12:52
Anna
 
Привет всем и модератору в том числе! Прошу помочь c листингом программы.
Условие таково: Написать программу посещения студентами дисплейного класса. Учесть приход и уход студентов в течение занятий. Данные представить в виде линейного списка. (Моя тема-Динамические переменные.)
Спасибочки заранее. Rolling Eyes

Ответить с цитатой    
Dobrinya Ivashenko
На начало сообщения Ответик по "практике"
Вт 14 Июн 2005 12:58
dobrinya
 
Салютик, Анютка.
Wink Ты у нас первая по практике, так сказать. Лови решение. Только, знаешь, листинг листингом, а вот самой решить и разобраться - совсем другое дело. Короче, больше не размещаею решение задач в программном коде. Не обижайся. Будем расматривать только локальные проблемы и трудности.

TYPE
Link=^data; {указатель на тип данных }
data=record {описание самого типа данных }
FIO:string[50]; {ФИО }
timeStart,timeEnd:string[5]; {время нчала и конца (15:03) }
next:Link; {указатель на следующую запись}
end;

VAR
P,First:Link; {указатели на запись: текущую, первую}
m:byte; {для меню }

{добавление новой записи в список}
PROCEDURE addFirst(a:Link);
BEGIN
a^.next:=First;
First:=a;
END;

{ввод данных в текущую запись}
PROCEDURE InputData;
BEGIN
P:=new(Link);
write('Введите ФИО: ');
readln(P^.FIO);
write('Введите время начала: ');
readln(P^.timeStart);
write('Введите время окончания: ');
readln(P^.timeEnd);
addFirst(P);
END;

{вывод на экран}
PROCEDURE Print;
var
curr:Link; {указатель на очередную запись }
count:integer; {счетчик }
BEGIN
count:=0;
curr:=First; {установить указатель на первую запись}
while curr<>nil do
begin
inc(count);
writeln(count,') ',curr^.FIO:55,curr^.timeStart:10,curr^.timeEnd);
curr:=curr^.next; {перейти к очередной записи }
end;
readln;
END;
{===== основная программа =====}
BEGIN
new(P); {создать новую динамическую переменную и установить на нее указатель}

{цикл меню}
repeat
InputData; {ввод данных }

writeln;
writeln('1 - добавить в список');
writeln('2 - распечатать весь список и выйти');
write('=>');
readln(m);
until m=2;

Print; {вывод на экран}
END.

Ответить с цитатой     Посмотреть профиль Отправить личное сообщение Отправить e-mail
Dobrinya Ivashenko
На начало сообщения Всё те же "Динамические структуры данных."
Ср 15 Июн 2005 08:30
dobrinya
 
Друзья, вышеуказанная тема очень актуальна и пригодится при изучении объектно-ориентированного программирования.
Попалась очень интересная, на мой взгляд задачка, от преподавателя ведущего практику, Н.А.Астаховой. Условие таково:

Написать процедуру сортировки линейного списка по возрастанию. Элементами списка являются целые числа.

Прошу поделиться мнениями о пути написания кода. Принимаю замечания.
Программный код (решение проблемы):

uses crt;
TYPE
Link=^data; {указатель на тип данных }
data=record {описание самого типа данных }
FIO:string[50]; {ФИО }
N:integer; {номер }
next:Link; {указатель (адрес) на следующую запись}
end;

VAR
P,First:Link; {указатели на запись: текущую, первую }
m:byte; {для меню }

{процедура - добавление новой записи в список}
PROCEDURE AddData;
BEGIN
P:=new(Link); { выделить память и адрес записать в P}
P^.next:=First; { адрес на следующую запись }
First:=P; { сохраняем адрес первой записи }
{здесь заполняйте запись данными в соответствии с вашим типом }
write('Введите ФИО: ');
readln(P^.FIO);
write('Введите номер: ');
readln(P^.N);
END;

{вывод на экран}
PROCEDURE Print;
var
count:integer; {счетчик для нумерации }
BEGIN
count:=0;
P:=First; {начать с первой записи }
while P<>nil do
begin
inc(count); {увеличить счетчик }
writeln(count,') ',P^.FIO,' ',P^.N);
P:=P^.next; {перейти к очередной записи }
end;
readln;
END;

{процедура - удаление всего списка, освобождение динамической памяти}
PROCEDURE DelData;
BEGIN
P:=First;
while P<>nil do
begin
First:=P^.next; {сохранить адрес указывающий на следующую запись}
dispose(P); {освободить память по текущему адресу }
P:=First; {сохраненный адрес записать в P }
end;
END;

{процедура - сортировки списка по возрастанию}
PROCEDURE Sort;
var
P1,P2,TMP:Link; {P1,P2 - адрес записи для циклов, TMP - временно}
BEGIN
new(TMP); {выделим память для TMP }
P1:=First; {начать цикл 1 с первой записи }
while P1<>nil do {выполняем пока не дошли до конца цикла 1}
begin
P2:=First; {начать цикл 2 с первой записи }
while P2<>nil do {выполняем пока не дошли до конца цикла 2}
begin
if P1^.N<P2^.N then
begin
{сохраняем данные в временную переменную}
{адрес на следующую запись не изменяем! }
TMP^.FIO:=P1^.FIO;
TMP^.N:=P1^.N;
{делаем обмен данными по адресу P1 }
P1^.FIO:=P2^.FIO;
P1^.N:=P2^.N;
{делаем обмен данными по адресу P2 }
P2^.FIO:=TMP^.FIO;
P2^.N:=TMP^.N;
end;
P2:=P2^.next; {переходим к следующей записи цикла 2}
end;
P1:=P1^.next; {переходим к следующей записи цикла 1}
end;
dispose(TMP); {освобождаем память, занимаемую TMP }
END;


{==== основная программа ====}
BEGIN
clrscr
First:=nil; {нет записей в списке, адрес пустой }
repeat { меню }
AddData;
writeln('1 - добавить новую запись');
writeln('2 - выйти и далее...');
write('=>');
readln(m);
until m=2; {end меню}

writeln('== До сортировки ==');
Print;

Sort;
writeln('== После сортировки ==');
Print;

DelData;
readkey;
END.
{Примечание: First - первая запись с конца!}

Данный пример показывает: как вводить данные в список с помощью меню, как вывести список на экран, как отсортировать список, как освободить пямять занимаемую списком.

Ответить с цитатой     Посмотреть профиль Отправить личное сообщение Отправить e-mail
freeman
На начало сообщения
Ср 02 Ноя 2005 10:28
freeman
 
А вот такая задачка: написать программу выводящюю саму себя на экран(файлами пользоваться запрещаеться!)

Ответить с цитатой     Посмотреть профиль Отправить личное сообщение
Alexey N. Sergeev
На начало сообщения
Чт 03 Ноя 2005 13:52
alexey
 
freeman писал(а):
А вот такая задачка: написать программу выводящюю саму себя на экран(файлами пользоваться запрещаеться!)


Если файлами не пользоваться, то возможно ли это?

Ответить с цитатой     Посмотреть профиль Отправить личное сообщение
Dobrinya Ivashenko
На начало сообщения OTVET
Пн 07 Ноя 2005 09:48
dobrinya
 
Sorry, сколько у меня на это есть времени?
Уже начинаю.
В скором времени ждите листинга, слава Богу, а то уж совсем скучно стало... Very Happy

Ответить с цитатой     Посмотреть профиль Отправить личное сообщение Отправить e-mail
Dobrinya Ivashenko
На начало сообщения
Пн 07 Ноя 2005 09:55
dobrinya
 
alexey писал(а):
freeman писал(а):
А вот такая задачка: написать программу выводящюю саму себя на экран(файлами пользоваться запрещаеться!)


Если файлами не пользоваться, то возможно ли это?

Дайте возможность кое-что "поднять". В наиближайшее время надеюсь найти метод решения. Наверное возможно. Если условие гласит об этом? Стоит подумать Shocked Question

Ответить с цитатой     Посмотреть профиль Отправить личное сообщение Отправить e-mail
freeman
На начало сообщения
Вт 08 Ноя 2005 12:20
freeman
 
alexey писал(а):

Если файлами не пользоваться, то возможно ли это?

Да, вполне реально! (Листинг занимает всего 3 строчки)

Ответить с цитатой     Посмотреть профиль Отправить личное сообщение
Alexander Shagin
На начало сообщения
Чт 10 Ноя 2005 18:37
shagin
 
freeman писал(а):
alexey писал(а):

Если файлами не пользоваться, то возможно ли это?

Да, вполне реально! (Листинг занимает всего 3 строчки)


А что имеется ввиду под термином "сама себя"?

Ответить с цитатой     Посмотреть профиль Отправить личное сообщение Отправить e-mail
Alexey N. Sergeev
На начало сообщения
Пт 11 Ноя 2005 15:22
alexey
 
freeman писал(а):
alexey писал(а):

Если файлами не пользоваться, то возможно ли это?

Да, вполне реально! (Листинг занимает всего 3 строчки)


Заитриговали Smile

Ответить с цитатой     Посмотреть профиль Отправить личное сообщение
Alexander Shagin
На начало сообщения
Пт 11 Ноя 2005 15:44
shagin
 
freeman писал(а):
А вот такая задачка: написать программу выводящюю саму себя на экран(файлами пользоваться запрещаеться!)


А я правильно понимаю постановку задачи?

Написать программу, которая выводит на экран свой исходный код (содержимое основного *.pas или *.dpr файла) не используя обращение к диску?

Ответить с цитатой     Посмотреть профиль Отправить личное сообщение Отправить e-mail
freeman
На начало сообщения
Пн 14 Ноя 2005 12:03
freeman
 
shagin писал(а):

А я правильно понимаю постановку задачи?
Написать программу, которая выводит на экран свой исходный код

Да! Только файла с главной программой.

_________________
0x2B | ~0x2B = 0xFF

Ответить с цитатой     Посмотреть профиль Отправить личное сообщение
Alexander Shagin
На начало сообщения
Ср 16 Ноя 2005 13:15
shagin
 
На ум приходит только команда LIST из языка BASIC Smile
(правда и файлов у нас вообще нетSmile

10 LIST

Ответить с цитатой     Посмотреть профиль Отправить личное сообщение Отправить e-mail
freeman
На начало сообщения
Ср 16 Ноя 2005 14:09
freeman
 
shagin писал(а):
На ум приходит только команда LIST из языка BASIC Smile
(правда и файлов у нас вообще нетSmile
10 LIST

Ладно хватит глумиться, задача была конечно шуторчная Very Happy , я ее нашел на одном из форумов по программированию. Листинг был на C++

Код:

#include <iostream>
int main() {
std::cout<<"#include <iostream> \n \
                    int main(){ \n \
                    std::cout<<\"...\"; \n \
                    return 1; \n \
                     } \n";
return 1;
}

На паскале это выглядит примерно так

Код:
uses crt
begin
WriteLn('uses crt begin и т.д')
end.

Надеюсь юмор понятен Smile .

_________________
0x2B | ~0x2B = 0xFF

Ответить с цитатой     Посмотреть профиль Отправить личное сообщение
Alexey N. Sergeev
На начало сообщения
Ср 16 Ноя 2005 14:24
alexey
 
freeman писал(а):

На паскале это выглядит примерно так

Код:
uses crt
begin
WriteLn('uses crt begin и т.д')
end.

Надеюсь юмор понятен Smile .


Юмор понятен, но эта программа не выводит сама себя. Например, посчитай, сколько раз в программе встретится сочетание 'uses crt' и сколько раз оно встретится в распечатке Smile

Ответить с цитатой     Посмотреть профиль Отправить личное сообщение
Показать сообщения:    
Начать новую тему   Ответить на тему На страницу 1, 2  След.

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Математический факультет Волгоградского государственного педагогического университета
Учебный компьютерный центр ВГПУ, 2005-2007
Powered by phpBB © phpBB Group