Помощь - Поиск - Пользователи - Календарь
Полная версия: Задачка на паскале > Информатика / Программирование
Образовательный студенческий форум > Другие дисциплины > Информатика / Программирование
cattyfil
Задали вот такую вот штуку...
Дано натуральное число n. Вычислить Изображение

Я начала делать на паскале, но не знаю, правильно ли и что делать дальше. Сложность именно в дроби и в том, что и к знаменателю, и к числителю прибавляются выражения. Если кому-то не сложно, подскажите, что делать дальше, как конкретно сделать этот цикл.
Вот мое скромное
var
n,s,i: integer;

begin
writeln('введите n');
readln(n);
if n<=0 then
writeln('ошибка введите натуральное число');

s:=0;
for i:=1 to n do
begin
s:=s*(cos(i)+cos(i+1))/(sin(i)+sin(i+1));

граф Монте-Кристо
Вам необходимо в каждой итерации цикла изменять три числа: числитель дроби, знаменатель дроби и всё произведение. То есть:

Код
p := 1;
su := 0;
sd := 0;
for i:=1 to n do
begin
    su := su + cos(i);
    sd := sd + sin(i);
    s := s*su/sd;
end
cattyfil
вы меня спасли просто)))) спасибо гигантское!!!!!!!!
граф Монте-Кристо
В МГУ до сих пор учат программированию на паскале? Беда...
cattyfil
и еще кое-что нам задали...
"вводится цепочка латинских символов до появления символа ".".Необходимо вычислить частоту появления каждой буквы.
Мои попытки:
const
t='.';
var
a: array [1..100] of Char;
b: array [1..100,1..100] of Char;
i,j,l,n: Integer;

begin

Writeln ('vvedite bukvy');
while a[i]<>t do
begin
Readln (a[i]);
l:=l+1;
end;
l:=l-1;
for i:=1 to l do
for j:= i+1 to l do
begin
if a[i]=a[j] then
begin
b[i,1]:=a[i]; Inc(b[i,2]);
end;
end;
Write(b[i,j],' ');
Writeln;

readln;
end.

главным услоивем является ОТСУТСТВИЕ СТРИНГА!
Вот то, что у меня получилось. Получается ввести массив, а дальше не могу задать так, чтоб именно считало количество повторяющихся букв и выводило и сами символы, которые повторяются и их кол-во.
буду очень благодарна за помощь или подсказку, как это сделать.
Julia
Если под латинскими символами понимаются латинские буквы, то сделайте их индексами массива, а элементами - количество вхождений.
cattyfil
Вводится строка символов. Определить, сколько в нем слов длиннее 5 букв. Слова при введении отделяются пробелами.

Вот результат моих мучений
Var s,s1:string;
j,i,k:integer;
Begin
write('введите строку');
readln(s);
k:=0;
for i:=1 to Length(s) do
Begin
if s[i]<>' ' then s1:=s1+s[i]; // вбиваем в S1 символы из S до пробела
if Length(s1)>5 then k:=k+1; // если длина s1 больше 5, то К увеличивается на единицу
s1:=' '; // обнуляем S1, чтобы заново вбить туда символы из S до следующего пробела.
End;
Writeln(k); // выводим количество слов, длинее пяти букв.
Readln;
End.

Подозреваю, что ошибка с обнулением S1. Если у кого-то есть идеи, как исправить это безобразие или решить задачу другим подходом, прошу откликнуться.
daslex
Цитата(cattyfil @ 29.11.2012, 17:41) *

Если у кого-то есть идеи, как исправить это безобразие или решить задачу другим подходом, прошу откликнуться.


var i,count,count2:integer; //Счетчик цикла, Счетчик символов и Счетчик слов
S1:String; //Строка

begin

S1:='ck jjjjjj kk k jjd ksdj a приветик'; //наша строка. Подправите
writeln(S1); //вывел на экран

count:=0; //Ставим счетчики в нули
count2:=0;
S1:=S1+' '; //На всякий случай дописываю пробел в конец строки.

for i:=0 to length(S1) do Begin //Начинаем проход по строке
if S1[i] in ['A'..'z','А'..'я'] then inc(count); //Если текущий символ принадлежит множеству увеличиваем счетчик символов
if S1[i]=' ' then Begin //Если текущий символ пробел
if count>5 then inc(count2); //То проверяем счетчик символов и если символов больше пяти, то увеличиваем счетчик слов, в которых больше пяти букв
count:=0; //так как был пробел, то обнуляем счетчик
end;
end;

writeln(count2); //Рисуем количество слов, в которых букв больше пяти
readln;
end.

Это в консоли Delphi. Должно работать в Паскале.

=========
cattyfil
Спасибо, мы как раз в Delphi работаем. Но ваша программа, к сожалению, не хочет считать, выдает либо ноль, либо 1, скоько слов ни вводи(((( И понять ошибку у вас я тоже не могу, вроде правильно всё.
daslex
Цитата(cattyfil @ 30.11.2012, 5:03) *

Спасибо, мы как раз в Delphi работаем. Но ваша программа, к сожалению, не хочет считать, выдает либо ноль, либо 1, сколько слов ни вводи(((( И понять ошибку у вас я тоже не могу, вроде правильно всё.


Русские слова вводите

Нужно в uses подключить Windows
uses
SysUtils, Windows;

и сразу после Begin
Begin
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
readln(S1); //Прочитали строку
Мой код
cattyfil
Уфф,спасибо большое за труды) попыталась сдать сегодня эту задачу. Русские слова это полбеды, хоть с английскими работает и то хорошо. Проблема в другом - преподаватель не разрешила использовать множества

if S1[i] in ['A'..'z','А'..'я'] then inc(count); //Если текущий символ принадлежит множеству увеличиваем счетчик символов

Как это сделать не через множества, не знаете случайно?)
daslex
var S1,S2:String;
i,j:Integer;
begin
SetConsoleCP(1251);
SetConsoleOutputCP(1251);

i:=0; //счетчик цикла
j:=0; //счетчик слов

S1:='Привет мой друг, дорогой и любезный'; //наша строка
S1:=S1+' '; //дописываю пробел в конец
writeln(S1); //вывожу на экран

for i:=1 to length(S1) do Begin //проход по строке
if S1[i]<>' ' then S2:=S2+S1[i] //если текущий символ не пробел, то составляю слово
else Begin //если же пробел
if length(S2)>5 then inc(j); //проверяю длину составленного слова и если там больше пяти букв, увеличиваю счетчик слов
S2:=''; //обнуляю слово
end;
end;
writeln(j); //вывожу число слов из более чем 5 букв.
readln;
end.

==============
минусы, разделители будут считаться за букву слова. (, - " @ и т.д.)


ваше почти.
cattyfil
Спасибо)
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.
Русская версия Invision Power Board © 2001-2024 Invision Power Services, Inc.