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

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

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

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

    Joined:
    4 Feb 2007
    Messages:
    1,006
    Likes Received:
    444
    Reputations:
    94
    Что-то, по-моему, без массивиов это невозможно... Хотя бы потому, что нам надо где-то хранить саму нашу последовательность...
     
  2. Delimiter

    Delimiter Banned

    Joined:
    8 Apr 2005
    Messages:
    317
    Likes Received:
    173
    Reputations:
    12
    хмммм.... максимальных чисел??? Это как??? Их много чтоль...

    и в чем фишка???
    Code:
    char str[100]; // если контроль ввода то масив под 
                          //строку символов должен существовать АКСИОМА!
    char rez[100]; //строка для вывода результата
    char smb;
    int schetchik=0;
    int index=0;
    int max=0;
    ex=0;
    while(ex==0)
    {
     -->ввод символа в smb метод ввода твой на выбор
      switch(smb)
      {
        case '0':
        case '1':
        case '2':
        case '3':
        case '4':
        case '5':
        case '6':
        case '7':
        case '8':
        case '9':
          str[index]=smb;
          index++
          break;
    //    case ' ':  можно разремировать эти строки но тогда
    //    case ',':  нужно увеличивать размер под буфер ввода str
    //                  но позволит использовать пробел и запятую
    //                 как разделители между числами      
        case 0x0d:
          str[index]=0;
          if(strlen(str)>0)
          {
             if(atoi(str)==max)
             {
               strcat(rez,itoa(schetchik,rez+80,10));
               strcat(rez," ");
             }
             else
               if(atoi(str)>max)
               {
                  max=atoi(str);
                  strcpy(rez,itoa(schetchik,rez+80,10));
                  strcat(rez," ");
               }
             schetchik++;
             if(atoi(str)==0)
               ex=1;
          }          
          index=0;
       }
    }
    printf("%s",rez);
    
    ЧИСЛО СЧИТАЕТСЯ ВВЕДЕННЫМ ЕСЛИ НАЖАТ ЭНТЕР!
    (или так же запятая и пробел если разремируешь и
    хотя бы сделаешь str[1000]
     
    #462 Delimiter, 29 Apr 2008
    Last edited: 29 Apr 2008
  3. WinTREI

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

    Joined:
    14 Mar 2008
    Messages:
    31
    Likes Received:
    0
    Reputations:
    0
    спасибо, но я уже написал используя основы De-visible
    получилось примерно так
    Code:
     Program Kontra2;
    Uses crt;
    type mas= array[1..100] of integer;{массив который мы будем анализировать}
    var
     i,Nmax,menu,n:integer;
     A:Mas;
     f:boolean;
    
    Procedure vvod( var A:Mas; var n:integer; var f:boolean);   {Ввод массива}
      Var I: integer;
        Begin
        writeln('Сколько элементов массива? ');
        readln(n);
        for I:=1 to n do
          Begin
            Write('Введите элемент # ',i,' ');
            Readln(A[i]);
          end;
        f:=true;
    end;
    
    function max(A:mas; n:integer):integer;
    var
    i:integer;
    buff:integer;
    Begin
         buff:=A[1];
         For i:=1 to n Do
         If A[i]>buff then buff:=A[i];
         max:=buff;
    End;
    
    procedure zamena(var A:mas; var n:integer; var max:integer);
    var
    i:integer;
    Begin
      For i:=1 to n Do
        Begin
          If A[i]>0 then
          If (A[i] mod 5) = 0 then A[i]:=max;
        End;
    End;
    
    procedure randmas(var A:mas; var n:integer; var f:boolean); {создание случайного массива}
    var
    i:integer;
      begin
      i:=1;
      write('из скольки элементов хотите массив? ');
      readln(n);
        for i:=1 to n do
          begin
          A[i]:=random(200);
          end;
        f:=true;
      end;
    
    Procedure Vuvod( A:Mas; var n:integer);   {Вiвод массива}
    Var I: integer;
      Begin
      for I:=1 to n do
        Begin
        Write(A[i],' ');
        end;
      writeln;
    end;
    
    Begin
     f:=false;
     randomize;
     while true do
     Begin
     clrscr;
     {ввожу массивы}
    writeln('1. Ввод массива целых чисел');
    writeln('2. Вывод массива случайных целых чисел');
    writeln('3 Найти максимальный элемент');
    writeln('  Заменить все положительные элементы кратные 5 на максимальный');
    writeln('4. Завершить работу');
    write('Ваш выбор: ');
    readln(menu);
    case menu of
      1: begin
         vvod(A,n,f);
         readln;
         end;
      2: begin
         randmas(A,n,f);
         vuvod(A,n);
         readln;
         end;
      3: begin
         vuvod(A,n);
         Nmax:=max(A,n);
         zamena(A,n,Nmax);
         vuvod(A,n);
         readln;
         end;
      4: break;
      else writeln('!!!ВЫБЕРИТЕ ВЕРHЫЙ ПУHКТ МЕHЮ (1-4)!!!');
      readln;
      end;
     end;
    end.
    

    De-visible:А он не твою задачу решал....Он решил задачу для Stern.
     
    #463 WinTREI, 29 Apr 2008
    Last edited by a moderator: 29 Apr 2008
  4. BaleHoK

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

    Joined:
    30 Sep 2007
    Messages:
    399
    Likes Received:
    21
    Reputations:
    10
    Можно было и с массивами,преподу на ето пох)))))

    Delimiter а тебе +++++ от меня)))))))


    ещё подкину задачку Нужна прога по переводу чисел из 2,8,10,16 систем счисления и обратно...что то типа этого http://rapidshare.com/files/111430028/perev.exe.html

    Так же на С или С++ ))))))))))))
     
    #464 BaleHoK, 30 Apr 2008
    Last edited: 30 Apr 2008
    2 people like this.
  5. krypt3r

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

    Joined:
    27 Apr 2007
    Messages:
    1,507
    Likes Received:
    389
    Reputations:
    101
    Код на языке C, преобразующий число из одной системы счисления в другую (а не только 2, 8, 10, 16). Принимает в качестве аргументов число (целое положительное), его систему счисления и систему счисления, в которую надо преобразовать. Сорри, лень оптимизить =)
    Code:
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <math.h>
    
    #define MAXSIZE 255
    
    char *ReverseStr (char *s)
    {
      int i = 0, j, len;
      char s2 [MAXSIZE];
    
      len = strlen (s);
      j = len - 1;
      bzero (s2, len + 1);
      while (j >= 0)
      {
        s2 [i++] = s [j--];
        //i++;
        //j--;
      }
      return s2;
    }
    
    int convertToDec (char *in, int in_ss)
    {
      int len = strlen (in), i, j = 0;
      int N = 0;
    
      i = len - 1;
      printf ("i = %d\n", i);
      while (i >= 0)
      {
        if ((in [i] >= '0') && (in [i] <= '9'))
          in [i] -= 0x30;
        if ((in [i] >= 'a') && (in [i] <= 'f'))
          in [i] -= 0x57;
        N += in [i] * (int) (pow (in_ss, j));
        i--;
        j++;
      }
      //printf ("%d\n", N);
      return N;
    }
    
    char *convert (int number, int out_ss)
    {
      int ost = 1, i = 0;
      char out_num [MAXSIZE];
    
      memset (out_num, '\0', MAXSIZE);
      while (number >= out_ss)
      {
        ost = number % out_ss;
        number = (int) (number / out_ss);
        if ((ost >= 0) && (ost <= 9))
          out_num [i] = ost + 0x30;
        else if ((ost >= 10) && (ost <= 15))
          out_num [i] = ost + 0x57;
        if (number < out_ss)
        {
          i++;
          if ((number >= 0) && (number <= 9))
            out_num [i] = number + 0x30;
          if ((number >= 10) && (number <= 15))
            out_num [i] = number + 0x57;
          //out_num [i] = number + 0x30;
        }
        //printf ("Number: %d\tOst: %d\n", number, ost);
        i++;
      }
    
      //printf ("Out: %s\n", ReverseStr (out_num));
      return ReverseStr (out_num);
    }
    
    int main (int argc, char** argv)
    {
      char *in_number, *out_number;
      int in_system, out_system, dec_number;
    
      if (argc != 4)
      {
        printf ("Usage: %s [number input_system output_system]\n", argv [0]);
        return 0;
      }
      in_number = argv [1];
      in_system = atoi (argv [2]);
      out_system = atoi (argv [3]);
      if (in_system == 10)
        dec_number = atoi (in_number);
      else
        dec_number = convertToDec (in_number, in_system);
    
      //printf ("DEC: %d\n", dec_number);
      printf ("Input number: %s\n", in_number);
      printf ("Input system: %d\n", in_system);
      printf ("Output system: %d\n", out_system);
      printf ("Output number: ");
      if (out_system != 10)
      {
        out_number = convert (dec_number, out_system);
        printf ("%s\n", out_number);
      }
      else
        printf ("%d\n", dec_number);
    
      return 0;
    }
    
    ЗЫ. Давно хотел этот код написать, да руки все не доходили.
     
    1 person likes this.
  6. Delimiter

    Delimiter Banned

    Joined:
    8 Apr 2005
    Messages:
    317
    Likes Received:
    173
    Reputations:
    12
    2 krypt3r

    .... а вдрух ему было достаточно

    unsigned long l=strtoul(str,0,base1);
    ultoa(l,str,base2);

    ??? :D Я БАЮСЬ ТАКИФ ЗАДАЧ!
     
  7. krypt3r

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

    Joined:
    27 Apr 2007
    Messages:
    1,507
    Likes Received:
    389
    Reputations:
    101
    Я с этими функциями раньше не работал, так что писал то, что в голове было. За подсказку сенкс.
    /me ушел читать маны
     
  8. Mosvit

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

    Joined:
    5 Mar 2007
    Messages:
    86
    Likes Received:
    16
    Reputations:
    1
    Pascal

    Помогите исправить программу, есть такое задание: Поменять местами первый и последний, второй и предпоследний и т.д. столбцы исходной матрицы. (матрица вида 6*6)

    Вот что у меня получилось, но мне нужно чтобы она автоматически меняла местами столбцы (первый - последний, второй-предпоседний, ...), а она просит ввода с клавиатуры номеров столбцов, хотя я этого вроде не задавал.
    Code:
    program pr7;
    uses crt;
     const n=6; m=6;
     a:array[1..n,1..m] of real=((0,2,1,2,5,6),
                                 (4,5,7,8,1,8),
                                 (0,6,2,3,3,4),
                                 (5,6,1,9,7,1),
                                 (1,2,3,4,5,6),
                                 (6,5,4,3,2,1));
     var i,j,k:integer;
     u:real;
     begin
      clrscr;
      read(i,j);
     clrscr;
     for k:=1 to n do
     begin u:=a[k,j]; a[k,j]:=a[k,i];a[k,i]:=u;
     end;
     for j:=1 to n do
     begin for i:=1 to m do write(a[j,i]:3:0);
     writeln;
     end;
     readkey;
     end.
    
    
     
  9. criz

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

    Joined:
    4 Nov 2007
    Messages:
    293
    Likes Received:
    40
    Reputations:
    6
    Просит потому, что:
    Code:
      read(i,j);
    
     
  10. Mosvit

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

    Joined:
    5 Mar 2007
    Messages:
    86
    Likes Received:
    16
    Reputations:
    1
    а как изменить её чтобы автоматически меняла столбцы?
    И ещё вопрос, как упорядочить побочную диагональ у этой матрицы по возрастанию? Я написал:
    Code:
    for i:=1 to n do
    begin 
    pd:=a[i,n-i+1];
    writeln(pd:3:0);
    end
    
    
    А как переставить её значения по-возрастанию не понимаю. :(
     
  11. De-visible

    De-visible [NDC] Network develope c0ders

    Joined:
    6 Jan 2008
    Messages:
    916
    Likes Received:
    550
    Reputations:
    66
    Торопился код может быть корявым!
    Important: Код писался именно для этого случая!
    Code:
    program pr7;
    uses crt;
     const n=6; m=6;
     a:array[1..n,1..m] of integer=((0,2,1,2,5,6),
                                    (4,5,7,8,1,8),
                                    (0,6,2,3,3,4),
                                    (5,6,1,9,7,1),
                                    (1,2,3,4,5,6),
                                    (6,5,4,3,2,1));
    var
    i,j,k:integer;
    Begin
    	For i:=1 to n Do 
    	Begin
    		For j:=1 to m DO write(a[i,j],' ');
    		writeln;
    		end;
    	For i:=1 to n Do 
    	Begin
    		For j:=0 to m-1 Do 
    		Begin
    			If j<3 then Begin
    			k:=a[i,j+1];
    			a[i,j+1]:=a[i,n-j];
    			a[i,m-j]:=k;
    		end;
    	end;
    	end;
    writeln;
    writeln;
    For i:=1 to n Do 
    Begin
    	For j:=1 to m DO write(a[i,j],' ');
    	writeln;
    end;
    readln;
    end.

    "Автоматически"
    меняет местами столбцы!

    =============

    Как упорядочить думаю догодаешься!
    ;)
    Но если будут сложности, я помогу, только чуть позже!
     
    #471 De-visible, 2 May 2008
    Last edited: 2 May 2008
    1 person likes this.
  12. Garfi

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

    Joined:
    1 Feb 2008
    Messages:
    85
    Likes Received:
    23
    Reputations:
    0
    Не коверкай рiдну мову...

    Если кто-то из русскоговорящих возметься:

    дано n (1<n<=100) точка на площади координат (xi, yi) (i=1,n). Точки образуют многоугольник з n углами и n сторонами.
    Исходные данные
    Определить:
    a) Средняя арифметичная длина стороны многоугольника
    b) Количество номеров сторон, что пересекают ось координат

    p.s. за бесплатно врядле кто возметься...
     
  13. iv.

    iv. Elder - Старейшина

    Joined:
    21 Mar 2007
    Messages:
    1,183
    Likes Received:
    438
    Reputations:
    107
    Сейчас накатал, возможны косяки, проверить нет возможности.
    PS: на плюсы перевести думаю справишься..
    Code:
    #include <stdio.h>
    #include <math.h>
    
    void main(void)
    {
    	unsigned int x_point[100], y_point[100];
    	int lenght = 0, amount = 0;
    
    	for (int i = 0; i < 100; i++)
    	{
    		printf("point %d: enter xi\n", i + 1);
    		scanf("%d", &x_point[i]);
    
    		printf("point %d: enter yi\n", i + 1);
    		scanf("%d", &y_point[i]);
    		
    	}
    
    	for (int i = 0; i < 99; i++)
    	{
    		if (x_point[i] > 0 && x_point[i + 1] < 0)
    			amount++;
    		if (x_point[i] < 0 && x_point[i + 1] > 0)
    			amount++;
    		if (y_point[i] > 0 && y_point[i + 1] < 0)
    			amount++;
    		if (x_point[i] < 0 && x_point[i + 1] > 0)
    			amount++;
    
    		lenght += sqrt(abs(x_point[i + 1] - x_point[i]) * abs(x_point[i + 1] - x_point[i]) + abs(y_point[i + 1] - y_point[i]) * abs(y_point[i + 1] - y_point[i]));
    	}
    
    	printf("amount: %d", amount);
    	printf("lenght: %d", lenght / 100);
    
    	return;
    }
    
     
    1 person likes this.
  14. WinTREI

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

    Joined:
    14 Mar 2008
    Messages:
    31
    Likes Received:
    0
    Reputations:
    0
    помогите с задачай по текстовым файлам (ПАСКАЛЬ)

    Дан файл, содержащий текст и арифметические выражения
    вида а®b, где ® — один из знаков +, —, *, /. Выписать все арифметические выражения и вычислить их значения.

    з.ы. почему мою тему удалили :mad:

    De-visible:
    Правильный ответ уже прозвучал!
    http://forum.antichat.ru/showpost.php?p=675710&postcount=481
     
    #474 WinTREI, 2 May 2008
    Last edited by a moderator: 5 May 2008
  15. criz

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

    Joined:
    4 Nov 2007
    Messages:
    293
    Likes Received:
    40
    Reputations:
    6
    Помогите найти ошибку в коде:
    Code:
    typedef struct ip_header {
      UCHAR   iph_verlen;
      UCHAR   iph_tos;  
      USHORT  iph_length;  
      USHORT  iph_id;       
      USHORT  iph_offset; 
      UCHAR   iph_ttl;     
      UCHAR   iph_protocol; 
      USHORT  iph_xsum;    
      ULONG   iph_src;      
      ULONG   iph_dest;   
    } IPHeader;
    
    Заполняю ИП заголовок:
    Code:
    	ip_hd->iph_verlen = 0x45;
    	ip_hd->iph_tos	= 0x01;
    	ip_hd->iph_length = htons(40);
    	ip_hd->iph_id	= htons(0x0800);
    	ip_hd->iph_offset = 0x0;
    	ip_hd->iph_ttl	=	0xff;
    	ip_hd->iph_protocol		=	0x06;
    	ip_hd->iph_xsum	=	0x00;
    	ip_hd->iph_dest	=	inet_addr("192.168.0.1");
    
    При заполнение вылетает экзепшн(Access violation). Не могу понять почему происходит... :confused:
     
  16. da_ff

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

    Joined:
    11 Jul 2006
    Messages:
    118
    Likes Received:
    22
    Reputations:
    26
    ты память то выделил?
     
  17. criz

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

    Joined:
    4 Nov 2007
    Messages:
    293
    Likes Received:
    40
    Reputations:
    6
    Для структуры? Извините за глупый вопрос: А как? :rolleyes:
     
  18. Myst

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

    Joined:
    22 Feb 2008
    Messages:
    22
    Likes Received:
    15
    Reputations:
    5
    Ну тогда попробуй так:
    Code:
    program qwer;
    
    var
    s:string;
    a:char;
    infile,outfile:text;
    n,m,c,i:integer;
    
    begin
    assign(infile,'input.txt');
    assign(outfile,'output.txt');
    reset(infile);
    rewrite(outfile);
    repeat
    readln(infile,s);
    for i:=1 to length(s) do begin
    a:=s[i];
    case a of
    '+':begin
    val(Copy(s,1, i-1),m,c);
    val(Copy(s,i+1,length(s)-i),n,c);
    write(outfile,s+'=');
    writeln(outfile,m+n);
    end;
    
    '-':begin
    val(Copy(s,1, i-1),m,c);
    val(Copy(s,i+1,length(s)-i),n,c);
    write(outfile,s+'=');
    writeln(outfile,m-n);
    end   ;
    '*':begin
    val(Copy(s,1, i-1),m,c);
    val(Copy(s,i+1,length(s)-i),n,c);
    write(outfile,s+'=');
    writeln(outfile,m*n);
    end   ;
    '/':begin
    val(Copy(s,1, i-1),m,c);
    val(Copy(s,i+1,length(s)-i),n,c);
    write(outfile,s+'=');
    writeln(outfile,m/n:8:2);
    end   ;
    end;
    end;
    n:=0;
    m:=0;
    until eof(infile);
    close(outfile);
    close(infile);
    
    end.
     
  19. Catsy

    Catsy New Member

    Joined:
    26 Apr 2008
    Messages:
    14
    Likes Received:
    1
    Reputations:
    0
    помгите с двумя задачками плиз :rolleyes:

    1) через процедуры:
    Составить программу для нахождения чисел из интервала [M, N], имеющих наибольшее количество делителей.
    2) через функции:
    Дано: натуральное n, целые неотрицательные a1, …, an. Рассмотреть отрезки последовательности a1, …, an (подпоследовательности идущих подряд членов), состоящей полных квадратов. Для проверки использовать функцию primer(a), описанную таким образом, что



    .............1, если a – полный квадрат,
    primer=
    .............0, в противном случае.

    De-visible: Реализация на Паскаль...
    В следующий раз, не забывайте указать язык программирования, здесь нет телепатов:)
     
    #479 Catsy, 4 May 2008
    Last edited by a moderator: 4 May 2008
  20. krypt3r

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

    Joined:
    27 Apr 2007
    Messages:
    1,507
    Likes Received:
    389
    Reputations:
    101
    Catsy, первая задача
    Code:
    program deliteli;
    
    {Составить программу для нахождения чисел из интервала [M, N],
    имеющих наибольшее количество делителей.}
    
    procedure GetCount (x : integer; var count : integer);
    {Подсчет кол-ва делителей для каждого числа}
    var
      i, j : integer;
    begin
      i := 2;
      count := 0;
      j := x div 2;
      while (i <= j) do begin
        if x mod i = 0 then begin
          write (i, ' ');
          inc (count);
          x := x div i;
        end else
          inc (i);
      end;
      writeln;
    end;
    
    procedure PrintNumbers (x, y : array of integer; count, index : integer);
    var
      i : integer;
    begin
      for i := 0 to count - 1 do
        if y [i] = index then
          writeln (x [i]);
    end;
    
    var
      n1, n2, i, j, count, max : integer; {Первое, последнее число, счетчики цикла, кол-во делителей, максимальное кол-во делителей}
      numbers : array [1..255] of integer; {Массив для чисел}
      del_count : array [1..255] of integer; {Массив для количества делителей каждого числа}
    
    begin
      write ('Введите первое число n1: ');
      readln (n1);
      write ('Введите последнее число n2: ');
      readln (n2);
      count := 0;
      max := 0;
      j := 1;
      for i := n1 to n2 do begin
        numbers [j] := i;
        write ('Делители числа ', i, ': ');
        GetCount (i, count);
        del_count [j] := count;
        if count > max then
          max := count;
        writeln ('Количество: ', count);
        inc (j);
      end;
      writeln ('Максимальное число делителей: ', max);
      writeln ('Числа, имеющие наибольшее кол-во делителей');
      PrintNumbers (numbers, del_count, n2 - n1 + 1, max);
    end.
    
    Условие второй как-то не совсем понял :(
     
Thread Status:
Not open for further replies.