ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2

ANTICHAT — форум по информационной безопасности, OSINT и технологиям

ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию. Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club, и теперь снова доступен на новом адресе — forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
Вернуться   Форум АНТИЧАТ > Программирование > С/С++, C#, Delphi, .NET, Asm
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

  #101  
Старый 09.07.2009, 13:27
fker
Участник форума
Регистрация: 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;
           }
     }
 
Ответить с цитированием

  #102  
Старый 09.07.2009, 13:31
Fata1ex
Постоянный
Регистрация: 12.12.2006
Сообщений: 906
Провел на форуме:
4205500

Репутация: 930


По умолчанию

Ладно
Есть третий вариант.
 
Ответить с цитированием

  #103  
Старый 09.07.2009, 13:31
\\ChaOs//
Познающий
Регистрация: 26.02.2009
Сообщений: 65
Провел на форуме:
583734

Репутация: 34
Отправить сообщение для \\ChaOs// с помощью ICQ
По умолчанию

Цитата:
Сообщение от 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.. Причина: Окончательный вариант
 
Ответить с цитированием

  #104  
Старый 09.07.2009, 13:33
Fata1ex
Постоянный
Регистрация: 12.12.2006
Сообщений: 906
Провел на форуме:
4205500

Репутация: 930


По умолчанию

\\ChaOs//, размерность нужно ввести, а не задать изначально.
 
Ответить с цитированием

  #105  
Старый 09.07.2009, 14:13
bons
Участник форума
Регистрация: 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..
 
Ответить с цитированием

  #106  
Старый 09.07.2009, 14:28
Fata1ex
Постоянный
Регистрация: 12.12.2006
Сообщений: 906
Провел на форуме:
4205500

Репутация: 930


По умолчанию

bons, это, конечно, замечательно, что ты знаешь паскаль, но, к сожалению, тема называется [C/C++] ЗАДАНИЯ
Тем более, что решение все равно не верное. Повторяю: размерность нужно ввести с клавиатуры!
 
Ответить с цитированием

  #107  
Старый 09.07.2009, 14:30
fker
Участник форума
Регистрация: 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.. Причина: динамич массив
 
Ответить с цитированием

  #108  
Старый 09.07.2009, 14:34
Fata1ex
Постоянный
Регистрация: 12.12.2006
Сообщений: 906
Провел на форуме:
4205500

Репутация: 930


По умолчанию

fker, омг, а если число будет больше 100? Это детский сад, а не решение ) Или уже делать размерность константой изначально или вводить с клавиатуры и использовать динамический массив или векторы.
 
Ответить с цитированием

  #109  
Старый 09.07.2009, 14:48
bons
Участник форума
Регистрация: 20.12.2007
Сообщений: 295
Провел на форуме:
1777055

Репутация: 347
По умолчанию

Цитата:
Сообщение от Fata1ex  
bons, это, конечно, замечательно, что ты знаешь паскаль, но, к сожалению, тема называется [C/C++] ЗАДАНИЯ
Тем более, что решение все равно не верное. Повторяю: размерность нужно ввести с клавиатуры!
и правда, не заметил )) ну и пусть, алгоритм все равно верный хоть и не лаконичный
 
Ответить с цитированием

  #110  
Старый 09.07.2009, 14:51
\\ChaOs//
Познающий
Регистрация: 26.02.2009
Сообщений: 65
Провел на форуме:
583734

Репутация: 34
Отправить сообщение для \\ChaOs// с помощью ICQ
По умолчанию

Цитата:
Сообщение от 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)
 


Быстрый переход




ANTICHAT.XYZ