• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о форуме и правила – там коротко описано, как задать вопрос так, чтобы быстро получить ответ. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по старой ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

Прошу помощи в решении задачи на Паскале!

Статус
В этой теме нельзя размещать новые ответы.
Регистрация
13 Сен 2009
Сообщения
5
Реакции
0
Баллы
0
Прошу помощи в решении задачи на Паскале!

Помогите, пожалуйста! очень надо решить срочно задачу на языке Паскаль!!!! условие такое: "Дан массив натуральных чисел. Найти цифру, которая чаще всех встречается и какое кол-во раз?" Буду очень благодарна тому, кто поможет!;)
 
Уточните, пожалуйста, подсчитывать нужно именно чаще всего встречающуюся цифру или все-таки число?

По определению множества натуральных чисел таковых в природе бесчисленное количество и, если речь идет о цифрах, а не о числах - придется рассматривать все разряды чисел, а это значительно усложнит алгоритм подсчета.
 
В предположении, что речь идет о подсчете чисел....

program example;
const
n=10;
var
a:array[1..n] of integer;
i:integer;
k:integer;
j:integer;
pos:integer;
freq:integer;
begin
a[1]:=181;
a[2]:=223;
a[3]:=332;
a[4]:=11;
a[5]:=51;
a[6]:=11;
a[7]:=72;
a[8]:=11;
a[10]:=121;

pos:=1;
freq:=1;
for i:=1 to n do
begin
k:=1;
for j:=i+1 to n do
begin
if a=a[j] then k:=k+1;
end;
if k>freq then
begin
freq:=k;
pos:=i;
end;
end;
writeln(a[pos],' ',freq);
readln;
end.
 
ответ

Дан массив именно натуральных чисел. При запуске программы мы сами вбиваем эти числа. А программа должна подсчитать ЦИФРУ, которая чаще всего встречается и ее кол-во. Програма будет просматривать введенные нами числа, делить их на разряды и уже проделывать свою работу - искать нужную цифру и подсчитывать ее кол-во.:)
Поможете?:) к вечеру...
 
По количеству разрядов в числе ограничение какое-нибудь есть?
 
нет. Нужно будет вставить алгоритм, который бы делил все числа на разряды. Ну как?:)
 
Попробую сделать, если никто не опередит :D, ждите чуть позже.
 
Код:
program example;
var
  a:array[1..1000] of integer;
  digit:array[0..9] of integer;
  i:integer;
  j:integer;
  t:integer;
  r:integer;
  q:integer;
  n:integer;
begin
 write('count? ');
 readln(n);
 for i:=1 to n do
 begin
  write('a[',i,']=');
  readln(a[i]);
 end;

 for i:=0 to 9 do
 begin
  digit[i]:=0;
 end;

 for i:=1 to n do
 begin
  t:=a[i];
  while t > 0 do
  begin
   r:=t-(t div 10)*10;
   t:=t div 10;
   digit[r]:=digit[r]+1;
  end;
 end;
 j:=0;
 q:=0;
 for i:=0 to 9 do
 begin
  if digit[i]>q then
  begin
   q:=digit[i];
   j:=i;
  end;
 end;
 writeln(j,' ',q);
 readln;
end.
 
Другой вариант:
Код:
program calc;
uses crt;
 var
a: array[1..10000] of integer;
exz: array[0..9] of integer;
n, i, k, j: integer;

begin {Начало программы}
clrscr;
writeln('Введите количество элементов массива');
readln(n);
writeln('Начинаем заполнение массива ',n,' значениями');
for i:=1 to n do {Цикл заполнения массива}
begin
writeln('Введите значение ',i,'-го элемента');
read(a[i]);
if a[i]<1 then begin writeln('Вы ввели не натуральное число, пожалуйста, повторите.'); i:=i-1; end; 
end;

{начинаем анализ массива}
for i:=1 to n do 
begin
 while a[i] >0 do
begin
j:=a[i] mod 10;
exz[j]:=exz[j]+1;
a[i]:=a[i] div 10; end; end;

{начинаем обрабатывать результирующий массив}
k:=exz[0];
for i:=0 to 9 do 
if exz[i]>k then begin k:=exz[i]; j:=i; end;

writeln('Наиболее часто в массиве встречается цифра ',j);
readln;
end.
Извиняюсь, заметил ошибки. Исправил и проверил, все работает, правда, от первого варианта листинг не очень отличается, лишь в деталях :). Отдельное спасибо Long Cat за замечания :).

З.Ы. Внимание! В обоих вариантах не обрабатываются одинаковые значения в результирующем массиве, просто находится первый наибольший элемент и выводится, остальные с тем же значением игнорируются.

З.З.Ы. Тему подчистил от промежуточного обсуждения.
 
Спасибо большое!!!:) Есть еще одна маленькая задачка:)
"Упорядочить числа по убыванию суммы цифр" желательно с методом "Пузырька")
 
К сожалению, смогу заняться только часов через 20.
 
Упорядочить числа по убыванию суммы цифр
Допустим, что дан целочисленный массив.
Код:
program calc;
uses crt;
var
a: array[1..10000] of integer;
exz: array[1..10000] of integer;
n, i, k, j, g: integer;
begin
clrscr;
writeln('Введите количество элементов массива');
readln(n);
writeln('Начинаем заполнение массива ',n,' значениями');
for i:=1 to n do {Цикл заполнения массива}
begin
writeln('Введите значение ',i,'-го элемента');
read(a[i]); end;

for i:=0 to n+1 do exz[i]:=0;

{начинаем анализ массива}
for i:=1 to n do
begin
k:=a[i];
while k > 0 do
begin
j:=k mod 10;
exz[i]:=exz[i]+j;
k:=k div 10;
end; end;

{Выводим оба массива рядом в столбик}
writeln("Число  Сумма цифр');
for i:=1 to n do begin write(a[i]:6, exz[i]:6); writeln; end;
{обрабатываем  массивы}
for g:=1 to n do begin
j:=0; k:=0;
for i:=2 to n do begin
if exz[i]<exz[i-1] then
                   begin
                   k:=exz[i-1];
                   j:=a[i-1];
                   exz[i-1]:=exz[i];
                   a[i-1]:=a[i];
                   exz[i]:=k;
                   a[i]:=j; end; end; end;
{Выводим получившиеся массивы рядом в столбик}
writeln("Число  Сумма цифр');
for i:=1 to n do begin write(a[i]:6, exz[i]:6); writeln; end;

readln(n);
end.

Проверил, все работает
 
Последнее редактирование:
Помогите, пожалуйста, написать на паскале след задание:

"Определить сумму квадратов первых трех цифр заданного пятизначного числа. Определить символ, который соответствует числу, образованному и 2-х последних цифр исходного числа."
 
Помогите, пожалуйста, написать на паскале след задание:

"Определить сумму квадратов первых трех цифр заданного пятизначного числа. "

PROGRAM OPREDEL;

USES CRT;
VAR CHISLO,CIFRA1,CIFRA2,CIFRA3,SUMMA:INTEGER;
BEGIN
CLRSCR;
WRITELN('ВВЕЛИТЕ ЧИСЛО');
READ(CHISLO);
CIFRA1:=CHISLO DIV 10000;
CIFRA2:=CHISLO DIV 1000 MOD 10;
CIFRA3:=CHISLO DIV 100 MOD 10;

SUMMA:=SQR(CIFRA1)+SQR(CIFRA2)+SQR(CIFRA3);
WRITELN('1 ЦИФРА=',CIFRA1,' 2 ЦИФРА=',CIFRA2,' 3 ЦИФРА=',CIFRA3,' СУММА ЧИСЕЛ',SUMMA);
END.
 
Последнее редактирование:
Помогите, пожалуйста, написать на паскале след задание:

"Определить сумму квадратов первых трех цифр заданного пятизначного числа. Определить символ, который соответствует числу, образованному и 2-х последних цифр исходного числа."

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

PROGRAM OPREDEL;

USES CRT;
VAR CHISLO,CIFRA1,CIFRA2,CIFRA3,SUMMA:INTEGER;
Ch:Char;
BEGIN
CLRSCR;
WRITELN('ВВЕДИТЕ ЧИСЛО');
READLN(CHISLO);
CIFRA1:=CHISLO DIV 10000;
CIFRA2:=CHISLO DIV 1000 MOD 10;
CIFRA3:=CHISLO DIV 100 MOD 10;
Ch:=CHR(CHISLO mod 100);
SUMMA:=SQR(CIFRA1)+SQR(CIFRA2)+SQR(CIFRA3);
WRITELN('1 ЦИФРА=',CIFRA1,' 2 ЦИФРА=',CIFRA2,' 3 ЦИФРА=',CIFRA3,' СУММА ЧИСЕЛ',SUMMA,' СИМВОЛ=',Ch);
READLN;
END.

Замена в 7 строке READ на READLN и добавление READLN в конце программы нужно, чтобы после вывода на экран программа остановилась, дав возможность увидеть результат. И еще совет - НЕ использовать кириллицу: при запуске в DOS-Паскале символы отображаются неверно. Поэтому желательно все эти 'ВВЕДИТЕ ЧИСЛО', 'ЦИФРА' и т.п. заменить латиницей.
 
Программа может вывести в качестве символа черточку или квадратик? Это спрашивается в задаче?
 
Последнее редактирование:
Если речь идет о консольном приложении, то да, может. Псевдографика — Википедия
Там коды этих символов. На Паскале это делается так:
Код:
write(chr($DB));
Будет квадратик :)
 
В моем паскале write(chr($DB)); выводит букву Ы. Но у меня не DOS-Паскаль, а Паскаль АВС, так что все нормально.
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху