ANTICHAT — форум по информационной безопасности, OSINT и технологиям
ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию.
Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club,
и теперь снова доступен на новом адресе —
forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
 |
|

09.07.2009, 13:27
|
|
Участник форума
Регистрация: 26.11.2008
Сообщений: 158
Провел на форуме: 2816163
Репутация:
158
|
|
Задание 18.
Привести два эффективных варианта выхода из большого количества вложенных циклов без использования операторов break.
1. использовать метки и оператор goto
2. создать переменную-флаг и проверять в каждом цикле не равна ли она значению, для выхода из цикла
например:
Код:
int flag=0;
for(i=z; i<n && flag!=1; i++){
blabla;
for( ; df!=n && flag!=1;)
if(что то)
flag=1;
}
}
|
|
|

09.07.2009, 13:31
|
|
Постоянный
Регистрация: 12.12.2006
Сообщений: 906
Провел на форуме: 4205500
Репутация:
930
|
|
Ладно 
Есть третий вариант.
|
|
|

09.07.2009, 13:31
|
|
Познающий
Регистрация: 26.02.2009
Сообщений: 65
Провел на форуме: 583734
Репутация:
34
|
|
Сообщение от fker
Код:
1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 7
Код:
#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;
}
Последний раз редактировалось \\ChaOs//; 09.07.2009 в 16:13..
Причина: Окончательный вариант
|
|
|

09.07.2009, 13:33
|
|
Постоянный
Регистрация: 12.12.2006
Сообщений: 906
Провел на форуме: 4205500
Репутация:
930
|
|
\\ChaOs//, размерность нужно ввести, а не задать изначально.
|
|
|

09.07.2009, 14:13
|
|
Участник форума
Регистрация: 20.12.2007
Сообщений: 295
Провел на форуме: 1777055
Репутация:
347
|
|
мой вариант про спираль на поцкале:
Код:
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; 09.07.2009 в 14:37..
|
|
|

09.07.2009, 14:28
|
|
Постоянный
Регистрация: 12.12.2006
Сообщений: 906
Провел на форуме: 4205500
Репутация:
930
|
|
bons, это, конечно, замечательно, что ты знаешь паскаль, но, к сожалению, тема называется [C/C++] ЗАДАНИЯ 
Тем более, что решение все равно не верное. Повторяю: размерность нужно ввести с клавиатуры!
|
|
|

09.07.2009, 14:30
|
|
Участник форума
Регистрация: 26.11.2008
Сообщений: 158
Провел на форуме: 2816163
Репутация:
158
|
|
\\ChaOs//
решение верно
моё
Код:
#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; 09.07.2009 в 14:54..
Причина: динамич массив
|
|
|

09.07.2009, 14:34
|
|
Постоянный
Регистрация: 12.12.2006
Сообщений: 906
Провел на форуме: 4205500
Репутация:
930
|
|
fker, омг, а если число будет больше 100? Это детский сад, а не решение ) Или уже делать размерность константой изначально или вводить с клавиатуры и использовать динамический массив или векторы.
|
|
|

09.07.2009, 14:48
|
|
Участник форума
Регистрация: 20.12.2007
Сообщений: 295
Провел на форуме: 1777055
Репутация:
347
|
|
Сообщение от Fata1ex
bons, это, конечно, замечательно, что ты знаешь паскаль, но, к сожалению, тема называется [C/C++] ЗАДАНИЯ 
Тем более, что решение все равно не верное. Повторяю: размерность нужно ввести с клавиатуры!
и правда, не заметил )) ну и пусть, алгоритм все равно верный хоть и не лаконичный
|
|
|

09.07.2009, 14:51
|
|
Познающий
Регистрация: 26.02.2009
Сообщений: 65
Провел на форуме: 583734
Репутация:
34
|
|
Сообщение от fker
моё(со статич массивом)
Если n - нечетное, то массив заполнится не до конца
|
|
|
|
 |
|
Похожие темы
|
| Тема |
Автор |
Раздел |
Ответов |
Последнее сообщение |
|
[PHP] ЗАДАНИЯ от Krist_ALL
|
Krist_ALL |
PHP, PERL, MySQL, JavaScript |
205 |
30.11.2009 18:31 |
|
Задания
|
~Fenix~ |
Болталка |
11 |
13.05.2006 11:03 |
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|