• ベストアンサー

C言語の課題丸投げ

C言語の課題丸投げ 5×5の魔方陣を作成するという課題なのですが、手順があります。 (1)配列を用意する (2)配列を初期化(0クリア)する。 (3)配列添字にスタート位置をセットする。 (4)法則に従い、配列に魔方陣データをセットする (5)配列を画面に表示する  (二重ループ) 以上です。わかる方がいたらお手数ですが、ソースコードだけでいいので、教えてください。 お願いします。

  • dokbc
  • お礼率38% (8/21)

質問者が選んだベストアンサー

  • ベストアンサー
  • zuntac
  • ベストアンサー率36% (45/124)
回答No.10

> このようなニーズが多いので、宿題代行サービスが、 > 事業として成り立つなら、それもよいかと考えています。 私も同様のことを考えたことがありますが、 問題の難度が低いと「世の中の答えたくてしょうがない人々」により 回答が無料で与えられてしまいますし、 難度が高いと環境の設定など手間と時間がかかりますし、有料に するとサポートの問題が出てくるのでかなりの高額になるかと。 でも、単純な言語の文法上の問題で、保障無しということならば、 1日以内に必ず有識者の回答が得られるという条件なら1,000円から 3,000円の範囲で払ってよいかと私は思います。 でも、学生はこんなサービスを利用しないで、この便利なネットを 使って情報収集して問題を自力解決すべきですね。

dokbc
質問者

お礼

ごもっともですね、ごめんなさい。もうネットに勉強を丸投げするのはやめます。

その他の回答 (9)

  • tatsu99
  • ベストアンサー率52% (391/751)
回答No.9

質問者様への質問です。 このようなニーズが多いので、宿題代行サービスが、事業として成り立つなら、 それもよいかと考えています。 参考までに、もし、宿題代行サービスがあるとして、この課題をきちんとやってくれるなら、 いくらまでなら支払っても良いと考えてますでしょうか。 (もちろん、只じゃないとやだ!というのでかまいません)

  • ohtawa
  • ベストアンサー率23% (9/38)
回答No.8

プログラムをつくる前にまず魔方陣の法則つまり方法知ることですね いろいろな方法がありますが 自由度のかなり高いものとしては A B C D E に 1 2 3 4 5 を任意の順序で割り当て F G H I J に 0 5 10 15 20 を任意の順序で割り当て 前者は二つずらしの循環で方陣を作り 後者は三つずらしの循環で方陣を作り この方陣を行列として加算すれば5×5の方陣ができあがる プログラムコードでは前者と後者に対して配列を各ひとつ合計 配列を二つ作り この二つの配列を加算して その二つの配列を表示すれば終了です A B C D E C D E A B E A B C D B C D E A D E A B C + F G H I J I J F G H G H I J F J F G H I H I J F G

  • php504
  • ベストアンサー率42% (926/2160)
回答No.7

もちろんネタの回答しかしていません おそらく法則は斜め上に値を埋めていくやつでしょう

  • jacta
  • ベストアンサー率26% (845/3158)
回答No.5

こういうこと? int array[5][5] = { 0 }; // (1)および(2) for (int i = 0; i < 5; i++) // (3)  for (int j = 0; j < 5; j++) // (3)   array[i][j] = 法則(i, j); // (4) for (int i = 0; i < 5; i++)  for(int j = 0; j < 5; j++)   画面に表示(i, j, array[i][j]); // (5) 法則不明ですし、処理系不明のために画面への表示方法もわかりません。

  • wisize
  • ベストアンサー率42% (37/87)
回答No.4

法則が課題側で指定されているのでしたら、 それを知らない人に解けというのは無理があるのでは……。 一般的によく知られる法則による魔方陣の作り方ならば 適当にぐぐればいくらでもサンプルが出てくるのでソースコードは割愛いたしますが、 それでも細かい手順に差異などがありますので、改造は必要かと思いますよ? 書けというのならば大した手間ではないので書きますが、 4の条件が不明なので提出できるものにはならないと思います。 もちろん自分だけではなく、他の皆さんも含めて。

  • php504
  • ベストアンサー率42% (926/2160)
回答No.3

(4)で下の関数を呼び出す /***** square[y][x]を1にした5x5の魔法陣を作ります *****/ int magic_square(int square[5][5], int x, int y) { int array_1[5] = {1,2,3,4,5}; int array_2[5] = {0,5,10,15,20}; int magic_square_array_1[5][5] = { 0,1,2,3,4, 2,3,4,0,1, 4,0,1,2,3, 1,2,3,4,0, 3,4,0,1,2, }; int magic_square_array_2[5][5] = { 0,1,2,3,4, 3,4,0,1,2, 1,2,3,4,0, 4,0,1,2,3, 2,3,4,0,1, }; int j, k; int start; int swap; if (x < 0 || x > 4 || y < 0 || y > 4) { return -1; } start = magic_square_array_1[y][x]; swap = array_1[start]; array_1[start] = array_1[0]; array_1[0] = swap; start = magic_square_array_2[y][x]; swap = array_2[start]; array_2[start] = array_2[0]; array_2[0] = swap; for (j = 0 ; j < 5 ; j++) { for (k =0; k< 5 ; k++) { square[j][k] = array_1[ magic_square_array_1[j][k] ] + array_2[ magic_square_array_2[j][k] ]; } } return 0; }

  • ymt3
  • ベストアンサー率18% (253/1379)
回答No.2

ccccc ccccc ccccc ccccc ccccc

  • abaca
  • ベストアンサー率40% (43/106)
回答No.1

Cは最近使っていないので確かではありませんが、おおよそ次のようになると思います。 また魔方陣の法則も知りませんから適当に書いておきます。動作確認はしていません。 int mahojin[5][5]; main() { int x,y,j,k; int shokichi = 1; /*1じゃ無いかも?*/ /*初期化*/  for (j = 0 ; j < 5 ; j++) {   for (k =0; k< 5 ; k++) {       mahojin[j][k] = 0;     }  }  /*開始位置の入力*/  printf("スタートの横位置を入力してください");  x = gethchar();  printf("スタートの縦位置を入力してください");  y = getchar();  mahojin[x][y] = shokichi;  for (k = 1 ; k < 25 ; k++) { /* 法則にしたがって配列に魔方陣データをセットする 。 例えば*/      x++;if (x > 4 ) x = 0;      y--;if (y < 0 ) y = 4;      mahojin[x][y] = shokichi++;  }  /*表示する*/  for (j = 0 ; j < 5 ; j++) {    for (k =0; k< 5 ; k++) {     printf("%02d",mahojin[j][k]);    }    printf("\n");  }  printf("\n"); }

関連するQ&A

  • C言語初心者です。

    C言語初めて壁にぶち当たりました。下の問題がとけません。よろしくお願いします。 標準入力から整数値を4個,int型の配列へ読み込んで,これかの値を大きい順に配列上で並び替え,出力するプログラムを作成してください。ただし,for文の2重ループを必ず使用してください。

  • C言語を用いた3×3の平方行列と列ベクトルの積

    C言語を最近始めたのですが3×3の平方行列と列ベクトルの掛け算の方法が分からず困っています。 問題は{{1,4,2},{6,7,2},{3,9,4}}×{{3},{8},{5}}を配列とfor文のみでとけという問題です。 2重ループを使うのはなんとなくわかるのですが使い方がわからずなにがなんだかさっぱりですよければ教えてください。

  • 【C言語を教えてください!】2次元配列について

    【C言語を教えてください!】2次元配列について 2次元配列を用いて、コンソール画面(ターミナル)の中央付近に*を表示させるプログラムを作りたいのですがさっぱり分かりません。 画面の大きさは半角で横80 縦25です。 25は奇数ですので40×12に表示したいと思います。 2重ループでなら出来たのですが配列でのやり方がわかりません。 #include<stdio.h> main() { int i,j; for(i=0;i<25;i++){ for(j=0;j<80;j++){ if(i==12&j==39){ putchar('*'); }else{ putchar(' '); } } } return 0; } 回答お願いします!

  • C言語のプログラミング 配列について

    C言語の課題でわからないところがあって困ってます。ちなみに初心者です。 int i; //添え字 for(i=0;i<○;i+=16){ //○はデーター数 a[2*i]=b[i]; a[2*i+1]=b[i+1]; a[2*i+2]=b[i+2]; a[2*i+3]=b[i+3]; : a[2*i+15]=b[i+15]; a[2*i+16]=c[i]; a[2*i+17]=c[i+1]; a[2*i+18]=c[i+2]; a[2*i+19]=c[i+3]; : a[2*i+31]=b[i+15]; } という風な配列がありまして、これをすっきりまとめたいのですが どうもエラーか配列aにNULLばかりはいってしまって上手くいきません。 どうすればよいのか教えてください。よろしくお願いします。

  • C言語で制作するピラミッドアートについて

    C言語で制作するピラミッドアートについて 私は今、専門学校に通っています。そこでC言語を習っているのですが、数値を入力し、 その個数分*を一辺とする正方形・三角形・逆三角形・三角旗・ダイヤ型・六角形・星 型などのピラミッドアートを描画する課題が出されました。 二重ループなどを上手く使えば出来ると言われ、教科書なども読みましたが、あまり上 手く理解できず、上手くいかなくて困っています。 どうすれば良いのでしょうか? 何か良い解決策やヒント、またはそれについて詳しい方法が書かれてあるサイトや参考 書がありましたら、教えて下さい。

  • C言語での開発環境での線の扱い方

    C言語での開発環境での線の扱い方 TSP問題を考えています。 1:2次元配列で座標(今回は5点程度)を用意。 (例)sorce[4][4]={{0,1},{3,8},{2,4},{2,7},{8,2}} 2:任意の点をスタート位置に設定。 3:座標同士の距離を計測(ユークリッド距離)。 4:(2)のうち最短距離を選ぶ。 ここまでできています。 これからアルゴリズムとしては、 5:任意のスタート位置から最短距離にある座標を線で繋ぐ。 6:繋いだ先の座標から最短距離にある座標を線で繋ぐ(これを繰り返す。)。 7:もし線の交差があれば、交差している座標間で線を入れ替える。 この処理を行いたいのですが、まず線を引くような、処理をどうやったらC言語で行えるのか(実際に線を引いて出力するわけではありません。)がわかりません。 ですので、5番の方法だけでも結構ですので、教えてください。よろしくお願いします。

  • flaot配列の値格納について

    すみませんC言語の初心者ですが、教えて頂きたいことがあります。 floatの二次元配列に、すべて同じ値をセットしたいのですが この場合、for で配列分ループさせて値をセットするしか ないのでしょうか? memesetのように、セットする方法はないのでしょうか? 宜しくお願いします。

  • コンマで区切られた、数値と文字列を含むファイルの入出力(C言語)

    C言語に関する質問があります。 数値と文字列を含む外部ファイルを読み込みたいのですが、方法が分かりません。もし良いアイディアを思いついた方、頭の良い方はぜひ回答よろしくお願いします。 外部ファイルは、以下のデータを1セットとして、この1セットのデータが改行されて、何千行もあるファイルです。 1セットのデータは41個の属性からなり、コンマで区切られています。 文字列のデータと、数値データ(連続値)からなります。 0,tcp,smtp,SF,829,327,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,1,0.00,0.00,0.00,0.00,1.00,0.00,0.00,8,113,0.88,0.25,0.12,0.02,0.00,0.00,0.00,0.00 ↓ 0,udp,private,SF,105,146,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0.00,0.00,0.00,0.00,1.00,0.00,0.00,255,253,0.99,0.01,0.00,0.00,0.00,0.00,0.00,0.00 ↓ . . . のように時系列データとなっています。 配列data[41]を用意し、41個のデータを data[0] = 0 data[1] = tcp data[2] = smtp data[3] = SF data[4] = 829 . . . のように配列に入れたいと考えています。 *配列に格納されているデータを計算で使うため、配列を使いたいと考え  ています。 上記の方法が可能か分かりませんが・・・ 当方まったくの初心者で困っています。よろしくお願いします。

  • プログラム言語の動的配列について

    動的配列という場合、配列のサイズがプログラム動作中に変化する、という意味でしょうか。 それとも、プログラム作成時に配列サイズが指定されておらず、外部のデータを読み込んでその時点でサイズが確定するという場合もあるかと思います。おなじことでしょうか。 なお、配列のサイズが指定されていないプログラムがあるとして、実行開始したあとから指定された配列サイズがメモリ容量とか制限によって上限値があるということにはなるかと思います。 また、大き目に配列を用意して実際に使用する場合、その一部しか使わないというのは通常のことだと思います。そのような場合は全く無関係だと思います。 データのサイズが違っても同じプログラムが使えるので1つ作ればあちこちに応用できることになると思います。このあたりのことがクリアになると同じことをするプログラムは1つだけあればいいということになります。 一応、C,C++,Fortran(77,95)という昔からある言語で、ということですが。 よろしくお願いします。

  • 変数をループで扱うには??

    C言語を最近勉強し始めたばっかりの初心者ですが、教えてください。 for文を用いたループ処理を使って、以下のことをやりたい場合、打開策があれば教えてください。 理想としては、(下手な書き方であることは100も承知なのですが・・) int i1,i2,i3,・・・・,; (添え字のような雰囲気の)整数変数と、カウント用の変数(例えば int count;)を用意して、 for (count = 1 ;(略);count++)などとして、forのブロック内に『気持ちとしては』、 int(count) = (略) としたいのです。何というか、添え字(正確に言えば全く添え字ではないのですが)とループを同時に扱いたいのです。 この、「添え字のように扱う」という方法・技術があれば、教えてください。お願いします。 「そんな書きかたをせずにこうすれば・・・」っていうのはわかっているんですが、気分的にもスッキリしたいので、回答のほど、お願いします。

専門家に質問してみよう