Форум
» Назад на решение задач по физике и термеху
Регистрация | Профиль | Войти | Забытый пароль | Присутствующие | Справка | Поиск

» Добро пожаловать, Гость: Войти | Регистрация
    Форум
    Информационные технологии
        Решение задач на Pascal. Форум 3.
Отметить все сообщения как прочитанные   [ Помощь ]
» Добро пожаловать на форум "Информационные технологии" «

Переход к теме
<< Назад Вперед >>
Несколько страниц [ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 ]
Модераторы: paradise, KMA
  

webs


Новичок

Помогите пожалуйста...
1.Ввести с клавиатуры значения переменных А, В, С. Найти наибольшее из выражений (АВ)С, (АС)В, (ВС)А, полагая, что среди них нет равных. Вы¬вести на экран сообщение, в котором указывается номер найденного выраже¬ния и его значение.
2.Определить номер столбца в матрице, сумма положительных элементов которой является наибольшей. Если таких столбцов несколько, то вывести номера всех этих столбцов.
3.Даны два массива чисел. Найти в них минимальные элементы. Если они равны, то исключить их из массивов. Процедуру повторять до тех пор, пока минимальные элементы массивов не окажутся разными.

Всего сообщений: 3 | Присоединился: октябрь 2009 | Отправлено: 20 окт. 2009 14:40 | IP
MaJlbBuHa



Новичок

не могу найти ошибку, помогите пожалуйста
Дан текст удалить из него слова, которые начинаются и заканчиваются на одну букву.
Вот мой код:
Code Sample:
 
uses crt;

var
delim,s,result,tmps: string;
a:array[1..100] of byte;
{ }
i,p,k,w:byte;

begin
delim:='',.;:?""';
writeln(' Enter string:'); { priglashaem na vvod ctroki}
readln(s); {vvodim stroky s }
s:='+s+';{}
w:=0;{}
for i:=1 to 100 do a[ i ]:=0;
for i:=1 to length(delim) do
begin
tmps:=s;
k:=pos (delim[ i ],tmps);
p:=0;
While (k>0) do begin
p:=p+k;
w:=w+1;
a[w]:=p;
delete(tmps,1,k);
k:=pos(delim[ i ],tmps);
end;
end;
{cortiryem massiv}
for i:=1 to w-1 do
if (a[ i ]>a[k]) then begin
p:=a[ i ];
a[ i ]:=a[k];
a[k]:=p;
end;
result:=' ';
for i:=1 to w-1 do
if (a[i+1]-a[ i ]>1) then
{}
begin
tmps:=copy(s,1+a[ i ],a[i+1]-1-a[ i ]);{word}
if (tmps[1]=tmps[length(tmps)]) then
{pervaya zapic cootvetctvyet poslednei}
result:=result+s[a[i+1}}
{}
else
result:=result+tmps+' '+tmps+s[a[i+1}};
{}
end
else
result:=result+s[a[i+1}};
writeln('original:'+s);
writeln('result:'+result);
readln;
end.


может можно как то проще решить?
Заранее спасибо

(Сообщение отредактировал KMA 29 окт. 2009 14:31)

Всего сообщений: 48 | Присоединился: январь 2009 | Отправлено: 20 окт. 2009 23:29 | IP
Dale



Участник


Цитата: MaJlbBuHa написал 20 окт. 2009 23:29
не могу найти ошибку, помогите пожалуйста
Дан текст удалить из него слова, которые начинаются и заканчиваются на одну букву.
Вот мой код:


может можно как то проще решить?
Заранее спасибо



Мальвина, вы похоже не ищете легких путей xD

Я бы сделал так:
Code Sample:
 
uses crt;

var a,b1,b2,rez:string;
   ch,i, k:integer;
   m2: string;

 {Функция, удаляющя из строки всякую гадость}
 function deletes(s:string):string;
 var result:string;
     i:integer;
 begin
  result:='';{начальное значение}
  {Проходим поочередно все символы}
  for i:=1 to length(s) do
  if not (s[ i ] in ['"','?','!',',',':','.',#39,#59]){если символ не входит во множество...}
     then result:=result+s[ i ]; {...то прибавляем его к результату}
  deletes:=result; {присваиваем функции значение результата}
 end;


begin
clrscr;
writeln('Введите строку');
readln(m2);
{Прибавляем в конец строки пробел для того, чтобы все слова в ней
оканчивались пробелами}
m2:=m2+' ';
rez:='';{начальное значение для результата}
while length(m2)>0 do begin  {Пока длина исходной строки больше нуля}
  {Ищем пробел}
  k:=pos(' ',m2);
  {Берем очередное слово}
  a:=copy(m2,1,k-1);
  {Берем в слове первую и последнюю буквы
  Ненужные символы удляем с пом. функции deletes}
  b1:=copy(deletes(a),1,1);
  b2:=copy(deletes(a),length(deletes(a)),1);
  {Если они не равны, то прибавляем к результату}
  if b1<>b2 then rez:=rez+a+' ';
  {Удаляем обработанное слово из исходной строки}
  delete(m2,1,k);
end;
writeln('резудльтат ', rez);
readkey;
end.





Всего сообщений: 139 | Присоединился: май 2009 | Отправлено: 22 окт. 2009 3:31 | IP
Dale



Участник


Цитата: webs написал 20 окт. 2009 14:40
Помогите пожалуйста...
1.Ввести с клавиатуры значения переменных А, В, С. Найти наибольшее из выражений (АВ)С, (АС)В, (ВС)А, полагая, что среди них нет равных. Вы¬вести на экран сообщение, в котором указывается номер найденного выраже¬ния и его значение.


Что значит наибольшее из выражений (АВ)С, (АС)В, (ВС)А?
Если произведение, то все равны.


2.Определить номер столбца в матрице, сумма положительных элементов которой является наибольшей. Если таких столбцов несколько, то вывести номера всех этих столбцов.

С первой частью задачи все понятно:
Code Sample:
 
const m=5;{строки}
        n=10;{столбцы}
var matr:array[1..m.1..n] of integer;
     matr_2:array[1..n] of integer;

..............
{Записываем в matr_2 суммы пол. эл-ов}
for i:=1 to n do begin
sum:=0;
for j:=1 to m do if matr[j,i]>0 then sum:=sum+matr[j,i];
matr_2[ i ]:=sum;
end;
{Ищем максимум}
ind_max:=1;
for i:=2 to n if matr_2[ i ]>matr_2[ind_max] then ind_max:=i;
writeln(ind_max);
.................


А вот как может быть несколько столбцов, сумма положительных элементов которого является наибольшей, я не понял.

Всего сообщений: 139 | Присоединился: май 2009 | Отправлено: 22 окт. 2009 4:06 | IP
weqs



Новичок

1.Ввести с клавиатуры значения переменных А, В, С. Найти наибольшее из выражений (АВ)С, (АС)В, (ВС)А, полагая, что среди них нет равных. Вы¬вести на экран сообщение, в котором указывается номер найденного выражения и его значение.

Нам пребод сказал что в проге просто надо написать (АВ)С<> (АС)В<> (ВС)А

Всего сообщений: 2 | Присоединился: октябрь 2009 | Отправлено: 22 окт. 2009 9:47 | IP
weqs



Новичок

помогите решить
3.Даны два массива чисел. Найти в них минимальные элементы. Если они равны, то исключить их из массивов. Процедуру повторять до тех пор, пока минимальные элементы массивов не окажутся разными.

Всего сообщений: 2 | Присоединился: октябрь 2009 | Отправлено: 22 окт. 2009 9:49 | IP
wedid



Новичок

Прошу помощи в решении задачи. В паскале вообще не разбираюсь.
Тема:Решение Задач Через Функции Или Процедуры......Условие задачи:дана таблица а[1 . . n,1 . . n],n<=100 целых чисел.напишите программу ,которая вычисляет сумму наибольших элементов ,по отношению к наименьших,находящихся ниже второстиненной диагонали.

Всего сообщений: 1 | Присоединился: октябрь 2009 | Отправлено: 22 окт. 2009 18:03 | IP
MaJlbBuHa



Новичок

Dale  вы как всегда правы))) спасибо огромное, что помогли

Всего сообщений: 48 | Присоединился: январь 2009 | Отправлено: 22 окт. 2009 22:21 | IP
SSSergey



Новичок

Помогите пожалуйста решить задачки первую вторую я так решил
1.Составить программу для вычисления скорости резания при механической обработки деталей V Определяемая величина
зависимость
Изменяемый технологический параметр процесса обработки t=1 мм

PROGRAM SPEED;
USES CRT;
   VAR SPD,T : REAL ;
       BEGIN

REPEAT WRITELN;
WRITE (' Введите глубину резания в ММ : ');
READLN (T);
SPD:=350/(exp(ln(75)*0.2)*exp(ln(T)*0.2)*exp(ln(0.3)*0.2));
WRITELN (' скорость резания равна ',SPD:4:2,' об/мин ');
   UNTIL FALSE;
       END.
так?
2.Напечатать таблицу соответствия между скоростью резания и изменяемым технологическим параметром (см. задание I)
Изменяемый параметр Диапазон варьирования от 0.5 до 1.5 Приращение 0.1
PROGRAM SOOTVET;

USES CRT;

   VAR  T,N,SPD : real;

BEGIN
clrscr;
N := -1;
T := 0.4;
repeat
N := N+1;
T := T+0.1;

SPD:=350/(exp(ln(75)*0.2)*exp(ln(T)*0.2)*exp(ln(0.3)*0.2));

writeln (N:1:0,'. ',T:1:1,' = ',SPD:4:2);

until T>=1.5;

readln;

END.
правильно?
3  как решить?
3.Составить программу определения значения скорости резания при величине изменяющегося технологического параметра (задания I и 2), ближайшей к величине, равной:Величина изменяющегося параметра

Всего сообщений: 27 | Присоединился: октябрь 2009 | Отправлено: 22 окт. 2009 23:20 | IP
Dale



Участник


Цитата: SSSergey написал 22 окт. 2009 23:20
Помогите пожалуйста решить задачки первую вторую я так решил
1.Составить программу для вычисления скорости резания при механической обработки деталей V Определяемая величина
зависимость
Изменяемый технологический параметр процесса обработки t=1 мм

PROGRAM SPEED;
USES CRT;
   VAR SPD,T : REAL ;
       BEGIN

REPEAT WRITELN;
WRITE (' Введите глубину резания в ММ : ');
READLN (T);
SPD:=350/(exp(ln(75)*0.2)*exp(ln(T)*0.2)*exp(ln(0.3)*0.2));
WRITELN (' скорость резания равна ',SPD:4:2,' об/мин ');
   UNTIL FALSE;
       END.
так?


Так, только until false стремно выглядит... Я бы так сделал:

....
writeln('нажмите любую клавишу, чтобы продолжить');
writeln('нажмите esc для выхода');
until readkey=#27;
...
чтоб ctrl break не щелкать каждый раз, но это мелочи


2.Напечатать таблицу соответствия между скоростью резания и изменяемым технологическим параметром (см. задание I)
Изменяемый параметр Диапазон варьирования от 0.5 до 1.5 Приращение 0.1
PROGRAM SOOTVET;

USES CRT;

   VAR  T,N,SPD : real;

BEGIN
clrscr;
N := -1;
T := 0.4;
repeat
N := N+1;
T := T+0.1;

SPD:=350/(exp(ln(75)*0.2)*exp(ln(T)*0.2)*exp(ln(0.3)*0.2));

writeln (N:1:0,'. ',T:1:1,' = ',SPD:4:2);

until T>=1.5;

readln;

END.
правильно?


все верно.


3  как решить?
3.Составить программу определения значения скорости резания при величине изменяющегося технологического параметра (задания I и 2), ближайшей к величине, равной:Величина изменяющегося параметра


Если я все правильно понял, то:
Формула для определения скорости резания у нас есть в задаче 1
Как изменяется параметр, мы знаем из задачи 2

Остается вычислить значение t по формуле


Если я правильно понял, то она эквивалентна формуле


Следовательно, t вычисляется так:

t_n:=0.5;
t:=0;
While t_n<=1.5 do begin
  t:=t+(t_n/10);
  t_n:=t_n+0.1;
end;

Далее, нам надо выбрать ближайшее значение из таблицы, которая была выведена в здаче 2. Первое, что приходит в голову, так это записать разность между t и табличным значением в массив, а потом найти наименьший элемент:
var mas:Array[1..2,1..100] of real;
   n,i,ind:integer;

...

t_n:=0.5;
n:=0;
While t_n<=1.5 do begin
  n:=n+1;
  mas[1,n]:=t_n;
  mas[2,n]:=abs(t_n-t);
  t_n:=t_n+0.1;
end;

ind:=1;
for i:=1 to n do if mas[2,i]<mas[2,ind] then ind:=i;

t:=mas[1,ind];


Остается подсчитать скорость резания по вашим формулам из задачи 1:

SPD:=350/(exp(ln(75)*0.2)*exp(ln(T)*0.2)*exp(ln(0.3)*0.2));
WRITELN (' скорость резания равна ',SPD:4:2,' об/мин ');



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

Всего сообщений: 139 | Присоединился: май 2009 | Отправлено: 23 окт. 2009 2:12 | IP

Отправка ответа:
Имя пользователя   Вы зарегистрировались?
Пароль   Забыли пароль?
Сообщение

Использование HTML запрещено

Использование IkonCode разрешено

Смайлики разрешены

Опции отправки

Добавить подпись?
Получать ответы по e-mail?
Разрешить смайлики в этом сообщении?
Просмотреть сообщение перед отправкой? Да   Нет
 

Переход к теме
<< Назад Вперед >>
Несколько страниц [ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 ]

Форум работает на скрипте © Ikonboard.com