2 xanser 1-я (пишу без лабуды) (бью прямо тут без проверки) Code: int i,j,fl; char str[]="jhb sdjcnweofnlm wefoi-pokas lknlqkmwdqw"; for(i=0;*(str+i)!=0;i++) { for(j=0,fl=0;*(str+j)!=0 && fl==0;j++) if(*(str+i)==*(str+j) && i!=j) fl=0; if(fl==0) printf("%c",*(str+i)); } правильно ли я понял что компонентами называются лексемы разделенные пробелом запятой точкой вопросительным и восклицательным знаками а так же переводом строки? если ДА , то 2-я (пишу без лабуды) (бью прямо тут без проверки) P.S. проверка на простое по Кнут-у Code: int havegotfield(char *sourcestr,char *deststr,int nelement,char *delimiterStr,int mode) { int i; int mcnt; char tstr[300]; int flrez=0; int pstr=0; int prepfl; *(deststr)=0; if(strchr(delimiterStr,*(sourcestr))!=0) prepfl=0; else prepfl=1; for(i=0,mcnt=1,flrez=0,prepfl=0;*(sourcestr+i)!=0;i++) { if(strchr(delimiterStr,*(sourcestr+i))!=NULL) { if(mode==0) { if(prepfl!=0) { if(mcnt<=nelement) mcnt++; else break; } prepfl=0; } else { if(mcnt<=nelement) mcnt++; else { flrez=1; break; } } } else { if(mcnt==nelement) { *(deststr+pstr)=*(sourcestr+i); pstr++; flrez=1; } prepfl=1; } } *(deststr+pstr)=0; return flrez; } unsigned long numb; int simpl[10]={2,3,5,7,11,13,17,19,23,29}; long test_simple(unsigned long num) { int i; unsigned long p,j; long rez; if(num<100) { for(i=0;i<10;i++) if((numb/simpl[i])*simpl[i]==numb && numb!=simpl[i]) return -2; for(i=0;i<10;i++) if((num/simpl[i])*simpl[i]==num && num!=simpl[i]) return -1; return num; } else { p=sqrt(num); for(j=0;j<p-sqrt(p);j++) { rez=test_simple(p-j); if(rez!=-1) { if(rez==-2) return -2; if((numb/rez)*rez==numb) { return -1; } } } return num; } } int main() { char str[1500],buf[10],dstr[100]; int ind=0; int kolvo=0; int i,j,k; unsigned long n; CFile f; CFileException e; char path[300]; printf("\r\nInput file path:"); scanf("%s",path); if(f.Open(path,CFile::modeRead,&e)) { while(f.Read(buf,1)==1) { switch(*buf) { case 0x0d: *(str+ind)=0; break; case 0x0a: for(i=1;havegotfield(str,dstr,i," .,!?-+",1)!=0;i++) { n=strtoul(str,0,10); n=numb=sqrt(n); l=test_simple(n); if(!(l==-1 || l==-2)) printf("\r\n-%s-",dstr); \\ вывод но можно и посчитать типа kolvo++; \\ } ind=0; default: *(str+ind)=*(buf); ind++; } } f.Close(); } }
курсяк!!!помогите плиз.вот тема: На базе МП разработать измеритель мощностей двух инфранизкочастотных сигналов, поступающих синхронно от двух АЦП в виде восьмиразрядных прямых кодов со скоростью 100 отсчетов в секунду, объем выборки 1024 отсчета. С выдачей результата в двоичном коде целой и дробной частей во внешний регистр. впринципе есть готовая прога,нужно либо к ней комменты написать,либо написать заново.контакт 65000000 в ассемблере нужно всё это
Помогите исправить ошибки..Нужно инвертировать матрицу относительно побочной диагонали... Язык c. Code: #include <stdio.h> #include <stdlib.h> #include <time.h> #define RND (rand()%100-50) int vvod_hand(int strok, int stolb,int massiv[50][50]) {int i; int j;char buffer[100]; {for(i=1; i<=strok; i++) {for(j=1; j<=stolb; j++) {printf("massiv[%d][%d]= ",i,j); fgets(buffer,10,stdin); massiv[i][j]=atoi(buffer); }}} } int vvod_rand(int strok, int stolb,int massiv[50][50]) {int i; int j; {for(i=1; i<=strok; i++) for(j=1; j<=stolb; j++) massiv[i][j]=rand()%50; } } int vivod(int strok, int stolb,int massiv[50][50]) {int i; int j; {for(i=1; i<=strok; i++) { {for(j=1; j<=stolb; j++) printf("%d ",massiv[i][j]); } printf("\n");} } } main(int argc, char*argv[]) {int a, b, i, x, kol_vo, strok, stolb, j, p; int massiv[50][50]; char buffer[100]; srand (time (NULL)); if (argc<3) {puts("programma vvivodit massiv"); puts("vvedite ./labor4 kol_vo strok kol_vo stolbcov sposob vvoda <klava/rand>"); } strok=atoi(argv[1]); if (strok<1 || strok>50) {puts("kol-vo strok >1 no <100"); getchar(); exit(0);} stolb=atoi(argv[2]); if (stolb<1 || stolb>50) {puts("kol-vo stolbcov >1 no <100"); getchar(); exit(0);} if(strcmp(argv[3], "klava")==0) vvod_hand(strok,stolb,massiv); else vvod_rand(strok,stolb,massiv); printf("\n"); printf("Massiv: \n"); vivod(strok,stolb,massiv); //invertirovanie for(i=1;i<=strok/2;i++) { for(j=1;j<=stolb/2;j++) { if(j<stolb-i-1)//tolko elementy nad pobochnoy diagonalyu massiv[i][j] = massiv[strok][stolb-j];//i menyaem } } //vyvodim na ekran printf("Inverted matrix: \n"); for(i=1;i<=strok;i++) { for(j=1;j<=stolb;j++) { printf("%i ",massiv[i][j]); } printf("\n"); } getchar(); exit(0); }
Странный код int vvod_hand(int strok, int stolb,int massiv[50][50]) массив передается указателем(адресом на массив) .... соответственно не нужно городить а писать как ЕСТЬ int vvod_hand(int strok, int stolb,int *massiv) поймите прямую связь между указателем и массивом внутри функции где я имею право использовать massiv[j] дав входные параметры как указал выше .. обычно тут люди испытывают страх!!! все это относится ко всем функциям!!! далее везде не берется во внимание что ИНДЕКС МАССИВА НАЧИНАЕТСЯ С 0(НУЛЯ)!!! пример int A[5] возможные обращения A[0] A[1] A[2] A[3] A[4] обмена как такого НЕТ ВООБЩЕ !!! обмен значениями 2-х переменных осуществляются через 3-ю, исключением являеются целые числа! вообще дагонали главная & побочная существуют только у квадратных матриц! ... поэтому пусть размер равен n , тогда перестановка... Code: void invert(int *massiv,int n) { int z; for(int i=0;i<n;i++) for(int j=0;j<n;j++) if(i+j<n-2) { z=massiv[i][j]; massiv[i][j]=massiv[n-j-1][n-i-1]; massiv[n-j-1][n-i-1]=z; } }
"Определить радиус и центр окружности минимального радиуса, проходящей хотя бы через три различные точки заданного множества точек на плоскости." Что-то нет никаких идей..
каждые три точки .... задают треугольник .... по сути каждая сторона треугольника это ХОРДА! А как известно перпендикуляры к хотя бы к 2-м серединам хорд дают пересечением однозначно центр окружности! Радиус получаешь по 2-м точкам центру окружности и любой из 3-х заданных точек! .... если struct crd { int x; int y; }; crd mnohestvo[N]; то проход по всевозможным тройкам Code: float l; for(i=0;i<N-3;i++) for(j=i+1;j<N-2;j++) for(k=j+1;k<N;k++) if(min>(l=raschet(i,j,k))) min=l; расчет середины хорды Code: void find_sered(crd *first,crd *second,crd *sered) { sered->x=(first->x+second->x)/2; sered->y=(first->y+second->y)/2; } уравнение прямой проходящей через 2 точки y = kx + b — уравнение прямой, проходящей через точки A и B, где k = (yB — yA) / (xB — xA) уравнение перпендикуляра проходящего к отрезку AB и проходящему через точку С y = -(1/k)x + (Yc + (1/k)Xc) и наконец нахождение центра который равен решению системы 2-х уравнений y = -(1/k)x + (Yc + (1/k)Xc) для 1-й и 2-й точек и такому же для 2-й и 3-й точек.
А не проще через радиус описанного круга R=abc/(4S), где a,b,с длинна сторон треугольника, а S его площадь. Площадь найти по формуле Герона, а длину сторон как корень из((x2-x1)квадрат + (y2-y1)квадрат) где х2 и y2 координаты конца отрезка, а х1 и y1 координаты начала отрезка. (Сори не знаю как корень и квадрат поставить).
Да, хорошее решение. Однако стоит заметить, что число всевозможных треугольников на n точках равно примерно n^3. Что может стать проблемой при больших n. Поэтому для решения подобных задач используется триангуляция, с быстродействием O(n log n). Но это выходит конечно за рамки лаб
Народ,помогите плиз.Надо написать прогу на паскале.Движение математического маятника,угол отклонения задается вручную.Заранее спасибо
Да,именно графически.Просто требуется прога при включении которой от пользователя требовалось бы ввести только начальный угол отклонения маятника.После ввода пользователем размера угла на экран бы выводился сам маятник,движущийся бесконечно,точнее до тех пор пока пользователь сам не остановит программу
А вот это хз.Дали задание составить программу движения математического маятника.Угол отклонения задавать вручную.И все.
Маятник движется по синусоиде x=Asin(p+wt) где A - амплитуда p - начальная фаза (угол отклонения) w=sqrt(g/L) L -длина подвеса t - время
а вообще маятник не может увелить угол отклонения? он постепенно должен потом уменьшаться? до полной остановки?. Реализовать в приципе через угол просто. если только нарисовать маятник, задаёшь угол. и пошёл туда сюда ходить.
2 n1ghtstalker ..а algol и не писал про увеличивающуюся амплитуду .... Максимальное отклонение и есть амплитуда А, просто в данный момент начальная фаза равна максимальному отклонению!
привет, кто знаком с алгоритмом шифровки Эль-Гамаля, заинтересовал вопрос у каждого символа должен быть свой код? шифруем символ кодом, шифруем этот код алгоритмом Эль-Гамаля и получаем на выходе (R,E), передаем клиенту, а потом расшифровываем (R,E) на выходе получаем код символа?...
Нет, не обязательно. Вполне возможна такая схема: строка(любые символы) -> массив байт -> число -> шифрование число - это число большой размерности, больше чем int, long, etc. Для работы с такими числами нужно использовать специальные классы для работы с большими числами. Например, в java это будет выглядеть так: Code: String source = "Hello world!"; BigInteger message = new BigInteger(message.getBytes()); BigInteger в свою очередь умеет умножать, складывать, брать обратное по модулю, возводить в степень. В этом классе реализованы специальные алгоритмы для работы с большими числами. Если мы говорим о с++, то тогда нужно подключать дополнительные библиотеки, например ntl http://www.shoup.net/ntl/ Помни, что шифртекст больше исходного сообщения и при дешифровании нужно это учитывать.