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

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

Thread Status:
Not open for further replies.
  1. 4p3

    4p3 Elder - Старейшина

    Joined:
    18 Aug 2008
    Messages:
    142
    Likes Received:
    30
    Reputations:
    0
    На лицо неявное приведение типов. Вы преобразуете дробное число из формата IEE 754 в целочисленное. Работайте в одном формате или используйте приведение типов.
     
  2. 4p3

    4p3 Elder - Старейшина

    Joined:
    18 Aug 2008
    Messages:
    142
    Likes Received:
    30
    Reputations:
    0
    Используйте тег CODE. Глаза режет. И, очень Вас прошу, комментируйте свой код.

    Ваша задача сводится к поиску вхождения одного массива в другой. Это делается двумя циклами, один из которых вложен в другой.
     
  3. STIFFmaster

    STIFFmaster New Member

    Joined:
    11 Dec 2009
    Messages:
    9
    Likes Received:
    0
    Reputations:
    0
    Help!!!
    помогите, мне с лабой
    Написать програму что реализирует две функции с однаковіми именами но разными входящими данными(перегрузка).
    Функция max, что находит максимальное значение из двух целых чисел и максимальное значения длиннейшего из слов предложения.
     
  4. KI11obyte

    KI11obyte New Member

    Joined:
    8 Nov 2005
    Messages:
    29
    Likes Received:
    2
    Reputations:
    0
    STIFFmaster, как то так

    Code:
    //фуникция для работы с числами
    int max(int a, int b)
    {
     if (a>b) return a;
     else return b;
    }
    //функция для работы со строкой
    int max(char * c)
    {
     int a;
     int max=1;
     while (c!='\0')
       {
           if (c==' ')
               if (a>max)
                   {
                        max=a;
                        a=0;
                    }
             if (c!=' ')
                a++;
             c++;
       }
    
    }
    
    З.ы. могут быть мелкие ошибки - давно на С++ не писал, плюс набирал прямо тут, нигде не проверял.
     
  5. KI11obyte

    KI11obyte New Member

    Joined:
    8 Nov 2005
    Messages:
    29
    Likes Received:
    2
    Reputations:
    0
    Life а какого черта ты сравниваешь каждый символ подстроки с текущим рассматриваемым символом в строке? ты тогда уж сравнивай со следующими. а еще лучше сделать проверку без привязки к количеству символов строке
    да и в цикле конечное значение левое какое то
    Code:
    int k=0;
    for ( int i=0; i<30; i++)
    {
        if (stroka[i]==podstroka[k])
           k++;
        if ((stroka[i]!=podstoka[k]) && (!k))
          k=0;
        if (k==strlen(podstroka))
          cout<<i-k;       
    }
     
  6. [Life]

    [Life] Banned

    Joined:
    7 Jan 2010
    Messages:
    74
    Likes Received:
    3
    Reputations:
    0
    Спасибо, о то некак не мог додуматся....
     
  7. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    Dieselpro задача можно решить из критерия сходимости для последовательности. Для любого числа ε > 0 существует номер N такой, что при всех n > N и любых натуральных m выполняется неравенство |Xn+m - Xn| < ε.

    То есть просто проверяем разность текущего и предыдущего значений функции (n - натуральные числа), если он меньше эпсилон, то мы нашли значение этого предела. Плюс поставить ограничение на количество итераций (достаточно большое) или ограничение на значение функции. По достижении которого прекращать поиск и говорить о пределе равном бесконечности или минус бесконечности

    [Life] у KI11obyte немного неправильно, его функция не найдет строку 'abc' в строке 'aaabc'
    PHP:
        int j=0;
        for (
    int i=0i<30 || !(stroka[i]); i++)
        {
            if (
    stroka[i]==podstroka[0])
            for (
    j=0;j<0i++)
            {
                if (!
    podstroka[i+j]) return 1;
                if (!
    stroka[i+j]) return 0;
                if (
    stroka[i+j]!=podstroka[j]) break;
            }
        }
        return 
    0;
    return 1 - заменить на сообщение что строка найдена, а return 0 - что нет, ну или оформить все в отдельную функцию. Ведь задание гласит - не использовать СТАНДАРТНЫЕ функции, а это будет собственная
     
    _________________________
    #2147 Gifts, 9 Jan 2010
    Last edited: 9 Jan 2010
  8. [Life]

    [Life] Banned

    Joined:
    7 Jan 2010
    Messages:
    74
    Likes Received:
    3
    Reputations:
    0
    Спасибо Gifts, а то смотрю что написал KI11obyte - и сам думаю видать что-то не так...
    а вот


    норм. спс.
     
  9. KI11obyte

    KI11obyte New Member

    Joined:
    8 Nov 2005
    Messages:
    29
    Likes Received:
    2
    Reputations:
    0
    Хммм.. а почему не найдет? вроде все норм. хотя если в цикле первое и второе условие поменять местами то будет лучше
     
  10. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    Мм, да, будет, но все равно - остается определенный класс подстрок, которые не будут найдены, например:

    aaaaabcde
    aaaabсde

    Когда k будет установлен в ноль переменная i будет равна 4, и нам не хватит даже длины слова для поиска. Необходимо каждый раз возвращаться
     
    _________________________
  11. KI11obyte

    KI11obyte New Member

    Joined:
    8 Nov 2005
    Messages:
    29
    Likes Received:
    2
    Reputations:
    0
    Мда, ошибка (=
    Хотел обойтись без вложенного цикла - получилось плохо (=
     
  12. Rammstex

    Rammstex New Member

    Joined:
    21 Nov 2006
    Messages:
    7
    Likes Received:
    0
    Reputations:
    0
    Не лаба, но нужный для зачёта семинар по инфе...
    Язык C.
    Выполнить упражнения, следуя указаниям в doc-файле.
    Очень прошу, к 11 января нужно.
    задания http://saveimg.ru/show-image.php?id=a60ed786585359a3b067af75b6e6edf5
    doc-файл http://slil.ru/28457448
     
  13. Вася Рогов

    Вася Рогов New Member

    Joined:
    6 Jul 2009
    Messages:
    16
    Likes Received:
    0
    Reputations:
    0
    Pascal. Задача на логику: составить программу, которая по данным составит расписание занятий.

    Учитель литературы может провести 1, 2, 3 уроки;
    Учитель физкультуры (физ-ры) может провести 1, 4 уроки;
    Учитель математики может провести 2, 3, 4 уроки;
    Учитель технологии (трудов) может провести 3, 4 уроки.

    Т.е. входные данные такие:
    1110
    1001
    0111
    0011

    Вывод (к примеру):
    Литература
    Математика
    Технология
    Физкультура

    Помогите исходником или расписанным алгоритмом. Буду благодарен.
     
  14. n1ghtstalker

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

    Joined:
    28 Sep 2008
    Messages:
    59
    Likes Received:
    3
    Reputations:
    0
    эм ну по сути простой перебор .
    алгоритм.
    если лит-ра 1
    то физ-ра 4
    математика 2
    а труд 3

    ....
    если хочешь в лс все варианты распишу
    а ввод как осуществляться будет?
    или просто надо все варианты вывести?
     
    #2154 n1ghtstalker, 10 Jan 2010
    Last edited: 10 Jan 2010
  15. DJeFRY_RASH

    DJeFRY_RASH New Member

    Joined:
    7 Apr 2009
    Messages:
    16
    Likes Received:
    1
    Reputations:
    0
    Ребят, помогите плиз, завтра сдавать ...

    Code:
    program xyz;
    
    uses
      SysUtils;
    
    Function Ru ( S : string ) : string ;
    VAR
                 T : string ;			             { временная строка}
    	i : integer ;			             { номер символа в строке }
    	code : byte ;			             { код символа }
    BEGIN
    	T := S ;				             { получает значение параметра }
    	FOR i := 1 TO Length ( S ) DO	{ для всех символов строки S}
    	BEGIN				{ изменяет кодировку символов кириллицы }
    		code := Ord ( S[ i ] ) ;		{ определяет код символа}
    		CASE code OF		{ ПРОПИСНЫЕ БУКВЫ }
    		192 .. 197: T[ i ] :=Chr(code-64) ;	{ А-Е: 192-197	->128-133}
    		168: T[ i ] :=#240;			{ Ё: 168->240}
    		198 .. 223: T[ i ] :=Chr(code-64);	{ Ж-Я	: 198-223->128-133}													{ строчные буквы }
    		224 .. 229: T[ i ] :=Chr(code-64);	{ а-е	: 224-229->160-165}
    		184: T[ i ] :=#241;			{ ё: 184	->241}
    		230 .. 239: T[ i ] :=Chr(code-64);	{ е-п: 230-239->166-175}
    		240 .. 255: T[ i ] :=Chr(code-16);	{ р-я: 240-255->224-239}
    		END ;
    	END ;
    	Ru := T ;					{ возвращает значение временной строки }
    END;
    
    VAR
         i,j,k,n,temp:integer;                // искомые числа
         repeat_it:boolean;                   // зацикливание программы (True/False)
         ans:char;                                  // используется для получения согласия для продолжения работы программы
         label                                          // идентификатор
         p1;
    
    Function IntSqrt(temp:integer):real;                       // функция для вычисления квадратного корня.
    VAR
        x:real;
        t:real;
    begin                                                                              // начало функции
        x:=sqrt(temp);                                                          // извлечение квадратного корня из числа.
        if (x-round(x))=0 then t:=x                                  // Если от х отнять округленный х будет равно нулю, тогда t=x.
        else t:=0;                                                                // Либо t=0.
    end;                                                
    
    
    begin
    Writeln(Ru('Программа находит все натуральные числа, меньшие чем N, для которых выполняется соотношение a*a + b*b = c*c. [a,b,c < N]'));
    Writeln;                             // ...
          Writeln(Ru('Автор программы ...'));   // Вывод информации на экран об авторе программы.
          Writeln;                            // ...
          Writeln('...');                         // Вывод на экран - e-mail автора программы.
          Writeln;                                                                  
        p1:                                                                      // Возврат в это место при ошибке или при повторном вводе данных.
        repeat_it:=true;                                                // Зацикливание программы, True-правда.
        while repeat_it=true do begin
     Write(Ru('Введите число, которое вы хотите проверить: '));                // ...
        read(temp);
        Writeln('OTBET: ',IntSqrt(temp):6:0);        // Отправить temp на обработку в функцию 'Formula()' и вывести результат на экран.
        Writeln;                                                             // ...
        Write(Ru('Введите N: '));                              // ...
        Read(n);                                                            // Ввод числа N
        for i:=1 to N-1 do                                             // Увеличиваем переменную результата в N-1 раз.
        for j:=1 to N-1 do                                             // Увеличиваем переменную результата в N-1 раз.
        for k:=1 to N-1 do                                            // Увеличиваем переменную результата в N-1 раз.
        if i*i+j*j=k*k then Writeln('a=',i:4,';    b=',j:4,';    c=',k:4);      // Если i*i+j*j=k*k, то выводятся на экран все возможные варианты решения этого уравнения.
        Writeln;                                                            // ...
        Write(Ru('Вы хотите продолжить работу с программой ? (Y/N): '));          // Предложить продолжить работу с программой.
            Readln;
        readln(ans);                                                      // Получить согласие.
        writeln;                                                                // ...
        if (ans='Y') or (ans='y') or (ans=Ru('Н')) or (ans=Ru('н')) then GoTo p1; // Если согласие получено - возврат к началу.
        break;                                                                  
    
        end;
    end.
    Собственно если ввожу N = 6
    то выводит ответ
    a = 3 b = 4 c = 5
    a = 4 b = 3 c = 5
    то есть нужно чтобы в случае если "с" совпадает несколько раз, тогда чтобы выводилось 1 раз.
     
  16. Fata1ex

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

    Joined:
    12 Dec 2006
    Messages:
    703
    Likes Received:
    300
    Reputations:
    38
    Тебе нужно, чтобы с каждым 'c' выводилась только одна пара или чтобы набор чисел в тройке различался в каждом варианте?
    На будущее - тут нет экстрасенсов, пиши, что делает твоя программа и что должна делать ВНЕ кода. И вовсе не зачем пихать в код всю программу, достаточно проблемного места.
     
  17. DJeFRY_RASH

    DJeFRY_RASH New Member

    Joined:
    7 Apr 2009
    Messages:
    16
    Likes Received:
    1
    Reputations:
    0
    Полная задача программы:
    Нужно определить функцию, которая возвращает натуральное число, если аргумент функции является квадратом этого числа и ноль в противном случае.
    Составить программу, которая находит все натуральные числа, меньшие чем N, для которых выполняется соотношение a2(квадрат) + b2(квадрат) = c2(квадрат).
    Проблема:
    То есть всё норм работает, кроме того, что когда я получаю в ответе одинаковые "с", то получается что "а" и "b", разные, но числа одинаковые, поэтому программа их выводит, и один вариант получается лишним.
    то есть, если я ввожу N = 6, я должен получить ответ, только
    a = 3; b = 4; c = 5
    а не два варианта.
     
  18. Fata1ex

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

    Joined:
    12 Dec 2006
    Messages:
    703
    Likes Received:
    300
    Reputations:
    38
    ага.

    Можешь записывать a и b в массив, а потом сравнивать. Больше ничего в голову пока не приходит.
    Goto буэ ) используй repeat/until

    ps. а вообще в условии ни слова не сказано про твою "проблему". может это вовсе не проблема?
     
    #2158 Fata1ex, 10 Jan 2010
    Last edited: 10 Jan 2010
  19. RandomJkee

    RandomJkee New Member

    Joined:
    30 Oct 2009
    Messages:
    2
    Likes Received:
    0
    Reputations:
    0
    Нужно 11 января написать прграмму по C# прибл за час, задание передам по icq, обратно также. прогу надо будет начать делать где то около 9-00(время московское), моя аська 428055866
    Пишите о цене договоримся, очень надо
     
  20. DJeFRY_RASH

    DJeFRY_RASH New Member

    Joined:
    7 Apr 2009
    Messages:
    16
    Likes Received:
    1
    Reputations:
    0
    Я тоже думал, что не проблема, но преподователь оборвал, сказал сделай так чтобы одинаковые ответы не повторялись.
    Вот я и думаю как сделать...
    Может что-то наподобии этого добавить ?
    Code:
    Procedure PrintTreangle(n:integer);
    VAR
      a,b,c:longint;
      count:longint;
    BEGIN
      FOR a:=1 To n Do
        For b:=a+1 To n Do
        Begin
          c:=IntSqrt(a*a+b*b);
          if c>0 Then Writeln(a:4, b:4, c:4);
            Begin
              Writeln(a:4, b:4, c:4);
              count:=count+1;
              if count mod 100=0 Then
              Readln;
            end;
        end;
    END;
     
    1 person likes this.
Thread Status:
Not open for further replies.