IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

2 страниц V  1 2 >  
 Ответить  Открыть новую тему 
> Несколько фрагментов программ, Массивы, указатели, множества, файлы
сообщение
Сообщение #1


Гость






Очень прошу о помощи:
Сразу хочу сказать, что нужны только фрагменты решения конкретной задачи, писать всю программу не надо.
Мне действительно очень неловко, но и выбора у меня нет завтра с утра уже надо все сдавать... Сразу хочу сказать, я пользовался и Поиском и 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);

________________________________________________________________________________
________________
Я вас очень прошу помогите, от этого зависит мое будущее - будущее экономиста...
Я не прошу вас писать все ответы, дайте хотя бы конкретные ссылки где можно найти ответы, поиск выдает ОООЧЕНЬ много и найти что-то конкретное очень трудно, да и как мне стало понятно в интернете кроме вашего форума нет больше не одного нормального сайта по Паскалю. Помогите пожалуйста ...

Сообщение отредактировано: volvo -
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






Картинка не получилась sad.gif(((
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Знаток
****

Группа: Пользователи
Сообщений: 424
Пол: Мужской

Репутация: -  2  +


А что ты имеешь ввиду под фрагментами??


--------------------
Чего хочет женщина – того хочет Бог
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Новичок
*

Группа: Пользователи
Сообщений: 38
Пол: Женский

Репутация: -  0  +


Цитата(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
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Гость






Alla, во-первых, ты ОН или ОНА? Имя женское, но
Цитата
я пользовался и Поиском и FAQ


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

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

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

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


Новичок
*

Группа: Пользователи
Сообщений: 38
Пол: Женский

Репутация: -  0  +


Цитата(volvo @ 20.01.2006 11:28) *

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


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

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

Паскаль конечно строго типизированный...
и я никогда так над адресами не издевалась smile.gif
Хм.. попробовала.
Как и думала: строгое соответствие типов, pointer с любыми указателями, вешественной переменной можно присвоить целое.

Сообщение отредактировано: Pola -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Гость






Нет задания мне дали в среду, до этого дня пыталась сама разобраться, но потом поняла что уже не успеваю и решила обратиться за помощью. Начсет пользовался smile.gif извините опечаталась я...
Насчет указателей мне действительно непонятно, теперь начинаю понимать, что вопрос похоже был глупый...
Насчет первых трех заданий, под фрагментом программы подразумевается, только та часть текста которая нужна чтобы выполнить поставленную задачу... Очень прошу помогите разобраться хотя бы с тремя первыми заданиями...
Pola большое спасибо за помощь !
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Новичок
*

Группа: Пользователи
Сообщений: 38
Пол: Женский

Репутация: -  0  +


Этот "фрагмент" зависит от того, как ты константы, типы и переменные определишь...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Гость






Цитата
Имеется следующее описание переменных:
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^; { нет... Попытка присвоить целочисленное значение указателю }
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Гость






Кое в чем удалось разобраться:
Дан одномерный массив, найти последний отрицательный элемент:
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.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


Гость






Volvo Большое спасибо !!!
 К началу страницы 
+ Ответить 
сообщение
Сообщение #12


Гость






Вывести элементы множества, составленного из произвольных букв от 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.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #13


Гость






Дан текст. Найти множество, элементами которого являются встречающиеся в тексте цифры от ‘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.

Никак
 К началу страницы 
+ Ответить 
сообщение
Сообщение #14


Гость






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.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #15


Гость






А как быть с Алфавитом.
И еще Volvo скажите пожалуйста как добавит информацию в НАЧАЛО тектовго файла, как в конец я знаю smile.gif
 К началу страницы 
+ Ответить 
сообщение
Сообщение #16


Гость






Знаешь, что? Тебе было, я вижу, лень прочесть то, что я написал в "FAQ: Файлы"... Я что, для себя это все делал? МНЕ это надо? Иди и читай, и поиском опять же пользуйся, уже задавали эти вопросы. Я уже говорил, и еще раз повторяю: то, что вы "просыпаетесь" в последнюю секунду - это ваши проблемы.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #17


Бывалая
***

Группа: Пользователи
Сообщений: 290
Пол: Женский
Реальное имя: Анютка

Репутация: -  7  +


Про алфавит делается по аналогии 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.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #18


Гость






Спасибо Ань !!!
 К началу страницы 
+ Ответить 
сообщение
Сообщение #19


Perl. Just code it!
******

Группа: Пользователи
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

Репутация: -  44  +


Можно вот так (тут вариант для строчных букв)

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.


Сообщение отредактировано: volvo -


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #20


Гость






Не используя дополнительные переменные, поменять местами значения переменных-множеств А и В.
Код

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;

Не могу найти ошибку, хотя казалось бы все элементарно ?
 К началу страницы 
+ Ответить 

2 страниц V  1 2 >
 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 6.05.2024 7:40
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name