rutra Опубликовано 24 февраля, 2009 Жалоба Поделиться Опубликовано 24 февраля, 2009 Из методички ( правда для Бейсика), но алгоритмическая сущность одинаково: Задача: "Рассчитать сумму бесконечно убывающего ряда... и т.д.Здесь имеет неявный циклический процесс, так как не знаем сумму скольких слагаемых придется рассчитывать и выход из цикла не связан со значением перменной к. Другим словом в этом циклическом процессе нет счетчика цикла. Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 24 февраля, 2009 Жалоба Поделиться Опубликовано 24 февраля, 2009 (изменено) rutra: Я уже заметил, что препод у тебя оригинальный. По моему, более явного цикла, чем ПОКА то-то ДЕЛАТЬ что-то, еще не придумано. Боюсь, что моя догадка о том, что препод будет применять иероглифы, оправдалась. Посчитать N, зная y, труда не представляет. Но причем тут циклы? Ладно, как известно, сумасшествие обычно основано на каких-то событиях реального мира. То есть имеет какую-то методу (или методичку :)). Например, можно вообразить себя Наполеоном или букашкой, но трудно чем-то, не имеющим аналогов в реальности. Итак, предположим, что имеется в виду решение нелинейного уравнения методом итераций по Ньютону. Тогда N - это искаженный замутненным сознанием y. Тогда var x,xn,y,a,b:real;beginwrite('a? '); read(a); write('b? '); readln(b);x:=0; xn:=1;while 1e6*abs(x-xn)>abs(x)+abs(xn) do begin x:=xn; if x>=0 then y:=16*a-sqrt(x)/(a+b) else y:=1/a+2*x*b; xn:=y*y-8 end;writeln('x=',x); readln end. a и b тут - это коэффициенты решаемого уравнения, которые вводим, взяв с потолка. Например, 1 и 1. P.S. Немного изменил запись условия в цикле для большей компактности. Изменено 24 февраля, 2009 пользователем Тролль Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
rutra Опубликовано 24 февраля, 2009 Жалоба Поделиться Опубликовано 24 февраля, 2009 Не знаю правильно или нет. Но все равно благодарю за помощь. Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Nata6enka Опубликовано 28 февраля, 2009 Жалоба Поделиться Опубликовано 28 февраля, 2009 Здравствуйте. Задали программу, никак разобраться не могу. По мере возможности, помогите пожалуйста. Заранее извиняюсь в возможных ошибках - на форуме впервые. Описать структуру с именем Order, содержащую следующие поля: расчетный счет плательщика, расчетный счет получателя, перечисляемая сумма. Написать программу, выполняющую ввод с клавиатуры данных в массив Payments, состоящий из 15 элементов типа Order. Упорядочить записи по расчетным счетам плательщиков. Вывести на экран информацию о сумме, снятой с расчетного счета плательщика, введенного с клавиатуры. Если такого расчетного счета нет, то вывести соответствующее сообщение. Поиск плательщика, введенного с клавиатуры оформить в виде отдельной функции. Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
provirt Опубликовано 28 февраля, 2009 Жалоба Поделиться Опубликовано 28 февраля, 2009 Здравствуйте. Помогите пожалуйста найти ошибки в куске в кода...код написан на Delphi 7 vara,b,c:integer;begina:=56; b:=88; c:=0;while c<87if mod(a,12)=0 and mod(b,20)=0then begin c:=c+1;end;a:=a+1; b:=b+1;end;вывод (a)......... Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 1 марта, 2009 Жалоба Поделиться Опубликовано 1 марта, 2009 (изменено) provirt: a) перед телом цикла while должно стоять do б) функции mod в Паскале и Delphi нет. Есть операция mod в) учитывая то, что begin и end ходят парами, на последнем end программа должна была закончиться. "вывод (a)" в тексте находится уже после конца программы. Хотя все это должен был сказать уже компилятор. Nata6enka: Язык - Паскаль? const n=15;type tOrder=record Pl,Pol,Sum:longint end;var Payments:array[1..n]of tOrder; T:tOrder; Index,i,j:integer; Pl:longint;function Ind(Pl:longint):integer; var i:integer; begin Ind:=0; for i:=1 to 15 do if Pl=Payments[i].Pl then Ind:=i end;beginfor i:=1 to n do with Payments[i] do begin Write(i:2,' Pl, Pol, Summa ? '); ReadLn(Pl,Pol,Sum) end;for i:=1 to n do for j:=1 to n-i do if Payments[j].Pl>Payments[j+1].Pl then begin T:=Payments[j]; Payments[j]:=Payments[j+1]; Payments[j+1]:=T end; Write('Pl ? '); Readln(Pl); Index:=Ind(Pl);if Index<>0 then Writeln('Summa=',Payments[index].Sum) else WriteLn('Pl ',Pl,' does not exist');ReadLnend. Оформлением ввода-вывода не занимался, подсказки надо сделать более гуманными - "Номер расчетного счета плательщика" вместо "Pl" или как-нибудь иначе более понятно. Для каждой записи номер плательщика, номер получателя и сумма вводятся через пробел, в конце ввода записи нажимается Enter. Принято, что номера счетов и суммы - целые числа до 9 цифр. Если надо суммы вводить в рублях и копейках (долларах и центах), то при вводе и выводе надо переводить в копейки и обратно. Если 9 цифр нехватает (например, для зимбавийских долларов, см. ниже :)), то можно вместо типа longint использовать тип comp, в нем можно хранить до 19 цифр. "Упорядочить записи по расчетным счетам плательщиков" сделано, хотя не видно зачем. Все равно для поиска перебираются все записи подряд. Упорядочение имело бы смысл, если бы записей было много тысяч, тогда можно было бы применить более экономные методы поиска номера счета, чем простой перебор. Кстати, для проверки, чтобы не вводить много данных, советую заменить значение константы n на 3 - тогда в массиве будут всего три записи. P.S. фотография купюры: Изменено 1 марта, 2009 пользователем Тролль Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
provirt Опубликовано 1 марта, 2009 Жалоба Поделиться Опубликовано 1 марта, 2009 Тролль А как тогда это записать...? б) функции mod в Паскале и Delphi нет. Есть операция mod Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 1 марта, 2009 Жалоба Поделиться Опубликовано 1 марта, 2009 provirt: if (a mod 12 = 0) and (b mod 20 = 0) then ... Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Nata6enka Опубликовано 1 марта, 2009 Жалоба Поделиться Опубликовано 1 марта, 2009 provirt: a) перед телом цикла while должно стоять do б) функции mod в Паскале и Delphi нет. Есть операция mod в) учитывая то, что begin и end ходят парами, на последнем end программа должна была закончиться. "вывод (a)" в тексте находится уже после конца программы. Хотя все это должен был сказать уже компилятор. Nata6enka: Язык - Паскаль? const n=15;type tOrder=record Pl,Pol,Sum:longint end;var Payments:array[1..n]of tOrder; T:tOrder; Index,i,j:integer; Pl:longint;function Ind(Pl:longint):integer; var i:integer; begin Ind:=0; for i:=1 to 15 do if Pl=Payments[i].Pl then Ind:=i end;beginfor i:=1 to n do with Payments[i] do begin Write(i:2,' Pl, Pol, Summa ? '); ReadLn(Pl,Pol,Sum) end;for i:=1 to n do for j:=1 to n-i do if Payments[j].Pl>Payments[j+1].Pl then begin T:=Payments[j]; Payments[j]:=Payments[j+1]; Payments[j+1]:=T end; Write('Pl ? '); Readln(Pl); Index:=Ind(Pl);if Index<>0 then Writeln('Summa=',Payments[index].Sum) else WriteLn('Pl ',Pl,' does not exist');ReadLnend. Оформлением ввода-вывода не занимался, подсказки надо сделать более гуманными - "Номер расчетного счета плательщика" вместо "Pl" или как-нибудь иначе более понятно. Для каждой записи номер плательщика, номер получателя и сумма вводятся через пробел, в конце ввода записи нажимается Enter. Принято, что номера счетов и суммы - целые числа до 9 цифр. Если надо суммы вводить в рублях и копейках (долларах и центах), то при вводе и выводе надо переводить в копейки и обратно. Если 9 цифр нехватает (например, для зимбавийских долларов, см. ниже :)), то можно вместо типа longint использовать тип comp, в нем можно хранить до 19 цифр. "Упорядочить записи по расчетным счетам плательщиков" сделано, хотя не видно зачем. Все равно для поиска перебираются все записи подряд. Упорядочение имело бы смысл, если бы записей было много тысяч, тогда можно было бы применить более экономные методы поиска номера счета, чем простой перебор. Кстати, для проверки, чтобы не вводить много данных, советую заменить значение константы n на 3 - тогда в массиве будут всего три записи. P.S. фотография купюры: Нет.... :) Извиняюсь, что сразу не указала.. с++ :) Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
provirt Опубликовано 1 марта, 2009 Жалоба Поделиться Опубликовано 1 марта, 2009 Тролль спасибо...! Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
provirt Опубликовано 1 марта, 2009 Жалоба Поделиться Опубликовано 1 марта, 2009 Помогите пожалуйста написать еще одну программу на Delphi7(ну или на крайний случай на Паскале): к массиву x=(3,7,1,2,6,8,4,5) применяется алгоритм сортировки: for j:=2 to n doi:=j-1;y:=x[j];while y>x[i] and i>0;x[i+1]:=x[i];i:=i-1;end;x[i+1]:=y;end; Вывести - сколько раз в процессе сортировки изменяются значения элементов массива? P.S в коде возможны ошибки так как сам препод...пишет не правильно... заранее благодарен за любую помощь....(самому мне не разобрать ) Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 1 марта, 2009 Жалоба Поделиться Опубликовано 1 марта, 2009 provirt: Прости, но это не программа сортировки. Это абсурд. Тут нечего править. Для начала надо понять, что же некто имел в виду, когда принялся барабанить по клавишам. Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 1 марта, 2009 Жалоба Поделиться Опубликовано 1 марта, 2009 (изменено) Nata6enka: Сначала - не надо цитировать простынями. Цитаты есть смысл использовать, только если отвечаешь на конкретные фразы, и только их и цитировать. Второе - C++'ы тоже бывают разные. Поэтому для другого компилятора может потребоваться небольшая переделка программы. В данном случае я использовал Borland C++: #include <iostream.h>const int n=15;struct tOrder{long Pl,Pol,Sum;}; tOrder Payments[n],T;int Ind(long Pl) {int k=-1; for(int i=0;i<n;i++)if(Pl==Payments[i].Pl)k=i; return k;}int main(){int Index,i,j; long Pl; for(i=0;i<n;i++){cout<<endl<<i+1<<" Pl, Pol, Summa ? ";cin>>Payments[i].Pl>>Payments[i].Pol>>Payments[i].Sum;} for(i=0;i<n;i++)for(j=0;j<n-i-1;j++)if(Payments[j].Pl>Payments[j+1].Pl){T=Payments[j]; Payments[j]=Payments[j+1]; Payments[j+1]=T;} cout<<endl<<"Pl ? "; cin>>Pl; Index=Ind(Pl); if(Index>=0)cout<<endl<<"Summa="<<Payments[index].Sum<<endl;else cout<<endl<<"Pl "<<Pl<<" does not exist"<<endl; return 0;} Изменено 1 марта, 2009 пользователем Тролль Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Nata6enka Опубликовано 2 марта, 2009 Жалоба Поделиться Опубликовано 2 марта, 2009 Тролль А вот что эта строчка обозначает? Я что-то торможу.. :g: {int k=-1; for(int i=0;i<n;i++)if(Pl==Payments.Pl)k=i; return k;} Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 2 марта, 2009 Жалоба Поделиться Опубликовано 2 марта, 2009 Nata6enka: Поиск плательщика, введенного с клавиатуры оформить в виде отдельной функции.Это она и есть: int Ind(long Pl) {int k=-1; for(int i=0;i<n;i++)if(Pl==Payments.Pl)k=i; return k;} Функция возвращает -1, если расчетный счет плательщика (Pl) в записях массива Payments не найден или индекс записи с этим плательщиком в массиве, если плательщик найден. Сначала устанавливаем внутреннюю переменную функции k равной -1. Если запись с номером Pl найдется в массиве, то k присвоится индекс этой записи, если нет, k останется равным -1. А оператор return k присвоит значение k имени функции Ind. Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
provirt Опубликовано 2 марта, 2009 Жалоба Поделиться Опубликовано 2 марта, 2009 Тролль В первоначальном виде задание выглядело так: к массиву x=(3,7,1,2,6,8,4,5) применяется алгоритм сортировки: начало цикла для j от 2 до ni:=j-1y:=x[j];начало цикла пока y>x[i] и i>0x[i+1]:=x[i]i:=i-1конец циклаx[i+1]:=yконец цикла собственно так и было записано.... Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 2 марта, 2009 Жалоба Поделиться Опубликовано 2 марта, 2009 (изменено) provirt: Ну, в первоначальном виде это уже (или еще) на что-то похоже. Законченная программа будет выглядеть так: const n=8; x:array[1..n]of integer=(3,7,1,2,6,8,4,5); var i,j,y:integer;beginfor j:=2 to n do begin i:=j-1; y:=x[j]; while (y>x[i])and(i>0) do begin x[i+1]:=x[i]; i:=i-1 end; x[i+1]:=y end;for i:=1 to n do write(x[i]:5); readlnend. P.S. Да, я вывел только результаты сортировки, сколько раз что менялось, не выводил. Если выводить еще и число присваиваний элементам массива, то программа будет выглядеть так: const n=8; x:array[1..8]of integer=(3,7,1,2,6,8,4,5); var i,j,y,k:integer;begink:=0;for j:=2 to n do begin i:=j-1; y:=x[j]; while(y>x[i])and(i>0)do begin x[i+1]:=x[i]; inc(k); i:=i-1 end; x[i+1]:=y; inc(k) end;writeln('k=',k); for i:=1 to n do write(x[i]:3); readlnend. Изменено 2 марта, 2009 пользователем Тролль Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Nata6enka Опубликовано 3 марта, 2009 Жалоба Поделиться Опубликовано 3 марта, 2009 Спасибо большое за помощь) Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
core Опубликовано 5 марта, 2009 Жалоба Поделиться Опубликовано 5 марта, 2009 Голова сейчас опухнет. Кто придумал ети списки? Суть задания: Создать двусвязный список и заполнить его n-ым количеством чисел типу int. Знаком с однозвязными списками но по логике вещей двусвязный наверное еще имеет поле для адреса предыдущего елемента? Тогда для чего в етом задании двусвязный список? для научности метода? Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 5 марта, 2009 Жалоба Поделиться Опубликовано 5 марта, 2009 core: Знаком с однозвязными списками но по логике вещей двусвязный наверное еще имеет поле для адреса предыдущего елемента? Точно. В принципе мало чем отличается от односвязного. Наличие двух указателей удобно при исключении элемента, кроме того, позволяет просматривать список и в обратном направлении. Тогда для чего в етом задании двусвязный список?Для освоения. Кто придумал ети списки? Списки придуманы Ньюеллом, Шоу и Симоном - если тебе от этого будет легче :blink: . Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
core Опубликовано 5 марта, 2009 Жалоба Поделиться Опубликовано 5 марта, 2009 спасибо. А какой спец клас отвечает за такие списки? и если несложно, то пример решения задания. Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 5 марта, 2009 Жалоба Поделиться Опубликовано 5 марта, 2009 (изменено) core: Встроенного в C++ класса списков нет. А пользовательские библиотеки классов зависят от того, какой C++, надо смотреть справку по прилагаемым библиотекам. если несложно, то пример решения задания.Создать двусвязный список и заполнить его n-ым количеством чисел типу int. #include <iostream.h>#include <stdio.h>struct TList{int Data; TList *Prev,*Next;};int main(){int i,n,d; TList *begin,*end,*cur,*tmp;cout<<"\nHow many numbers? "; cin>>n;cout<<"\n1 Number? "; cin>>d;cur=new TList(); cur->Data=d; cur->Prev=cur->Next=NULL; begin=end=cur;for(int i=2;i<=n;i++){cout<<i<<" Number? "; cin>>d; tmp=new TList(); tmp->Data=d; cur->Next=tmp; tmp->Prev=cur; tmp->Next=NULL; cur=tmp;}end=cur; cout<<endl;for(cur=begin;cur!=end->Next;cur=cur->Next)cout<<cur->Data<<endl; cout<<endl;for(cur=end;cur!=begin->Prev;cur=cur->Prev)cout<<cur->Data<<endl;getchar(); getchar(); return 0;} Запрашивает, сколько чисел ввести, затем сами эти числа, по мере ввода создает и заполняет двусвязный список, затем пробегает по нему вперед и назад, каждый раз распечатывая элементы списка. Проверил на Dev-C++. P.S. Заметил у себя ошибку: в команде tmp->Data=i должно было быть не i, а d. Соответственно подправил букву. Изменено 15 марта, 2009 пользователем Тролль Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Гость Ragnos Опубликовано 9 марта, 2009 Жалоба Поделиться Опубликовано 9 марта, 2009 Помогите плиз с такой программмой Выясните, сколько раз в заданном слове встречается каждый символ Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 9 марта, 2009 Жалоба Поделиться Опубликовано 9 марта, 2009 (изменено) Ragnos: var c:char; i,m:byte; s:string;begin Write('Слово? '); Readln(s); for c:='A' to 'я' do begin m:=0; for i:=1 to length(s) do if s[i]=c then inc(m);if m<>0 then WriteLn(c,' : ',m) end; Readln end. Изменено 9 марта, 2009 пользователем Тролль Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Mike497 Опубликовано 10 марта, 2009 Жалоба Поделиться Опубликовано 10 марта, 2009 доброго времени суток вам, Тролль!) опять у меня задачка на паскаль... не поможете?! : В библиотеке в читательском билете есть данные о человеке фамилия, записываются данные о книге (автор, название, дата, когда книгу брали читать). Определить, кто брал книгу Ефремова "Таис Афинская" 15.05.90, сколько читателей брали книги А.С.Пушкина, количество книг А.Дюма и какие есть в библиотеке, кто и какие книги брали 21.04.90 зарнее благодарен)) Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.