[C/C++] ЗАДАНИЯ

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by Fata1ex, 21 Jun 2009.

  1. fker

    fker Member

    Joined:
    26 Nov 2008
    Messages:
    135
    Likes Received:
    64
    Reputations:
    -1
    1. использовать метки и оператор goto

    2. создать переменную-флаг и проверять в каждом цикле не равна ли она значению, для выхода из цикла

    например:
    Code:
    int flag=0;
    for(i=z; i<n && flag!=1; i++){
         blabla;
         for( ; df!=n && flag!=1;)
               if(что то)
                 flag=1;
               }
         }
    
     
  2. Fata1ex

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

    Joined:
    12 Dec 2006
    Messages:
    703
    Likes Received:
    300
    Reputations:
    38
    Ладно :)
    Есть третий вариант.
     
  3. \\ChaOs//

    \\ChaOs// Member

    Joined:
    26 Feb 2009
    Messages:
    102
    Likes Received:
    26
    Reputations:
    5
    Code:
    #include <iostream>
    #include <fstream>
    using namespace std;
    
    void Array(int num)
    {
    int **arr,i=0,j=0,n=1,d=1;
    arr=new int*[num];
    for(int a=0;a<num;a++)
    arr[a]=new int[num];
    
    while(d!=((num/2)+1))
    {
    for(;i<(num-d);i++,n++)
    {
    	arr[i][j]=n;
    }
    for(;j<(num-d);j++,n++)
    {
    	arr[i][j]=n;
    }
    for(;i!=(-1+d);i--,n++)
    {
    	arr[i][j]=n;
    }
    for(;j!=d;j--,n++)
    {
    	arr[i][j]=n;
    }
    d++;
    if(d==(num/2+1))
    {
    	arr[i][j]=n;
    	if(num & 1)
    	{
    		i++;
    		n++;
    		arr[i][j]=n;
    	}
    }
    }
    char name[80];
    up:
    cout<<"Вывод в файл. Введите имя\n";
    cin>>name;
    
    ofstream file(name);
    if(!file) goto up;
    for(int a=0;a<num;a++)
    {
    for(int b=0;b<num;b++)
    {
    	file<<arr[b][a]<<"\t";
    }
    file<<endl;
    }
    delete arr;
    }
    
    
    int _tmain()
    {
    setlocale(0,".1251");
    int n;
    begin:
    cout<<"Введите размерность массива n*n"<<endl;
    try{
    cin>>n;
    
    Array(n);
    }
    catch(...){cin.clear(); _flushall();cout<<"Ошибко!!! ):\n"; goto begin;}
    system("pause");
    return 0;
    }
     
    #103 \\ChaOs//, 9 Jul 2009
    Last edited: 9 Jul 2009
    2 people like this.
  4. Fata1ex

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

    Joined:
    12 Dec 2006
    Messages:
    703
    Likes Received:
    300
    Reputations:
    38
    \\ChaOs//, размерность нужно ввести, а не задать изначально.
     
  5. bons

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

    Joined:
    20 Dec 2007
    Messages:
    286
    Likes Received:
    121
    Reputations:
    21
    мой вариант про спираль на поцкале:
    Code:
    program spiral;
    
    const n = 5;
    type matrix = array of array of cardinal;
    
    //----------------------------------------------------------------------
    procedure fill_spiral(var m : matrix; n : cardinal);
    var i, num_circle, start: integer;
    begin
     start := 1;
     for num_circle := 0 to n div 2 -1 do begin
      for i := num_circle to n - num_circle - 1 do begin
       m[num_circle, i] := start + i;
       m[n - num_circle - 1, n - i - 1] := 2 * n - num_circle * 4 - 2 + start + i;
      end; 
      for i := num_circle + 1 to n - num_circle - 2 do begin
       m[i, n - num_circle - 1] := start + n - num_circle * 2 + i - 1;
       m[n - i - 1, num_circle] := start + 3 * n - num_circle * 6 - 3 + i;
      end;
      start := start + 4 * n - num_circle * 7 - 5;
     end;
     if n mod 2 <> 0 then m[n div 2, n div 2] := start + 1;
    end;
    
    //----------------------------------------------------------------------
    var i, j: integer;
        s: matrix;
    BEGIN
     SetLength(s, n, n);
     fill_spiral(s, n);
     for i := 0 to n - 1 do begin
      for j := 0 to n - 1 do 
       write(s[i, j] : 4, ' ');
      writeln;
     end; 
    END.
     
    #105 bons, 9 Jul 2009
    Last edited: 9 Jul 2009
    1 person likes this.
  6. Fata1ex

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

    Joined:
    12 Dec 2006
    Messages:
    703
    Likes Received:
    300
    Reputations:
    38
    bons, это, конечно, замечательно, что ты знаешь паскаль, но, к сожалению, тема называется [C/C++] ЗАДАНИЯ :(
    Тем более, что решение все равно не верное. Повторяю: размерность нужно ввести с клавиатуры!
     
  7. fker

    fker Member

    Joined:
    26 Nov 2008
    Messages:
    135
    Likes Received:
    64
    Reputations:
    -1
    \\ChaOs//
    решение верно
    моё
    Code:
    #include<stdio.h>
    #include<conio.h>
    void main()
    {
    clrscr();
    int n;
    int **a;
    int v,g,j,i=1;
    printf("BBegu n -> ");
    scanf("%d",&n);
    a=new int*[n];
    for(v=0; v<n; v++)
       a[v]=new int[n];
    g=n/2+1;
    for(v=1; v<=g; v++){
       for(j=v-1; j<n-v+1; a[v-1][j]=i++, j++);
       for(j=v; j<n-v+1; a[j][n-v]=i++, j++);
       for(j=n-v-1; j>=v-1; a[n-v][j]=i++, --j);
       for(j=n-v-1; j>=v;  a[j][v-1]=i++, --j);
       }
    for(i=0; i<n; i++){
       for(j=0; j<n; j++)
          printf("%3d",a[i][j]);
       printf("\n\n");
       }
    getch();
    }
    
    \\fixed =)
     
    #107 fker, 9 Jul 2009
    Last edited: 9 Jul 2009
  8. Fata1ex

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

    Joined:
    12 Dec 2006
    Messages:
    703
    Likes Received:
    300
    Reputations:
    38
    fker, омг, а если число будет больше 100? Это детский сад, а не решение ) Или уже делать размерность константой изначально или вводить с клавиатуры и использовать динамический массив или векторы.
     
  9. bons

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

    Joined:
    20 Dec 2007
    Messages:
    286
    Likes Received:
    121
    Reputations:
    21
    и правда, не заметил )) ну и пусть, алгоритм все равно верный хоть и не лаконичный
     
  10. \\ChaOs//

    \\ChaOs// Member

    Joined:
    26 Feb 2009
    Messages:
    102
    Likes Received:
    26
    Reputations:
    5
    Если n - нечетное, то массив заполнится не до конца
     
  11. Fata1ex

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

    Joined:
    12 Dec 2006
    Messages:
    703
    Likes Received:
    300
    Reputations:
    38
    \\ChaOs//, верное решение, молодец :)

    2 18
    в задании 18 осталось указать еще один вариант решения
     
  12. fker

    fker Member

    Joined:
    26 Nov 2008
    Messages:
    135
    Likes Received:
    64
    Reputations:
    -1
    тоже верно, не учел..
    вопросик возник:
    можно ли с помощью cout<< делать форматный вывод, типа printf("%3d",a) ?
     
  13. \\ChaOs//

    \\ChaOs// Member

    Joined:
    26 Feb 2009
    Messages:
    102
    Likes Received:
    26
    Reputations:
    5
    Если действия выполняются в функции, то можно просто возвратить значение

    Пример:
    Code:
    int Func()
    {
    while(true)
    {
    ...//Что-то
    if(что-то==чему-то)
    return что-то;
    }
    }
     
  14. Fata1ex

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

    Joined:
    12 Dec 2006
    Messages:
    703
    Likes Received:
    300
    Reputations:
    38
    А если нам нужно продолжить выполнение функции после выхода из циклов? Не пойдет.
    Для таких вопросов существует отдельная тема.
     
    #114 Fata1ex, 9 Jul 2009
    Last edited: 9 Jul 2009
  15. \\ChaOs//

    \\ChaOs// Member

    Joined:
    26 Feb 2009
    Messages:
    102
    Likes Received:
    26
    Reputations:
    5
    Ну тогда можно сгенерировать исключение.
     
  16. Fata1ex

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

    Joined:
    12 Dec 2006
    Messages:
    703
    Likes Received:
    300
    Reputations:
    38
    дадада
     
  17. Fata1ex

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

    Joined:
    12 Dec 2006
    Messages:
    703
    Likes Received:
    300
    Reputations:
    38
    Объясните мне, почему никто не делает задание 2? ))
     
  18. jawbreaker

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

    Joined:
    7 Jul 2008
    Messages:
    156
    Likes Received:
    76
    Reputations:
    3
    Если вы написали

    Code:
    class Empty {};

    то, знайте, что на самом деле вы создали примерно вот такой класс:

    Code:
    class Empty {
    public:
      // Конструктор без параметров
      Empty();
      // Копирующий конструктор
      Empty(const Empty &);
      // Деструктор
      ~Empty();
      // Оператор присвоения
      Empty& operator=(const Empty &);
      // Оператор получения адреса
      Empty * operator&();
      // Оператор получения адреса константного объекта
      const Empty * operator&() const;
    };
    ну и дальше понятно
     
    1 person likes this.
  19. pantur

    pantur New Member

    Joined:
    3 Nov 2008
    Messages:
    5
    Likes Received:
    2
    Reputations:
    0
    Отличный раздел, только вот неплохо было бы не использовать WinAPI. Или, как минимум, делать задания и с POSIX-функциями.

    Хм, почему задание 6 такое лёгкое сделали, там же gcc ругается при -Wall, даже думать не надо?

    P.S.: да, предлагаю задачку (на чистом C!) - как за любое кол-во проходов определить, что мы находимся в кольцевом списке? Список односвязный. Если честно, я и сам хреново представляю, как это сделать, задачу предложил мой гуру :)

    P.P.S.: пожалуйста, добавьте ещё заданий, а то я, как человек корыстный и решивший получить репутацию и похвалиться своими знаниями, был неприятно удивлён тем, что все задания на сях уже решены...
     
    #119 pantur, 27 Aug 2009
    Last edited: 28 Aug 2009
  20. desTiny

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

    Joined:
    4 Feb 2007
    Messages:
    1,006
    Likes Received:
    444
    Reputations:
    94
    Вот ещё попалось. Найти ошибку в коде, который должен прочитать число из файла как 4 байта по смещению 0x123:
    Code:
    FILE *f;
    fopen_s(&f, szFileName, "r+");
    if (f){
      int offset = 0x123;
      fseek(f, offset, SEEK_SET);
      int num;
      fread(&num, 4, 1, f);
      printf("%d\n", num);
      fclose(f);
    }
    
    Известная задачка - запускаем 2 указатаеля, один будет просматривать все записи подряд, второй - через одну. Если они когда-то совпадут, то зациклились, если пройдём до конца и не совпадут, то не зациклились. Работает за O(размер списка) времени и O(1) памяти