1. использовать метки и оператор goto 2. создать переменную-флаг и проверять в каждом цикле не равна ли она значению, для выхода из цикла например: Code: int flag=0; for(i=z; i<n && flag!=1; i++){ blabla; for( ; df!=n && flag!=1;) if(что то) flag=1; } }
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; }
мой вариант про спираль на поцкале: 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.
bons, это, конечно, замечательно, что ты знаешь паскаль, но, к сожалению, тема называется [C/C++] ЗАДАНИЯ Тем более, что решение все равно не верное. Повторяю: размерность нужно ввести с клавиатуры!
\\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 =)
fker, омг, а если число будет больше 100? Это детский сад, а не решение ) Или уже делать размерность константой изначально или вводить с клавиатуры и использовать динамический массив или векторы.
тоже верно, не учел.. вопросик возник: можно ли с помощью cout<< делать форматный вывод, типа printf("%3d",a) ?
Если действия выполняются в функции, то можно просто возвратить значение Пример: Code: int Func() { while(true) { ...//Что-то if(что-то==чему-то) return что-то; } }
А если нам нужно продолжить выполнение функции после выхода из циклов? Не пойдет. Для таких вопросов существует отдельная тема.
Если вы написали Code: class Empty {}; то, знайте, что на самом деле вы создали примерно вот такой класс: Code: class Empty { public: // Конструктор без параметров Empty(); // Копирующий конструктор Empty(const Empty &); // Деструктор ~Empty(); // Оператор присвоения Empty& operator=(const Empty &); // Оператор получения адреса Empty * operator&(); // Оператор получения адреса константного объекта const Empty * operator&() const; }; ну и дальше понятно
Отличный раздел, только вот неплохо было бы не использовать WinAPI. Или, как минимум, делать задания и с POSIX-функциями. Хм, почему задание 6 такое лёгкое сделали, там же gcc ругается при -Wall, даже думать не надо? P.S.: да, предлагаю задачку (на чистом C!) - как за любое кол-во проходов определить, что мы находимся в кольцевом списке? Список односвязный. Если честно, я и сам хреново представляю, как это сделать, задачу предложил мой гуру P.P.S.: пожалуйста, добавьте ещё заданий, а то я, как человек корыстный и решивший получить репутацию и похвалиться своими знаниями, был неприятно удивлён тем, что все задания на сях уже решены...
Вот ещё попалось. Найти ошибку в коде, который должен прочитать число из файла как 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) памяти