Deska Опубликовано 17 января, 2008 Жалоба Поделиться Опубликовано 17 января, 2008 Всем Привте Памагиет пажалусто с джавай увы незнаю а здача 19 числа :D(( Задание : Разработать клас, каторый реализовует механизм папарнай синхроннай передачи соабщений. На иво аснове написать програму абмена данными между тремя процесами Ват такая фигнея ;) и это нао на джаве Ссылка на комментарий Поделиться на другие сайты Поделиться
Shurr Опубликовано 17 января, 2008 Автор Жалоба Поделиться Опубликовано 17 января, 2008 Deska Если бы ты еще уточнил, что имеет в виду преподаватель под "механизмом попарной синхронной передачи сообщений", и сделал бы это грамотным русским языком - может быть и была бы тебе прожка. Ссылка на комментарий Поделиться на другие сайты Поделиться
helpboy Опубликовано 17 января, 2008 Жалоба Поделиться Опубликовано 17 января, 2008 Здравствуйте! Люди, срочно нужна помощь в Turbo Pascal. Есть программа, готовая, но возникает проблема с удалением лишнего элемента массива. Вот условие: Дан массив a[1..n] и число b. Переставить числа так, чтобы сначала шли элементы меньше a, затем равные a, а потом большие a. Удалить из массива все элементы равные b и a. А вот что пока получилось: PROGRAM BIX; VAR I,N,B:INTEGER; G:REAL; X:ARRAY[1..100] OF REAL; BEGIN WRITELN ('INPUT N'); READ (N); WRITELN('INPUT B'); READ (B); FOR I:=1 TO N DO BEGIN WRITELN ('INPUT X[',I:2,']'); READ (X) END; FOR I:=1 TO B DO BEGIN IF G<X THEN G:=X; WRITELN('G=',G:3:1) END; FOR I:=B TO N DO BEGIN IF X>X THEN G:=X; WRITELN('G=',G:3:1); END; END. Основная пробема - как удалить элемент из списка. Помогите пожалуйста, очень надо! Заранее Вам благодарен. Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 17 января, 2008 Жалоба Поделиться Опубликовано 17 января, 2008 helpboy: Есть программа, готоваяНасчет "готовой" я сильно сомневаюсь. Есть только ввод массива. Кроме того, сделаны вывод последнего из меньших, чем X, элементов первой части массива и последнего из больших, чем X, элементов второй части массива, оба непонятно зачем. Для решения задачи ИМХО самое простое - воспользоваться вспомогательным массивом и перетаскивать туда все, что требуется по условию. Ссылка на комментарий Поделиться на другие сайты Поделиться
Deska Опубликовано 17 января, 2008 Жалоба Поделиться Опубликовано 17 января, 2008 Deska Если бы ты еще уточнил, что имеет в виду преподаватель под "механизмом попарной синхронной передачи сообщений", и сделал бы это грамотным русским языком - может быть и была бы тебе прожка. Это относитса к придмету паралельные вычисления , тоесть как я понял : соабщение это какойта сигнал; тоесть алгаритм каторый выполняет задачу пересылки этих соабщений парами с адинаковым диапазонам вроде так Ссылка на комментарий Поделиться на другие сайты Поделиться
helpboy Опубликовано 18 января, 2008 Жалоба Поделиться Опубликовано 18 января, 2008 Спасибо, я понял. Не могли бы Вы написать программу по этому условию, а то я очень тороплюсь :blush2: Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 18 января, 2008 Жалоба Поделиться Опубликовано 18 января, 2008 helpboy: Я тоже. Плохой довод :blush2: Ссылка на комментарий Поделиться на другие сайты Поделиться
helpboy Опубликовано 18 января, 2008 Жалоба Поделиться Опубликовано 18 января, 2008 Уже не спешу, тем не менее с прогой проблемка. Дело в том, что в программировании у меня выходит так, что исходники схожих программ подгоняю под себя. Вот и получаются "готовые", как верно сказал Тролль, программы. Пока у меня всё тот же вопрос - как сделать эту задачу в Turbo Pascal? Появилась ещё такая ботва, тот же Pascal: Вычислить y=x^n +x^(n-1)+...+x+1+x^(-1)+... с точностью до x^(-6), при x изменяющимся от x0 до xk с шагом dx. Подсчитать среднее геометрическое положительных y и среднее арифметическое отрицательных y. Тут проблемы следующие: 1. Как вычислять среднее геометрическое хоть убей - не помню 2. В Pascal работа со степенью вообще одна сплошная проблема Если я правильно понял условие, то степень будет уменьшаться на еденицу от n до -6, x же изменяется от x0 до xk с шагом dx. Помогите, пожалуйста! Ссылка на комментарий Поделиться на другие сайты Поделиться
Shurr Опубликовано 18 января, 2008 Автор Жалоба Поделиться Опубликовано 18 января, 2008 Это относитса к придмету паралельные вычисления , тоесть как я понял :соабщение это какойта сигнал; тоесть алгаритм каторый выполняет задачу пересылки этих соабщений парами с адинаковым диапазонам вроде так Понятнее не стало. Проблема не в том, что такое сообщения, а какой именно механизм обмена и синхронизации преподаватель имеет в виду (скорее всего он давал это на лекциях, или это есть в методичке). Если ты сможешь объяснить - я смогу перевести это в код. Если нет - на нет и суда нет. Ссылка на комментарий Поделиться на другие сайты Поделиться
helpboy Опубликовано 18 января, 2008 Жалоба Поделиться Опубликовано 18 января, 2008 На всякий случай повторюсь, напишу оба условия задачи в одном сообщении. Язык Turbo Pascal, помогите пожалуйста. 1. Дан массив a[1..n] и число b. Переставить числа так, чтобы сначала шли элементы меньше a, затем равные a, а потом большие a. Удалить из массива все элементы равные b и a. 2. Вычислить y=x^n +x^(n-1)+...+x+1+x^(-1)+... с точностью до x^(-6), при x изменяющимся от x0 до xk с шагом dx. Подсчитать среднее геометрическое положительных y и среднее арифметическое отрицательных y. p.s. Нашёл бы этот форум раньше и сэкономил бы время на лабораторных, сейчас бы курсовую сам писал. Это я к тому, что мои лабораторные задачи здесь уже были! :cool: Извиняюсь, если оффтоп. Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 18 января, 2008 Жалоба Поделиться Опубликовано 18 января, 2008 helpboy: 1) var a,c:array[1..100]of real; i,j,n,b:integer; d:real; begin // тут должен быть ввод n и b // тут должен быть ввод массива a j:=0; d:=a; for i:=1 to n do if a<d then begin inc(j); c[j]:=a end; for i:=1 to n do if a=d then begin inc(j); c[j]:=a end; for i:=1 to n do if a>d then begin inc(j); c[j]:=a end; a:=c; // тут должен быть вывод массива a j:=0; for i:=1 to n do if (a<>d)and(a<>b) then begin inc(j); a[j]:=c end; // тут должен быть вывод массива a длиной j ReadLn end. 2) var xo,xk,x,dx,y,g,a:real; i,j,p,o,n:integer; begin // тут должен быть ввод xo, xk, dx, n a:=0; g:=0; j:=0; p:=0; o:=0; x:=xo; repeat y:=0; for i:=-6 to n do y:=y+exp(i*ln(x)); // тут должен быть вывод x и y a:=a+y; g:=g+ln(y); inc(j); if y>0 then inc(p); id y<0 then inc(o); x:=x+dx; until x>xk+dx/2; if o<>0 then begin a:=a/o; // тут должен быть вывод a end; if p<>0 then begin g:=exp(g/p); // тут должен быть вывод g end; ReadLn end. Ввод-вывод, полагаю, тебе нетрудно написать самому, судя по приведенной тобой программе ты его освоил. Сделай хоть что-нибудь сам, раз уже не спешишь. Ссылка на комментарий Поделиться на другие сайты Поделиться
Deska Опубликовано 18 января, 2008 Жалоба Поделиться Опубликовано 18 января, 2008 Понятнее не стало. Проблема не в том, что такое сообщения, а какой именно механизм обмена и синхронизации преподаватель имеет в виду (скорее всего он давал это на лекциях, или это есть в методичке). Если ты сможешь объяснить - я смогу перевести это в код. Если нет - на нет и суда нет. фигова :blink: лекцый небыло заочь :blink: и методу недавал :rolleyes: Ссылка на комментарий Поделиться на другие сайты Поделиться
Charlie Rat Опубликовано 18 января, 2008 Жалоба Поделиться Опубликовано 18 января, 2008 Пожалуйста, помогите с решением задач. 1. Дан массив чисел размерностью 10 элементов. Написать функцию, которая сортирует массив по возрастанию или по убыванию, в зависимости от третьего параметра функции. Если он равен 1, сортировка идет по убыванию, если 0, то по возрастанию. Первые 2 параметра функции - это массив и его размер, третий параметр по умолчанию равен 1. 2. Дан массив случайных чисел в диапазоне от -20 до +20. Необходимо найти позиции крайних отрицательных элементов (самого левого отрицательного элемента и самого правого отрицательного элемента) и отсортировать элементы, находящиеся между ними. 3. Дан массив из 20 целых чисел со значениями от 1 до 20. Необходимо: написать функцию, разбрасывающую элементы массива произвольным образом; создать случайное число из того же диапазона и найти позицию этого случайного числа в массиве; отсортировать элементы массива, находящиеся слева от найденной позиции по убыванию, а элементы массива, находящиеся справа от найденной позиции по возрастанию. Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 19 января, 2008 Жалоба Поделиться Опубликовано 19 января, 2008 (изменено) Charlie Rat: 1. #include <iostream.h>using namespace std;const int n=10;void sort1(float a[],int k,int r=1){int i,j; float t;if(r==0)for(i=0;i<k;i++)for(j=0;j<k-i-1;j++) if(a[j]>a[j+1]){t=a[j];a[j]=a[j+1];a[j+1]=t;}if(r==1)for(i=0;i<k;i++)for(j=0;j<k-i-1;j++) if(a[j]<a[j+1]){t=a[j];a[j]=a[j+1];a[j+1]=t;}}main(){float b[n]; int i,r;for(i=0;i<n;i++){cout<<"b["<<i<<"]=";cin>>b[i];}cout<<endl<<"r=";cin>>r;sort1(b,n,r);for(i=0;i<n;i++)cout<<endl<<"b["<<i<<"]="<<b[i]; return 0;} 2. #include <iostream.h>using namespace std;const int l=100;void sort2(float a[],int d1,int d2){int i,j;float t;for(i=d1;i<=d2;i++)for(j=d1;j<d2+d1-i;j++) if(a[j]>a[j+1]){t=a[j];a[j]=a[j+1];a[j+1]=t;}}main(){float b[l]; int i,n,d1,d2;cout<<endl<<"n=";cin>>n;for(i=0;i<n;i++){cout<<"b["<<i<<"]=";cin>>b[i];}for(i=0;i<n;i++)if(b[i]<0)d2=i;for(i=n-1;i>=0;i--)if(b[i]<0)d1=i;sort2(b,d1+1,d2-1);for(i=0;i<n;i++)cout<<endl<<"b["<<i<<"]="<<b[i]; return 0;} 3. #include <iostream.h>#include <stdlib.h> #include <time.h> using namespace std;const int n=20;void sort3(int a[],int d1,int d2){int i,j;int t;for(i=d1;i<=d2;i++)for(j=d1;j<d2+d1-i;j++) if(a[j]<a[j+1]){t=a[j];a[j]=a[j+1];a[j+1]=t;}}void sort4(int a[],int d1,int d2){int i,j;int t;for(i=d1;i<=d2;i++)for(j=d1;j<d2+d1-i;j++) if(a[j]>a[j+1]){t=a[j];a[j]=a[j+1];a[j+1]=t;}}void mixture(int a[]) //algorithm Fisher-Yates{int j,k,r; j=n-1;do{k=rand()%n;r=a[j];a[j]=a[k];a[k]=r;}while(j--);}main(){int b[n],p,i,d; for(i=0;i<n;i++)b[i]=i+1; srand(time(NULL)); mixture(b);p=rand()%n+1; cout<<endl<<"p="<<p;for(i=0;i<n;i++)if(b[i]==p)d=i;sort3(b,0,d-1); sort4(b,d+1,n-1);for(i=0;i<n;i++)cout<<endl<<"b["<<i<<"]="<<b[i]; return 0;} Изменено 19 января, 2008 пользователем Тролль Ссылка на комментарий Поделиться на другие сайты Поделиться
helpboy Опубликовано 19 января, 2008 Жалоба Поделиться Опубликовано 19 января, 2008 Тролль, спасибо большое! :) Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 20 января, 2008 Жалоба Поделиться Опубликовано 20 января, 2008 Помогите, пожалуста, с задачками по С++, тема ФУНКЦИИ. Вот первая Написать функцию, которая получает в качестве аргументов целое положительное число и систему счисления, в которую это число должно переводится (системы счисления от 2 до 36). Например, при переводе числа 27 в систему счисления 16 должно получиться 1B; 13 в 5-ю - 23; 35 в 18-ю - 1H. Вот вторая Игра «кубики». Условие: имеется два игральных кубика со значениями от 1 до 6. Игра происходит с компьютером, кубики бросаются поочередно. Побеждает тот, у кого сумма выпавших очков по итогам пяти бросков больше. Предусмотрите возможность получения первого хода человеком или компьютером. Кубики отображаются с помощью символов. В конце игры необходимо выводить среднюю сумму по броскам для обоих участников. Вот третья Написать функцию, которая принимает в качестве параметров вещественное число и количество знаков после десятичной точки, которые должны остаться. Задачей функции является округление вышеуказанного вещественного числа с заданной точностью. Заранее спасибо за помощь. 1) #include <iostream.h>#include <stdio.h>#include <string.h>using namespace std;main(){long a; short b; string s="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ",r="";cout<<"Number=";cin>>a;cout<<"Base=";cin>>b;do{r=s[a%b]+r;a/=b;}while(a);cout<<r<<endl;getchar();getchar();} 2) В кости не играю :cool: . Если серьезнее, там почти всё - оформление, вопросы и ответы, совершенно неинтересно. Как брать случайные числа в C++: p=rand()%6+1; выдаст случайное число от 1 до 6, чтобы числа при каждом запуске программы были разные, в начале ее надо выполнить установку начального значения генератора случайных сисел по времени оператором srand(time(NULL)); , а для этого надо включить в программу заголовочный файл строкой #include <time.h> Вся математика в задаче - вычислить сумму и среднее арифметическое очков за пять бросков, надеюсь, это проблемы не составит. 3) #include <stdio.h>#include <math.h>#include <iostream.h>#include <iomanip.h>main(){double a,b; int k; cout<<"Number=";cin>>a;cout<<"Fixed=";cin>>k;b=pow(10.,k); a=floor(b*a+.5)/b;cout.precision(16); cout<<endl<<a<<endl;getchar();getchar();} Ссылка на комментарий Поделиться на другие сайты Поделиться
Ane4ka Опубликовано 20 января, 2008 Жалоба Поделиться Опубликовано 20 января, 2008 Троль! Огромное спасибо. Очень помогли. :cool: Ссылка на комментарий Поделиться на другие сайты Поделиться
Charlie Rat Опубликовано 21 января, 2008 Жалоба Поделиться Опубликовано 21 января, 2008 Большое спасибо! :bye1: Ссылка на комментарий Поделиться на другие сайты Поделиться
Lietto Опубликовано 23 января, 2008 Жалоба Поделиться Опубликовано 23 января, 2008 Всем привет! Мне нужна помощь! Нужно написать програмку на Паскале: Прямоугольник вращаеться вокруг своего центра и при этом двигаеться по синусоиде. Послезавтра сдача, а меня заклинило - ничего не получеться. Кто может помогите! Плыыыыыыыыз! :) Может у кого-то есть хотя бы типа такой готовая? Ссылка на комментарий Поделиться на другие сайты Поделиться
Charlie Rat Опубликовано 25 января, 2008 Жалоба Поделиться Опубликовано 25 января, 2008 Помогите решить задачу. Есть древняя притча. В одном из храмов есть три стержня. На каждом 64 круга. Внизу самый большой, вверху самый маленький. Монахи перекладывают круги между собой. Условие: Необходимо решить задачу методом рекурсии. За один ход можно переложить только один круг. Нельзя ложить больший круг на меньший. В результате должно быть переложены все круги с первого стержня на третий. Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 25 января, 2008 Жалоба Поделиться Опубликовано 25 января, 2008 (изменено) Charlie Rat: В одном из храмов есть три стержня. На каждом 64 круга. Внизу самый большой, вверху самый маленький. Монахи перекладывают круги между собой.Притчей это не назовешь, но легенда или миф, в окончательном виде созданный, правда, одним французским математиком в 19-м веке, существует. Надо еще добавить, что, по легенде, когда монахи закончат перекладывание дисков, придет конец света. С меньшим числом дисков это одна из известнейших игр в мире. Только Яндекс приносит ссылки на 107508 страниц, где упоминается эта игра. Называется она Ханойские башни. Набери в Яндексе эти магические слова ;) и слова рекурсия и Pascal - и найдешь всё, что тебе нужно :) . P.S. Да, не обратил внимания. Во первых, условие сформулировано неправильно. Если на всех трех стержнях круги лежат указанным в условии образом, монахи остались без дела - задача с самого начала невыполнима :) . На самом деле круги должны первоначально лежать только на одном столбике. Кроме того, предлагается решить задачу именно с 64 дисками. Стоит ли начинать решение, если на него, во всяком случае на моем компьютере, предлагаемым методом уйдет несколько миллионов лет? :) Кстати, есть фантастический рассказ на эту тему. Там, по местным законам, приговоренному к смерти разрешалось перед смертью сыграть в одну игру по его выбору. Смертник выбрал "Ханойские башни"... :) Изменено 26 января, 2008 пользователем Тролль Ссылка на комментарий Поделиться на другие сайты Поделиться
Антохен Опубликовано 27 января, 2008 Жалоба Поделиться Опубликовано 27 января, 2008 Приветствую всех. Необходимо решить задачу на Паскале - решил бы сам, но не совсем получается. Условие задачи: Даны два текстовых файла - один на русском языке в "Блокноте", другой - зашифрованный, тоже в "Блокноте". Требуется методом частотных характеристик посчитать количество букв в первом файле, и во втором(символов). Потом подменить второй массив на первый. Т.е. посчитать количество буквы "а" на 1000 символов, буквы "б", и т.д. Вот что сам написал: Program crypting;const n=100;Type alph=record symb:char; qua:longint; end; crypt=array[1..n] of alph;vaR i:integer; f1,f2:text; s:char; st:string; cr1,cr2:crypt;Procedure Count(var f:text; var cr:crypt);var er:boolean;beginWhile not eof(f) dowhile not eoln(f) dobeginread(f,s);If s=' ' then inc(cr[n].qua) else{case symbol of',' , '.' , ')' , '(' , '"' , '-' , '?' , '!':er:=true;}If (s=',')or (s='.')or (s=')')or (s='(')or (s='"')or (s='-')or (s='?')or (s='!') then inc(cr[n-1].qua)else begini:=1;repeat;If cr[i].symb=' ' then cr[i].symb:=s;If s=cr[i].symb then inc(cr[i].qua);inc(i);until (cr[i-1].symb=s)or(i=n);writeln(cr[i-1].symb,' ',cr[i-1].qua);readln;end end end;Procedure Sort(var cr:crypt);beginend;beginAssign(f1,'out.txt');Reset(f1);Count(f1,cr1);Assign(f2,'in.txt');Reset(f2);Count(f2,cr2);Close(f1);Close(f2);readln;end. Заранее спасибо за помощь. P.S. Желательно написать программу без всяких обращений к оперативной памяти, unit'am и проч. Ссылка на комментарий Поделиться на другие сайты Поделиться
Антохен Опубликовано 27 января, 2008 Жалоба Поделиться Опубликовано 27 января, 2008 Да, чуть не забыл. Заглавные буквы считаются за прописные, ё=е, ъ=ь, знаки препинания не считаются. Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 28 января, 2008 Жалоба Поделиться Опубликовано 28 января, 2008 Антохен: Заглавные буквы считаются за прописныеРазвеселил... :doh: "Заглавная буква (книжн.) - то же, что большая или прописная буква" (Толковый словарь русского языка Ушакова) Впрочем, Желательно написать программу без всяких обращений к оперативной памяти - тоже неплохо. Это эквивалентно тому, чтобы написать "выполнялась без компьютера". Любая программа хранится в оперативной памяти, а ее выполнение связано с обращениями к оперативной памяти. А по сути дела - условие непонятно. Во втором файле текст - на русском языке? Почему в первом файле упоминаются буквы, а во втором - символы? Что значит: подменить первый массив на второй? Это мы запросто: A:=B; Выводить в задаче, что, ничего не надо? Тогда программа begin end. будет ничем не хуже... Ссылка на комментарий Поделиться на другие сайты Поделиться
Антохен Опубликовано 28 января, 2008 Жалоба Поделиться Опубликовано 28 января, 2008 Впрочем, - тоже неплохо. Это эквивалентно тому, чтобы написать "выполнялась без компьютера". Любая программа хранится в оперативной памяти, а ее выполнение связано с обращениями к оперативной памяти. Я имею в виду, чтобы не было всяких строчек типа $B800 что - то там. А по сути дела - условие непонятно. Во втором файле текст - на русском языке? Почему в первом файле упоминаются буквы, а во втором - символы? Что значит: подменить первый массив на второй? Это мы запросто: A:=B; Выводить в задаче, что, ничего не надо? Тогда программа begin end. будет ничем не хуже... Дан текст на русском языке: Я приближался к месту моего назначения. Вокруг меня, прижимаясь к самой дороге, зеленел лес, изредка уступая место полянам, поросшим желтой осокой. Солнце садилось уже который час, все никак не могло сесть и висело низко над горизонтом. Машина катилась по узкой дороге, засыпанной хрустящим гравием. Крупные камни я пускал под колесо, и каждый раз в багажнике лязгали и громыхали пустые канистры. Справа из леса вышли двое, ступили на обочину и остановились, глядя в мою сторону. Один из них поднял руку. Я сбросил газ, их рассматривая. Это были, как мне показалось, охотники, молодые люди, может быть, немного старше меня. Их лица понравились мне, и я остановился. Дан текст на нерусском языке: <{< } ><~$. Ш^\$$, ><>}, >}> {\}>#Т $} $Ш{}#\ # $$$ Ш}$^>#, ## ^$<{\$$ТТ $\<^\^{\$$ }# Ш, %\{Т #$\{\} > #$#, ^^\$$} > ~\^\>< # $\>{Х #^$Х. Т ї ~ШХ ><~}, $<$, }> >}}, #\ , ~\ ><~}, - $> # ^\{@\$$ {ї}$#^}$$< $\{^$< #\<. $<$ <\ Х# ##, % >{}$\ \{\, {}}. < <{} $\ ШХ $\{^$ #\Х ^ ШХ~$ Х\ ^}, # $ $\ <\ Х#. \ Ш\\ $ $\ <\ {}}. $ > ^%{#$#}, }%#$} # \^^}. # \ $\ \$\\ \< } ><~$. Это только фрагменты. На самом деле там 40 Кб текста в Блокноте. Требуется посчитать количество всех символов в первом и во втором, и заменить второй на первый. И замененный вариант сохранить в другом файле Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать учетную запись
Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти