Модераторы: Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [PHP] магический квадрат 
V
    Опции темы
Dmi3ev
Дата 9.12.2008, 15:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1698
Регистрация: 28.11.2007

Репутация: 5
Всего: 41



Обнаглею я в конец))) Еще одна задача. Матрица 4х4 или 3х3, разницы нет, надо проверить, является ли она магическим квадратом. Вот с эти потруднее, я на перле только начал недавно, поэтому, как задавать матрицу 3х3 не знаю, а на рнр вообще вариантов нет))) вообщем задача та же:
1. Ввод матрицы 3х3 (через форму).
2. Проверка, является ли она магическим квадратом (суммы в строках равны суммам в столбцах, равны суммам на диагоналях), думаю это ясно.
Пожалуйста, я знаю, что это не трудно, но правда до завтра все должно быть иначе - *опа.

Добавлено через 5 минут и 32 секунды
Код

//...
if (check(**m))
 cout<<"Является"<<endl;
else
 cout<<"Не является"<<endl;
//...

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


--------------------

PM MAIL   Вверх
Aliance
Дата 9.12.2008, 16:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: нет
Всего: 137



Прочти мануал, там подробно все расписано.

Код

// вот так задается многомерный массив:
$nums = array ( array ( 3, 5, 13 ), array ( 54, 0, -13 ), array ( 43, -2, 165 ), );

// вот так находится сумма строк:
$sum_str = array();
for ( $i = 0; $i < count( $nums ); $i++ )
{
    for ( $j = 0; $j < count( $nums[ $i ] ); $j++ )
    {
        $sum_str[ $i ] = $sums[ $i ][ $j ];
    }
}

// $sum_str[0] - сумма элементов первой строки
// $sum_str[1] - сумма элементов второй строки
// $sum_str[2] - сумма элементов третьей строки


И так далее. Если задача не подразумевает расширения - вообще все ручками можно организовать.
PM MAIL WWW ICQ Skype   Вверх
NLspieler
Дата 9.12.2008, 16:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 619
Регистрация: 13.10.2008
Где: Берлин

Репутация: нет
Всего: 19



Вот
Код

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Проверка магичности квадрата 3х3.</title>
</head>

<body>
<form method="POST">
    <p align="left">  
<input type="text"   name="a1" size="7" class="text" maxlength="7" value="<?php echo $_POST['a1'];  ?>" >
<input type="text"   name="a2" size="7" class="text" maxlength="7" value="<?php echo $_POST['a2'];  ?>" >
<input type="text"   name="a3" size="7" class="text" maxlength="7" value="<?php echo $_POST['a3'];  ?>" >
<br />
<input type="text"   name="b1" size="7" class="text" maxlength="7" value="<?php echo $_POST['b1'];  ?>" >
<input type="text"   name="b2" size="7" class="text" maxlength="7" value="<?php echo $_POST['b2'];  ?>" >
<input type="text"   name="b3" size="7" class="text" maxlength="7" value="<?php echo $_POST['b3'];  ?>" >
<br />
<input type="text"   name="c1" size="7" class="text" maxlength="7" value="<?php echo $_POST['c1'];  ?>" >
<input type="text"   name="c2" size="7" class="text" maxlength="7" value="<?php echo $_POST['c2'];  ?>" >
<input type="text"   name="c3" size="7" class="text" maxlength="7" value="<?php echo $_POST['c3'];  ?>" >
<br /><br />
      <input type="submit" name="submit" value="submit" />
      
</form> 
<br /><br />

<?php
      
if ( $_POST['submit']=="submit" )
{
    $a1 = $_POST['a1'] ;
    $a2 = $_POST['a2'] ;
    $a3 = $_POST['a3'] ;
  
    $b1 = $_POST['b1'] ;
    $b2 = $_POST['b2'] ;
    $b3 = $_POST['b3'] ;
    
    $c1 = $_POST['c1'] ;
    $c2 = $_POST['c2'] ;
    $c3 = $_POST['c3'] ;
    
    $sum = $a1+$a2+$a3 ;
    if ($b1+$b2+$b3<>$sum) $x++ ;
    if ($c1+$c2+$c3<>$sum) $x++ ;
    
    if ($a1+$b1+$c1<>$sum) $x++ ;
    if ($a2+$b2+$c2<>$sum) $x++ ;
    if ($a3+$b3+$c3<>$sum) $x++ ;
    
    if ($a1+$b2+$c3<>$sum) $x++ ;
    if ($a3+$b2+$c1<>$sum) $x++ ;
    
    if ($x==0) echo "Квадрат магический <br /> Магическая константа: $sum" ;
    if ($x>0) echo "Квадрат не магический"  ;
    
}
 
?>
</body>
</html>


PM MAIL   Вверх
Dmi3ev
Дата 9.12.2008, 17:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1698
Регистрация: 28.11.2007

Репутация: 5
Всего: 41




вообщем, допустим у меня есть вот такая форма (накидал для примера)
Код

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Untitled Document</title>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
</head>

<body>
Матрица:
<form name="form1" method="post" action="">
  <p>
    <input name="textfield" type="text" size="5">
    <input name="textfield2" type="text" size="5">
    <input name="textfield3" type="text" size="5">
</p>
  <p>
    <input name="textfield4" type="text" size="5">
    <input name="textfield5" type="text" size="5">
    <input name="textfield6" type="text" size="5">
  </p>
  <p>
    <input name="textfield7" type="text" size="5">
    <input name="textfield8" type="text" size="5">
    <input name="textfield9" type="text" size="5"> 
  </p>
  <p>
    <input type="submit" name="Submit" value="Submit">
</p>
  <p>&nbsp;</p>
</form>
</body>
</html>






--------------------

PM MAIL   Вверх
Dmi3ev
Дата 9.12.2008, 17:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1698
Регистрация: 28.11.2007

Репутация: 5
Всего: 41



Aliance, а это разве увеличивает???
Цитата

  $sum_str[ $i ] = $sums[ $i ][ $j ];

просто, по-моему должно быть нечто вроде:
Код

 $sum_str[ $i ]+ = $sums[ $i ][ $j ];


Добавлено через 1 минуту и 54 секунды
тупанул)))


--------------------

PM MAIL   Вверх
skyboy
Дата 9.12.2008, 17:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 5
Всего: 260



Для домашних заданий, курсовых, существует "Центр Помощи".

Тема перенесена! 
PM MAIL   Вверх
Dmi3ev
Дата 9.12.2008, 17:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1698
Регистрация: 28.11.2007

Репутация: 5
Всего: 41



Код

// вот так задается многомерный массив:
$nums = array ( array ( 3, 5, 13 ), array ( 54, 0, -13 ), array ( 43, -2, 165 ), );
// вот так находится сумма строк:
$sum_str = array();
for ( $i = 0; $i < count( $nums ); $i++ )
{
    for ( $j = 0; $j < count( $nums[ $i ] ); $j++ )
    {
        $sum_str[ $i ] = $sums[ $i ][ $j ];
    }
}
// $sum_str[0] - сумма элементов первой строки
// $sum_str[1] - сумма элементов второй строки
// $sum_str[2] - сумма элементов третьей строки
// по аналогии
$sum_col=array();
for ( $i = 0; $i < count( $nums ); $i++ )
{
    for ( $j = 0; $j < count( $nums[ $i ] ); $j++ )
    {
        $sum_col[ $i ] = $sums[ $j ][ $i ];
    }
}
// по ходу так
// диагонали
$sum_d1=0;
for ( $i = 0; $i < count( $nums ); $i++ )
{
 $sum_d1=$sum_d1+$nums[ $i ][ $i ];
}
//не знаю можно в рнр $sum_d1+=$sums[ $i ][$i] или нет
$sum_d2=0;
for ( $i = 0; $i < count( $nums ); $i++ )
{
 $sum_d1=$sum_d1+$nums[$i][ count( $nums )-($i+1)];
}
//как-то так, ведь count возвращает количество, я так понимаю
$mybool=1;
for ( $i = 0; $i < count( $nums ); $i++ )
 { 
  if ($sum_str[ $i ]==$sum_col[ $i ] && $sum_col[ $i ]==$sum_d1 && $sum_col[ $i ]=$sum_d1)
   {};//типа все ок
  else
   $mybool=0;
 }
if ($mybool=1)
//печатаем, что маг. квадрат
else
//печатаем, что немаг. квадрат

а что-то типа этого можете подсказать


--------------------

PM MAIL   Вверх
bars80080
Дата 9.12.2008, 21:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 8
Всего: 315



ну, лажа то видна сразу - $nums[1][1] = $_POST['a1'] ; и for ( $i = 0; - массивы у тебя не имеют нулевых элементов, а крутить ты начинаешь с них

в целом много заморочек, легче самому написать:

Код
<?php
$stage = ''; 
$html = '';
$razm1 = ''; 
$new_stage = 1;

if(!empty($_POST['stage'])) {
    $stage = preg_replace('/[^0-9]/', '', $_POST['stage']);
}

if($stage == 2) {
    if(!empty($_POST['razm'])) {
        $razm1 = preg_replace('/[^0-9]/', '', $_POST['razm']);
        if($razm1 > 1 && $razm1 < 21) {
            $sumstr = array();
            for($i = 0; $i < $razm1; $i++) {
                $sumstr[$i] = 0;
                for($j = 0; $j < $razm1; $j++) {
                    if(empty($_POST['a'][$i][$j])) $q = 0;
                    else { $q = preg_replace('/[^0-9]/', '', $_POST['a'][$i][$j]); }
                    if(empty($q)) $q = 0;
                    $sumstr[$i] += $q;
                }
                $html .= 'сумма в строке '.$i.': '.$sumstr[$i].'<br />';
            }
            for($i = 0; $i < $razm1; $i++) {
                $sumcol[$i] = 0;
                for($j = 0; $j < $razm1; $j++) {
                    if(empty($_POST['a'][$j][$i])) $q = 0;
                    else { $q = preg_replace('/[^0-9]/', '', $_POST['a'][$j][$i]); }
                    if(empty($q)) $q = 0;
                    $sumcol[$i] += $q;
                }
                $html .= 'сумма в столбце '.$i.': '.$sumcol[$i].'<br />';
            }
            $quad = true;
            for($i = 0; $i < $razm1; $i++) {
                if($sumstr[$i] != $sumcol[$i]) { $quad = false; }
            }
            if($quad) { $html .= 'квадрат магический <br />'; }
            else { $html .= 'квадрат не магический <br />'; }
        }
        else $razm1 = '';
    }
    $stage = '';
}
if($stage == 1) {
    if(!empty($_POST['razm'])) {
        $razm1 = preg_replace('/[^0-9]/', '', $_POST['razm']);
        if($razm1 > 1 && $razm1 < 21) {
            $html .= 'Введите элементы матрицы: <table>';
            for($i = 0; $i < $razm1; $i++) {
                $html .= '<tr>';
                for($j = 0; $j < $razm1; $j++) {
                    $html .= '<td><input name="a['.$i.']['.$j.']" class="m" /></td>';
                }
                $html .= '</tr>';
            }
            $html .= '</table><input type="hidden" name="razm" value="'.$razm1.'" />';
            $new_stage = 2;
        }
        else $razm1 = '';
    }
    if(empty($razm1)) { $stage = ''; }
}
if(empty($stage)) {
    $html .= 'Введите размерность матрицы (до 20):<br />';
    $html .= '<input name="razm" />';
}

?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />
<title>Проверка магичности квадрата 3х3.</title>
<style>
input.m { width: 20px; }
</style>
</head>
<body>
<form method="post">
<?php echo $html; ?>
<input type="hidden" name="stage" value="<?php echo $new_stage; ?>" />
<input type="submit" name="submit" value="submit" />
</form> 
</body>
</html>

PM MAIL WWW   Вверх
svs888
Дата 20.4.2010, 07:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 12.11.2009
Где: Россия

Репутация: нет
Всего: нет



www.urlskit.com/magic/ Магический квадрат.
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.0581 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.