Студентам с лабораторными сюда (архивная - 2015)

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by _Great_, 20 Jun 2007.

Thread Status:
Not open for further replies.
  1. Retimiled

    Retimiled Banned

    Joined:
    23 Dec 2009
    Messages:
    110
    Likes Received:
    17
    Reputations:
    0
    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();
      }
    
    }
    
     
    #2081 Retimiled, 28 Dec 2009
    Last edited: 28 Dec 2009
  2. .devastatiour

    .devastatiour New Member

    Joined:
    9 Oct 2009
    Messages:
    0
    Likes Received:
    0
    Reputations:
    0
    курсяк!!!помогите плиз.вот тема:
    На базе МП разработать измеритель мощностей двух инфранизкочастотных сигналов, поступающих синхронно от двух АЦП в виде восьмиразрядных прямых кодов со скоростью 100 отсчетов в секунду, объем выборки 1024 отсчета. С выдачей результата в двоичном коде целой и дробной частей во внешний регистр.
    впринципе есть готовая прога,нужно либо к ней комменты написать,либо написать заново.контакт 65000000
    в ассемблере нужно всё это
     
    #2082 .devastatiour, 28 Dec 2009
    Last edited: 28 Dec 2009
  3. .Life

    .Life Banned

    Joined:
    26 Dec 2009
    Messages:
    81
    Likes Received:
    3
    Reputations:
    0
    Помогите исправить ошибки..Нужно инвертировать матрицу относительно побочной диагонали... Язык 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);
          } 
    
     
  4. Retimiled

    Retimiled Banned

    Joined:
    23 Dec 2009
    Messages:
    110
    Likes Received:
    17
    Reputations:
    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;
        }
    }
    
     
    #2084 Retimiled, 29 Dec 2009
    Last edited: 30 Dec 2009
  5. xanser

    xanser New Member

    Joined:
    30 Jul 2009
    Messages:
    3
    Likes Received:
    0
    Reputations:
    0
    "Определить радиус и центр окружности минимального радиуса, проходящей хотя бы через три различные точки заданного множества точек на плоскости."

    Что-то нет никаких идей..
     
  6. Retimiled

    Retimiled Banned

    Joined:
    23 Dec 2009
    Messages:
    110
    Likes Received:
    17
    Reputations:
    0
    каждые три точки .... задают треугольник .... по сути каждая сторона треугольника это ХОРДА! А как известно перпендикуляры к хотя бы к 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-й точек.
     
    #2086 Retimiled, 30 Dec 2009
    Last edited: 30 Dec 2009
  7. lokli

    lokli New Member

    Joined:
    28 Dec 2009
    Messages:
    10
    Likes Received:
    0
    Reputations:
    0
    А не проще через радиус описанного круга R=abc/(4S), где a,b,с длинна сторон треугольника, а S его площадь. Площадь найти по формуле Герона, а длину сторон как корень из((x2-x1)квадрат + (y2-y1)квадрат) где х2 и y2 координаты конца отрезка, а х1 и y1 координаты начала отрезка. (Сори не знаю как корень и квадрат поставить).
     
  8. Retimiled

    Retimiled Banned

    Joined:
    23 Dec 2009
    Messages:
    110
    Likes Received:
    17
    Reputations:
    0
    2 lokli маладес .... твое решение проще намного!
     
  9. Algol

    Algol New Member

    Joined:
    29 May 2002
    Messages:
    1,759
    Likes Received:
    4
    Reputations:
    0
    Да, хорошее решение. Однако стоит заметить, что число всевозможных треугольников на n точках равно примерно n^3. Что может стать проблемой при больших n. Поэтому для решения подобных задач используется триангуляция, с быстродействием O(n log n). Но это выходит конечно за рамки лаб :)
     
  10. qwert135

    qwert135 New Member

    Joined:
    22 Nov 2009
    Messages:
    53
    Likes Received:
    0
    Reputations:
    0
    Народ,помогите плиз.Надо написать прогу на паскале.Движение математического маятника,угол отклонения задается вручную.Заранее спасибо:)
     
  11. DimkO

    DimkO Banned

    Joined:
    16 Nov 2008
    Messages:
    28
    Likes Received:
    3
    Reputations:
    0
    тебе нужна графическая имитация движения?объясни суть задания
     
  12. qwert135

    qwert135 New Member

    Joined:
    22 Nov 2009
    Messages:
    53
    Likes Received:
    0
    Reputations:
    0
    Да,именно графически.Просто требуется прога при включении которой от пользователя требовалось бы ввести только начальный угол отклонения маятника.После ввода пользователем размера угла на экран бы выводился сам маятник,движущийся бесконечно,точнее до тех пор пока пользователь сам не остановит программу
     
  13. n1ghtstalker

    n1ghtstalker Elder - Старейшина

    Joined:
    28 Sep 2008
    Messages:
    59
    Likes Received:
    3
    Reputations:
    0
    эм по какой формуле то расчёт движения должен идти?
     
  14. qwert135

    qwert135 New Member

    Joined:
    22 Nov 2009
    Messages:
    53
    Likes Received:
    0
    Reputations:
    0
    А вот это хз.Дали задание составить программу движения математического маятника.Угол отклонения задавать вручную.И все.
     
  15. Algol

    Algol New Member

    Joined:
    29 May 2002
    Messages:
    1,759
    Likes Received:
    4
    Reputations:
    0
    Маятник движется по синусоиде
    x=Asin(p+wt)
    где A - амплитуда
    p - начальная фаза (угол отклонения)
    w=sqrt(g/L)
    L -длина подвеса
    t - время
     
  16. n1ghtstalker

    n1ghtstalker Elder - Старейшина

    Joined:
    28 Sep 2008
    Messages:
    59
    Likes Received:
    3
    Reputations:
    0
    а вообще маятник не может увелить угол отклонения? он постепенно должен потом уменьшаться? до полной остановки?.

    Реализовать в приципе через угол просто. если только нарисовать маятник, задаёшь угол. и пошёл туда сюда ходить.
     
  17. Retimiled

    Retimiled Banned

    Joined:
    23 Dec 2009
    Messages:
    110
    Likes Received:
    17
    Reputations:
    0
    2 n1ghtstalker

    ..а algol и не писал про увеличивающуюся амплитуду .... Максимальное отклонение и есть амплитуда А, просто в данный момент начальная фаза равна максимальному отклонению!
     
  18. .Life

    .Life Banned

    Joined:
    26 Dec 2009
    Messages:
    81
    Likes Received:
    3
    Reputations:
    0
    привет, кто знаком с алгоритмом шифровки Эль-Гамаля, заинтересовал вопрос у каждого символа должен быть свой код? шифруем символ кодом, шифруем этот код алгоритмом Эль-Гамаля и получаем на выходе (R,E), передаем клиенту, а потом расшифровываем (R,E) на выходе получаем код символа?...
     
  19. Algol

    Algol New Member

    Joined:
    29 May 2002
    Messages:
    1,759
    Likes Received:
    4
    Reputations:
    0
    Математический маятник вообще не меняет амплитуду, она не увеличивается и не уменьшается.
     
  20. Forcer

    Forcer Elder - Старейшина

    Joined:
    12 Apr 2007
    Messages:
    321
    Likes Received:
    98
    Reputations:
    12
    Нет, не обязательно. Вполне возможна такая схема:
    строка(любые символы) -> массив байт -> число -> шифрование
    число - это число большой размерности, больше чем int, long, etc. Для работы с такими числами нужно использовать специальные классы для работы с большими числами. Например, в java это будет выглядеть так:
    Code:
    String source = "Hello world!";
    BigInteger message = new BigInteger(message.getBytes());
    BigInteger в свою очередь умеет умножать, складывать, брать обратное по модулю, возводить в степень. В этом классе реализованы специальные алгоритмы для работы с большими числами. Если мы говорим о с++, то тогда нужно подключать дополнительные библиотеки, например ntl http://www.shoup.net/ntl/
    Помни, что шифртекст больше исходного сообщения и при дешифровании нужно это учитывать.
     
Thread Status:
Not open for further replies.