Помощь - Поиск - Пользователи - Календарь
Полная версия: Несколько фрагментов программ
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Alla
Очень прошу о помощи:
Сразу хочу сказать, что нужны только фрагменты решения конкретной задачи, писать всю программу не надо.
Мне действительно очень неловко, но и выбора у меня нет завтра с утра уже надо все сдавать... Сразу хочу сказать, я пользовался и Поиском и FAQ, на часть вопросов мне удалось найти оттветы, но в некоторых моментах я не уверен...

1.
- дан одномерный массив, найти последний отрицательный элемент;
- дана матрица размерности N*N, найти сумму (произведение) положительных (отрицательных, четных) элементов матрицы;
- дана матрица размерности N*N, найти минимальный (максимальный) элемент, и заменить нулями элементы в строке и столбце, на пересечении которых расположен дан¬ный элемент.

2.
- дан текст. Найти множество, элементами которого являются встречающиеся в тексте цифры от ‘0’ до ‘9’ и знаки арифметических операций;
- вывести элементы множества, составленного из произвольных букв от A..Z, в алфавитном порядке;
- не используя дополнительные переменные, поменять местами значения переменных-множеств А и В.

3.
- компонентами файла G являются натуральные числа. Найти количество удвоенных нечетных среди компонент;
- дано имя файла и целые положительные числа N и K. Создать текстовый файл с указанным именем и записать в него N строк, каждая из которых состоит из K символов «*»;
- дана строка S и текстовый файл. Добавить строку S в начало файла;
- дано целое число К и текстовый файл; сформировать новый файл, удалив из исходного файла строку с номером К, если строки с таким номером нет, то переписать файл без изменений.
________________________________________________________________________________
________________

А вот несколько заданий которые мне в принципе не понятны:
1.
Имеется следующее описание переменных:
var x,y: ^integer;
Указать значение x^ и y^ после выполнения следующих операторов:
new(x);
x^:=17;
new(y);
y^:=-5;
x^:=x^+y^;
y^:=y^+12;
2.
Имеется следующее описание переменных:
var a,b: ^integer;
x: ^real;
p: pointer;
Возможны ли следующие присваивания:
 a:=b;
 p:=x;
 x:=a;
 b:=x;
 p:=b;
 p:=x; a:=p;
 x^:=sgr(x^)-a^*7;
 a^:=x;
 b^:=a^+b^;
 b^:=25*b;
 a^:=x^*3-b^;
 a:=a^*3-b^;
4
Пусть имеется следующее описание типов и переменных:
Type ptr1=^element1;
element1=record
info:char;
link:ptr1;
end;
Var nach,tek: ptr1;
i:integer;
Для данного описания в динамической памяти построен линейный связанный список (nach – указатель на начало списка; последний элемент списка в адресной части имеет значение nil):

nach
________ _________ ___________
] ] [ [ ] [ [ \ / ]
a ] ] ___> [ b [ ] ____> аналогично ____> аналогично ____>[ e [ / \ ]
_____]_ ] [ ______[_] для С для D [ ____[/___\ ]


Что будет выведено на экран в результате выполнения следующих действий:

 writeln(nach^.info);
 writeln(nach^.link^.info);
 writeln(nach^.link^.link^.info);
 writeln(nach^.link^.link^.link^.info);
 tek:=nach;
while tek^.link<>nil do tek:=tek^.link;
writeln(tek^.info);
 tek:=nach;
while tek^.link^.link<>nil do tek:=tek^.link;
writeln(tek^.info);
 tek:=nach;
for i:=1 to 3 do tek:=tek^.link;
writeln(tek^.info);
 tek:=nach;
while tek^.info<>'c' do tek:=tek^.link;
writeln(tek^.link^.info);

________________________________________________________________________________
________________
Я вас очень прошу помогите, от этого зависит мое будущее - будущее экономиста...
Я не прошу вас писать все ответы, дайте хотя бы конкретные ссылки где можно найти ответы, поиск выдает ОООЧЕНЬ много и найти что-то конкретное очень трудно, да и как мне стало понятно в интернете кроме вашего форума нет больше не одного нормального сайта по Паскалю. Помогите пожалуйста ...
Гость
Картинка не получилась sad.gif(((
arhimag
А что ты имеешь ввиду под фрагментами??
Pola
Цитата(Alla @ 20.01.2006 10:05) *

А вот несколько заданий которые мне в принципе не понятны:

1.
Имеется следующее описание переменных:
var x,y: ^integer;

Указать значение x^ и y^ после выполнения следующих операторов:

new(x);
x^:=17;
new(y);
y^:=-5;
x^:=x^+y^; 17 + -5 = 12
y^:=y^+12; -5 + 12 = 7


12 7

4
Пусть имеется следующее описание типов и переменных:
Type ptr1=^element1;
element1=record
info:char;
link:ptr1;
end;
Var nach,tek: ptr1;
i:integer;

Для данного описания в динамической памяти построен линейный связанный список (nach – указатель на начало списка; последний элемент списка в адресной части имеет значение nil):

nach
_______               _________                                                                   ___________ 
] ] [ [ ] [ [ \ / ]
a ] ] _____> [ b [ ] ________> аналогично для с _______>аналогично для d ______> [ e [ / \ ]
________]_ ] [ ________[_] [ ______[/___\ ]


Что будет выведено на экран в результате выполнения следующих действий:
? writeln(nach^.info);	  a
? writeln(nach^.link^.info); b
? writeln(nach^.link^.link^.info); c
? writeln(nach^.link^.link^.link^.info); d
? tek:=nach;
while tek^.link<>nil do tek:=tek^.link;
writeln(tek^.info); e
? tek:=nach;
while tek^.link^.link<>nil do tek:=tek^.link;
writeln(tek^.info); d
? tek:=nach;
for i:=1 to 3 do tek:=tek^.link;
writeln(tek^.info); d
? tek:=nach;
while tek^.info<>'c' do tek:=tek^.link;
writeln(tek^.link^.info); d
volvo
Alla, во-первых, ты ОН или ОНА? Имя женское, но
Цитата
я пользовался и Поиском и FAQ


Во-вторых, где ты раньше был? Что, эти задания тебе только с сегодняшнего дня на завтра дали? Или ты делал так, как поется в песне:
Цитата
"От сессии до сессии
Живут студенты весело"...
?

Повеселился? Веселись дальше...
Правила Форума читал? Пункт 3 к тебе не относится? Это вообще-то теоретические вопросы, здесь им не место...

[offtop]
Очень удобно устроились... Придут на форум, вывалят на него все, что не делали (и даже не пытались делать!!!), через пару часов зайдут, Copy + Paste, и можно веселиться еще полгода... До очередной сессии...
[/offtop]

Pola,
устроилась работать удаленным компилятором? А смысл? Если человек даже не соизволил установить себе Паскаль и проверять, что будет выведено в результате (если у него уж ТАК не хватает времени), и что будет выведено на экран в результате прогона программы...
Pola
Цитата(volvo @ 20.01.2006 11:28) *

Pola,
устроилась работать удаленным компилятором? А смысл? Если человек даже не соизволил установить себе Паскаль и проверять, что будет выведено в результате (если у него уж ТАК не хватает времени), и что будет выведено на экран в результате прогона программы...


ну, четвертую не прогонишь...
там список не создан, только рисунок

а вторую мне самой интересно
не помню я этот материал

Паскаль конечно строго типизированный...
и я никогда так над адресами не издевалась smile.gif
Хм.. попробовала.
Как и думала: строгое соответствие типов, pointer с любыми указателями, вешественной переменной можно присвоить целое.
Alla
Нет задания мне дали в среду, до этого дня пыталась сама разобраться, но потом поняла что уже не успеваю и решила обратиться за помощью. Начсет пользовался smile.gif извините опечаталась я...
Насчет указателей мне действительно непонятно, теперь начинаю понимать, что вопрос похоже был глупый...
Насчет первых трех заданий, под фрагментом программы подразумевается, только та часть текста которая нужна чтобы выполнить поставленную задачу... Очень прошу помогите разобраться хотя бы с тремя первыми заданиями...
Pola большое спасибо за помощь !
Pola
Этот "фрагмент" зависит от того, как ты константы, типы и переменные определишь...
volvo
Цитата
Имеется следующее описание переменных:
var a,b: ^integer;
x: ^real;
p: pointer;
Возможны ли следующие присваивания:
 a:=b;
 p:=x;
 x:=a;
 b:=x;
 p:=b;
 p:=x; a:=p;
 x^:=sgr(x^)-a^*7;
 a^:=x;
 b^:=a^+b^;
 b^:=25*b;
 a^:=x^*3-b^;
 a:=a^*3-b^;


Вот так:
a:=b; { да, это один и тот же тип }
p:=x; { да, в pointer можно записать указатель любого другого типа }
x:=a; { нет, указателю на real нельзя присваивать указатель на integer }
b:=x; { нет, указатели разнотипны }
p:=b; { да, в чистый pointer можно присвоить указатель на любой тип }
p:=x; a:=p; { да, это стандартная схема "обхода" совместимости по типу указателя }
x^:=sqr(x^)-a^*7; { да... В результате в real присваивается число. Все нормально }
a^:=x; { нет... В integer нельзя записать указатель, компилятор не должен пропустить }
b^:=a^+b^; { да... В результате в integer запишется целое число }
b^:=25*b; { нет... Умножение неприменимо к указателям }
a^:=x^*3-b^; { нет... Будет несовместимость типов при попытке присвоить real ячейке типа Integer }
a:=a^*3-b^; { нет... Попытка присвоить целочисленное значение указателю }
Alla
Кое в чем удалось разобраться:
Дан одномерный массив, найти последний отрицательный элемент:
program test1;
const n=5;
var
a : array[1..n] of real;
i : integer;
el : real;
begin
writeln('Vvod elementov', n);
for i:=1 to n do
begin
readln(a[i]);
if a[i]<0 then
el:=a[i]
end;
writeln(el);
readln;
end.


Дана матрица размерности N*N, найти сумму положительных/отрицательных/четных элементов матрицы:
program test1;
const n=3; m=3;
var
a : array[1..n, 1..m] of integer;
i,j,sum,s : integer;
begin
writeln('Vvod elementov', n, 'x', m);
s:=0;
for i:=1 to n do
for j:=1 to m do
begin
readln(a[i,j]);
if a[i,j] < {>} 0 { not odd(a[i,j])} then
inc(s, a[i,j]);
sum:=s
end;
writeln(sum);
readln;
end.


Дана матрица размерности N*N, найти сумму КВАДРАТОВ положительных/отрицательных/четных элементов матрицы:
program test1;
const n=3;
m=3;
var
a : array[1..n, 1..m] of integer;
i,j,sum,s,g : integer;
begin
writeln('Vvod elementov', n, 'x', m);
s:=0;
for i:=1 to n do
for j:=1 to m do
begin
readln(a[i,j]);
if a[i,j] >{<} 0 {not odd(a[i,j])} then
begin
g:=sqr(a[i,j]);
inc(s, g);
sum:=s
end;
end;
writeln(sum);
readln;
end.


Дана матрица размерности N*N, найти произведение КВАДРАТОВ положительных/отрицательных/четных элементов матрицы:
program test1;
const n=3; m=3;
var
a : array[1..n, 1..m] of integer;
i,j,umn,s,g : integer;
begin
writeln('Vvod elementov', n, 'x', m);
s:=1;
for i:=1 to n do
for j:=1 to m do
begin
readln(a[i,j]);
if a[i,j] >{<} 0 {not odd(a[i,j])} then begin
g:=sqr(a[i,j]);
s:=s*g;
end;
end;
writeln(s);
readln;
end.


Дана матрица размерности N*N, найти произведение положительных/отрицательных/четных элементов матрицы:
program test1;
const n=3; m=3;
var
a : array[1..n, 1..m] of integer;
i,j,umn,s,g : integer;
begin
writeln('Vvod elementov', n, 'x', m);
s:=1;
for i:=1 to n do
for j:=1 to m do
begin
readln(a[i,j]);
if a[i,j] >{<} 0 {not odd(a[i,j])} then begin
s:=s*a[i,j];
end;
end;
writeln(s);
readln;
end.
Гость
Volvo Большое спасибо !!!
Alla
Вывести элементы множества, составленного из произвольных букв от A..Z, в алфавитном порядке
Что-то никак sad.gif
Код


program test1;
var
m:set of 'A'..'Z';
i:char;
s:string;
begin
writeln('Vvedite stroku');
while i <> '.' do
begin
  write(i);
  read(i);
end;
for i := 'A' to 'Z' do
  begin
   if i in m then
   write(i);
  end;
while s='x' do
end.
Alla
Дан текст. Найти множество, элементами которого являются встречающиеся в тексте цифры от ‘0’ до ‘9’ и знаки арифметических операций;
Код

program test1;
const
  m = ['+','-','*','/','0'..'9'];
var
  str:char;
begin
  writeln('Vvod stroki');
  while str <> '.' do
  begin
  readln(str);
  end;
  if str in m then
  write(str);
  readln;
end.

Никак
volvo
program test1;
const
m = ['+','-','*','/','0'..'9'];
var
str: string;
myset: set of char; { по условию все-таки надо найти монжество !!! }
i: byte;
begin
write('Vvod stroki: '); readln(str);
for i := 1 to length(str) do
if str[i] in m then myset := myset + [ str[i] ];

for i := 32 to 255 do
if chr(i) in myset then write(chr(i));

readln;
end.
Гость
А как быть с Алфавитом.
И еще Volvo скажите пожалуйста как добавит информацию в НАЧАЛО тектовго файла, как в конец я знаю smile.gif
volvo
Знаешь, что? Тебе было, я вижу, лень прочесть то, что я написал в "FAQ: Файлы"... Я что, для себя это все делал? МНЕ это надо? Иди и читай, и поиском опять же пользуйся, уже задавали эти вопросы. Я уже говорил, и еще раз повторяю: то, что вы "просыпаетесь" в последнюю секунду - это ваши проблемы.
Анна
Про алфавит делается по аналогии cool.gif :
program test1;
uses crt;
var
m, all : set of char;
i:integer;
s: string;
ch: char;

begin
clrscr;
m:=['A'..'Z'];
all:=[];
writeln('Введите строку: '); readln (s);
for i:=1 to length(s) do
if s[i] in m then all:=all + [s[i]];
writeln ('Результат: ');
for ch:= 'A' to 'Z' do
if ch in all then write(ch);
end.
Alla
Спасибо Ань !!!
klem4
Можно вот так (тут вариант для строчных букв)

uses crt;
var
s : string;
CharSet : set of char;
i,j : byte;
begin
readln(s);
CharSet := [];
for j := 97 to 122 do
for i := 1 to length(s) do
if (s[i] = chr(j)) and (not(s[i] in CharSet)) then begin
include(CharSet, s[i]);
write(s[i]);
end;
readln
end.
Alla
Не используя дополнительные переменные, поменять местами значения переменных-множеств А и В.
Код

program test1;
var
  a : set of 'A'..'Z';
  b : set of  0 .. 9;
  s1, s2 : string;
  i : byte;
begin
  writeln('Vvod 1');
  readln(s1);
  writeln('Vvod 2');
  readln(s2);
  for i:=1 to length(s1) do
   if s1[i] in a then
    s1[i] in b
  for i:=1 to length(s2) do
   if s2[i] in b then
    s2[i] in a
  writeln(s1);
  writeln(s2);
  readln;
end;

Не могу найти ошибку, хотя казалось бы все элементарно ?
GoodWind
поменять местами значение переменных без промежуточной переменной можно так:
Код

a:=a+b;
b:=a-b;
a:=a-b;

прикручивай к своей программе wink.gif
volvo
GoodWind, только не в случае множеств, не вводи человека в заблуждение no1.gif

Хочешь пример?
GoodWind
volvo, да... yes2.gif как тогда ? unsure.gif
Гость
Ребят, ну скажите пожалуйста как решить, в чем у меня ошибка ...
Анна
//offtop:
GoodWind, тоже мне .. ещё ведь в аське так упорно отстаивал своё lol.gif
volvo
Цитата(GoodWind @ 21.01.2006 18:38)
volvo, да... yes2.gif

Да - в смысле, примера, я так понимаю smile.gif

Смотри:
Var a, b: set of byte; { В принципе, неважно, какого типа множество - работать не будет все равно }
begin
a := [1, 2, 3, 4];
b := [5, 6];

a := a + b;
b := a - b;
a := a - b; { Все сработало: a = [5, 6] и b = [1, 2, 3, 4] }

{ Сейчас будет облом: }
a := [1, 2, 3, 4];
b := [3, 4, 5, 6];

a := a + b; { a = [1, 2, 3, 4, 5, 6] }
b := a - b; { b = [1, 2] }
a := a - b; { Oops: a = [3, 4, 5, 6] и b = [1, 2] }
end.

Я же говорил, что не будет работать... wink.gif
Вернее НЕ ВСЕГДА будет работать... Как только множества содержат одинаковый элемент - начинаются проблемы...

Цитата(GoodWind @ 21.01.2006 18:38)
как тогда ? unsure.gif
Надо подумать...
GoodWind
"да" в смысле работать не будет...
Alla
Не используя дополнительные переменные, поменять местами значения переменных-множеств А и В.
Кто-нибудь помогите решить unsure.gif
GoodWind
Алла, мы уже знаем задание, думаем над решением...
Без ромежуточной не получается, но есть один способ.... smile.gif
Код

c:=a*b;
a:=a+b;
b:=a-b+c;
a:=a-b+c;
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.