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
|
|
|