Помощь - Поиск - Пользователи - Календарь
Полная версия: Вопросы от Ромарио!
Форум «Всё о Паскале» > Pascal, Object Pascal > Теоретические вопросы
Страницы: 1, 2, 3
Romario
Начинаю серьёзно учить Паскаль и вот решил создать и пихать сюда все неясности, если вы конечно не против
Первые вопросы:
  • Как в Паскале менять цвета?
  • Как  --//-- создать таблицу и что-нить в ней написать.
  • И может кто-нить меня раздуплит в массивах? ;D
Clane
В модуле crt есть процедуры, которые тебе нужны. Вот формат процедуры : TextColor (a); где а - номер цвета.
Alex
Ну цвета в Паскалу менять такой процедуркой:
TextColor(color);- в текстовом режиме;
SetColor(color);- в графическом режиме;
Таблицы делать (то есть я думаю ты имеешь в виду двумрный массив);
var a:array[1..n,1..m]of type;
где n-кол-во строк,а m-кол-во столбцов, а Type-это один из типов данных (integer,real,char и т.д. и т.п.).
Написать:
Код
for i:=1 to n do begin
 for j:=1 to m do begin
   a[i,j]:=...
   write(a[i,j,' ');
 end;
 writeln;
end;

Массив это упорядоченный набор однотипных данных записанных под одним именем.
В памяти элементы массива располагаются один за другим.
Так сопственно все, но ты еще чо-нибудь спрашивай,если надо.
Romario
Во-первых, пасибо, во-вторых, идём дальше ;D
Зачем эти операторы?
  1. delay(a);
  2. Где на клаве можно непрерывную стрелку найти, всмысле чтоб на экране она была непрерывной, а не такой ---> , например.
  3. Сколько цветов можно использовать в Паскале?
  4. Что вот это такое? TextMode(OrigMode); Exit;
  5. TextMode(CO80); я так понял это задание какого-то режима? Что он делает?
Clane
Пока ответ только на первый вопрос:
Procedure Delay (Ms); MS- значение в миллисекундах. Для чего ? Задержка исполнения программы на заданное число миллисекунд. Delay - это стандартная процедура модуля crt.
Romario
Ну например delay(2000)
Значит после 20000 милисекунд всё, что на экране исчезнет? ;D Для чего это применяется? На примере каком-нибудь объясните...
AlaRic
Например:
сказано найти решение какого нибудь ур-я.Ты выводишь на печать:
Код
writeln(z:4:4);
delay(2000);
writeln('решено ур-е');
- это значит, что после вывода на экран твоего ответа(z) пройдет 2000 миллисекунд и после этого появится надпись "решено ур-е"......
AlaRic
2) такого вроде нет...
3)true color точно нет...
4)оригинальный текстовый режим
5)СО80  включает адаптер цветной графики и устанавливает цветной режим вывода данных с 80 знаками в строке.
Romario
Ну труколор ясно что нет ;D
Оригинальный текстовый режим мне ничего не сказал, можно по подробнее, для чего, как, зачем... и т.д.

Добавлено:
А опишите плиз какие функции входят в модуль CRT? И какие есть ещё модули и для чего они что в них входит? Спасибо! smile.gif
pascal65536
Мне кажется, что лучше обзавестись хоть какой-нибудь книжкой по паскалю. Там есть почти все ответы на эти вопрос и многие другие.
AlaRic
Максимум вообще то 256 цветов.....
Согласен с вышесказанным-купи книгу..а пока тебе сюда: http://polybook.doc.nov.ru/p7103.htm
mj
Цитата
Максимум вообще то 256 цветов.....
Согласен с вышесказанным-купи книгу..а пока тебе сюда    http://polybook.doc.nov.ru/p7103.htm

Вообще то в текстовом режиме всего 16 цветов, а в графическом (при наличии соответствующего драйвера) 32 бита (true color)...
Alex
MJ, а ты не подскажешь где эти дрова найти?

Добавлено (через 4 минуты):
Да... Про книжку... Советую тебе, Romario, купить книжку Фаронова!! "Turbo Pascal 7.0"!!! Там ты точно найдешь ответы на свои вопросы!! Там кстати усе достаточно понятно написано!!!!
mj
Цитата
MJ, а ты не подскажешь где эти дрова найти?

Были у меня, но потом винт накрылся и я всё потерял sad.gif
Ищи файл VESA32.BGI
Или ищи доку по VESA режимам. Там на самом деле всё просто.
Romario
Спасибо, значит буду искать книгу...
Alex
Спасибо,MJ!!!!Бум искать!!!
AlaRic
Цитата
Вообще то в текстовом режиме всего 16 цветов, а в графическом (при наличии соответствующего драйвера) 32 бита (true color)...

Слушай а что это за драйв такой?
big
Советую купить книжку Культина "Самоучитель на Turbo Pascal 7.0". Книга отличная. Твсе очень доходчиво объяснено! Попробуй...может понравиться! ;) :-* smile.gif
mj
Цитата
Слушай а что это за драйв такой?

VESA32.BGI SVGA32.BGI
Romario
У меня вопрос:
Как написать прогу, чтобы при запуске на экране появлялись рандомные числа, то-то вроде матрицы...
Alex
Код
const n=5; m=7;
var a:array [1..n,1..m] of integer;i,j,a,b:integer;
begin
 Randomize;
 write('Введите промежуток, на котором заданы случайные числа');
 readln( a, b );
 for i:=1 to n do begin
   for j:=1 to m do begin
     a[i,j]:=Random(b-a+1)+a;
     write(a[i,j],' ');
   end;
   writeln;
 end;
 readln
end.
Romario
Нет, вы не поняли.. не матрицы мне нужны, а чтобы при запуске программы по всему экрану то появлялись то ищезали разные числа... Как в фильме Матрица ;D

Добавлено (через 9 минут):
Да совсем забыл ещё:
Как менять размер шрифта в Паскале....
И ещё я например хочу чтобы только одна строка в Паскаль была например красной, а когда командой textcolor(a); то всё, что ниже делается таким же цветом, как сделать так чтобы так делалось только с одной строкой или с двумя, а остальные оставались такими же.... Тоже самое с командой gotoxy... Подскажите : smile.gif
Clane
Просто после того, как две строки выведутся красным цветом, примени снова команду Textcolor(a) для последующего текста.
Romario
Я имел ввиду без команды.... есть такое? А если просто без команды textcolor(white) так чтоли?
mj
На всё нужна команда, просто так ничего не бывает ;)
Потренируешся с паскалем, поймёшь...
А вообще я считаю что начинать изучение языков программирования надо с простейших алгоритмов.
Romario
Например, каких? Посоветуй.. буду начинать с них... ;D Что насчёт проги моей? :o
mj
У нас на сайте вроде раздел задачь где то был (точно не помею smile.gif). Попробуй порешать задачки...
Clane
Люди ! Пишите правильно !! А то я не могу читать кривые сабжы, где написано не по-русски !!!
Romario
Нужно срочно решить эти задачи!!!

1 - Дано равносторонний треугольник со стороной a. Найти, длину стороны равнобольшого ему квадрата. Вичислить для таких значений:
a) a=7;
B) a=13
c) a=54

2 - Найти количество чисел кратных 7 от 7 до 7777 включительно.
a) Используя цикл for;
B) Используя цикл while;
c) Используя цикл repeat.

3 - Написать программу нахождения суммы чисел: S=10+22+32+…+n2, если
a) n=7;
B) n=10;
c) n=12.

4 - Натуральное число называется идеальным, если оно равно суме всех своих делителей, кроме самого числа. Проверить, будет ли число n идеальным.

5 - Если целое число М делится нацело на целое число N, то вывести на экран частное от деления, в противном случае – сообщение «М на N нацело не делится» и остаток.

Надеюсь поможете, заранее спасибо!
Clane
Код
program a2;
var a:integer;
begin
  a:=0;
  for a:=1 to 7777 do
    if (a mod 7=0) then writeln(a);
  a:=a+1;
  readln;
  readln;
end.

Вместо for подставляешь while and repeat. Надеюсь эти констукции ты знаешь.. в цикле менять ничего не нужно, просто вместо for и т.д. делай например конструкцию while

Добавлено:
Код
program a1;
var a,b,c,d: integer;
begin
  writeln('Введите a');
  readln( a );
  writeln('Введите b');
  readln( B );
  if (a mod b=0) then begin c:=a/b; writeln( c )
  else writeln('Не нацело делиться');
  d:=(a div B);
end.

Писал наспех, на кто что-то может и забыл написать, но прога сама правильная...
Romario
Спасибо! Жду остальные...
Clane
Решение 4 задачи
Код
program a4;
var n,s,i : integer;
begin
  writeln('Введите число');
  readln(n);
  s:=0;
  i:=0;
  for i:=1 to (n-1) do begin
    if (n mod i=0) then s:=s+i;
    i:=i+1;
  end;
  if s=n then writeln('Число идеальное')
  else writeln('Число не идеальное');
end.

Писал наспех, на кто что-то может и забыл написать, но прога сама правильная...


Про 3 задачу могу сказать, что там все делается очень просто, простейшим циклом for .. to ..do; Внутри цикла напиши такую штуку
Код
s:=s+sqr(i);  i:=i+1;

То есть будет увелечение до указанного числа и плюс все будет суммироваться и возводится в квадрат ...
Romario
Причём тут это: s:=s+sqr(i);  i:=i+1; ? Причём тут квадрат вообще?
Alex
Я чо то не понял.Я ведь где-то здесь в форуме писал решение 3 задачи.
Clane
Ну дык напиши еще разок !
big
Цитата
Вместо for подставляешь while and repeat. Надеюсь эти констукции ты знаешь.. в цикле менять ничего не нужно, просто вместо for и т.д. делай например конструкцию while


Я бы внес некоторые коррективы в вашу программу. Вот что у меня получилось:
Для for:
Код
var a:integer;
begin
 for a:=1 to 7777 do
   if (a mod 7=0) then writeln(a);
 readln;
end.


Для while:
Код
var a:integer;
begin
 a:=7;
 while a<7777 do begin
   if (a mod 7=0) then writeln(a);
   a:=a+1;
 end;
 readln;
end.


Для repeat:
Код
var a:integer;
begin
 a:=7;
 repeat
   if (a mod 7=0) then writeln(a);
   a:=a+1;
 until a>=7777;
 readln;
end.

Вроде бы все три проги составлены верно.
big
Я предлагаю следующее решение для 3-й задачи:
Код
Program p3;
const n=12;
var i,s:integer;
begin
 s:=10;
 For i:=2 to n do begin
   s:=s+n*10+2;
   If i=7 then writeln('n=7  s=',s);
   If i=10 then writeln('n=10  s=',s);
 end;
 writeln('n=12  s=',s);
 readln;
end.
Alex
Big, у тебя по-моему ошибочка в проге:
не
for i:=2 to n do
s:=s+n*10+2;

а:
for i:=2 to n do
s:=s+i*10+2;
Во как!!!
Alex
Кстати вот она моя прога(в смысле 3-я задача):
она правдо для любых n:
Код
program sum;
var n,i,sum:integer;
begin
 write('Введите номер -> ');
 readln(n);
 sum:=10;
 for i:=2 to n do begin
   sum:=sum+i*10+2;
 end;
 writeln ('Сумма чисел последовательности до n(10,22,32,42,....,n2) равна ',sum);
 readln
end.
trminator
Про книжку... Я учился по книжке тов. С. Н. Лукина "Turbo pascal 7.0 самоучитель для начинающих". А если владеешь английским, то бывает кнопочка F1  ;) (а где-то на этом сайте я недавно видел что-то про русский help)
Alex
Правильно видел!!
Romario
Ну что заждались? ;) Вот и новая порция задачек!!!

Задача 1

Найти все натуральные числа от 1 до 200, у которых количество делителей равно К (К вводится с клавиатуры)

Задача 2

Даны натуральное число N и последовательность A1, A2, …, A N, AN+1. Определить наибольшее из нечетных и количество четных чисел, входящих в последовательность A1, A2, …, A N, AN+1.

Очень жду :smile.gif
mj
Решение 1 задачки на Delphi:
Код
procedure TForm1.Edit1Change(Sender: TObject);
var
 D, F, C, R, T: Integer;
begin
 ListBox1.Clear; // Очищаем список
 D := StrToIntDef(Edit1.Text, 0);
 for F := 1 to 200 do begin
   C := 0;
   T := F;
   while T<>1 do begin
     R := 2;
     while (T mod R)<>0 do
       Inc( r );
     T := T div R;
     Inc( c );
   end;
   if C=D then
     ListBox1.AddItem(IntToStr(F), nil); // Добавляем число в список
 end;
end;
big
Цитата
Big, у тебя по-моему ошибочка в проге:
не
for i:=2 to n do
s:=s+n*10+2;

а:
for i:=2 to n do
s:=s+i*10+2;
Во как!!!


Да согласен ошибка есть. Но в целом прога написана верно!
Alex
На Пасе:
Код
program delit;
const n=200;
var i,k,m,l,r:integer;
begin
 write('Введите количество нужных делителей->');
 readln(k);
 r:=0;m:=0;
 for i:=1 to n do begin
   for l:=1 to i do
     if l mod i=0 then m:=m+1;
     if m=k then r:=r+1;
 end;
 writeln('Кол-во чисел, у котор. кол-во делит =k равно->',r);
 readln
end.

Сразу говорю, что не проверял.
Alex
Так чуваки!!!Я малясь не то сделал.
Вот то что надо.
Код
program delit;
const n=200;
var i,k,m,l,r:integer;a:array [1..n] of integer;
begin
 write('Введите количество нужных делителей->');
 readln(k);
 r:=0;m:=0;
 for i:=1 to n do begin
   for l:=1 to i do  
     if l mod i=0 then m:=m+1;
   if m=k then begin
     r:=r+1;
     a[r]:=i;
   end;
 end;
 writeln ('Вот числа, у которых кол-во делителей =k->');
 for i:=1 to r do
   write(a[i],' ');
 readln
end.

Сразу говорю, что не проверял.
Romario
Я не понимаю вот этого:
Цитата
Сразу говорю, что не проверял.

У вас времени не хватает переименовать txt в pas и нажать Ctrl + F9... Давайте проверять ;) Уж если не работает, но вы считаете алгоритм правильным, тогда постите, будем все вместе разбирать smile.gif
Alex
Времени правдо нет.Заходишь, думаешь,что задача легкая, пишешь, а уж затем проверяешь.
Alex
Мое решение неверно!!!
Пойду дорабатывать!
Romario
Мне бы в Паскале это всё :smile.gif
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.