C/C++の宿題を片付けます 82代目

このエントリーをはてなブックマークに追加
952デフォルトの名無しさん:2007/02/07(水) 14:10:58
>>951
>>1を読んで単元って何だろと思って>>2を見て、そう思いました。
気分を害しましたら申し訳ございませんでした。
953デフォルトの名無しさん:2007/02/07(水) 15:44:59
次スレ立てといた

C/C++の宿題を片付けます 83代目
http://pc10.2ch.net/test/read.cgi/tech/1170830498/
954860 ◆/Pbzx9FKd2 :2007/02/07(水) 16:11:26
>>921-922
はあ・・・そうですか。

http://pc10.2ch.net/test/read.cgi/tech/1170150974/l50
こっちで聞いた方が早いんですかね・・・?
955デフォルトの名無しさん:2007/02/07(水) 16:22:17
>>954
良いスレあるじゃん 人居なさそうだけどw
言語というよりPVMそのものだなぁ

そっち方面に詳しい人を見つけないと難しいと思われます
仕様まで解ってないと、値が格納されたとしても次は妥当性が.....
956デフォルトの名無しさん:2007/02/07(水) 16:36:06
[1] 授業単元:C言語
[2] 問題文(含コード&リンク):crypt_sample.c を参考に、入力したキーワードをハッシュ値から
見つけ出すプログラムを作成する。
見つけ出すまでに要した時間も表示すること。
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: ([2007年1月14日まで]
#include <stdio.h>
#include <crypt.h>
main()
{
char real_pw[256]; char sent_pw[256];
char salt[3];
int flag;
printf("Enter new keyword :");
scanf("%s",sent_pw); srand(getpid());
salt[0] = 'a' + rand()%('z'-'a' + 1);
salt[1] = 'a' + rand()%('z'-'a' + 1); salt[2] = '\0';
printf("salt = %s\n",salt);
strcpy(real_pw,crypt(sent_pw,salt));
printf(" Cryptic key is %s\n\n",real_pw);
for (flag=1; flag ;) {
printf("Enter keyword to verify:");
scanf("%s",sent_pw);
if ( strcmp(real_pw, crypt(sent_pw,real_pw)) ) {
printf("Mismatch\n"); } else {
printf(" Match !\n"); flag=0; }
printf(" %s\n", real_pw);
printf(" %s\n", crypt(sent_pw,real_pw));
} }
957860 ◆/Pbzx9FKd2 :2007/02/07(水) 17:54:48
>>955
そうですか・・・

あれから考えたんですが、先ほど自己解決しました。
行列Bを転置したものをスレーブに送信するようにしたら
正しい結果がでるようになりました。
参照するアドレスが飛び飛びになったためにいけなかったみたいです。

>>921-922>>955さん、どうもありがとうございました。
958デフォルトの名無しさん:2007/02/07(水) 21:16:36
>>943
面白そうだけど
こんな多機能クラスは掲示板にソース載せきれないな。
てか俺Macじゃないけどさ。
959デフォルトの名無しさん:2007/02/07(水) 21:43:35
問題が長いので分けて書きます

[1] 授業単元:線形リスト
[2] 問題文(含コード&リンク):
 以下のリスト1に示すlseiseki.c は、リスト2に示すような成績に関するデータを
  読み込み、リスト3に示すような成績表を出力するプログラムである。この表を見
  て以下の問いに答えよ。

課題1  lseiseki.cを修正し、合計点が高い順に生徒の成績が表示されるようにしなさい。
     ただし、出力の部分を修正せずに、新しいデータを読み込んだら新規セルを線形
     リストのしかるべき位置に挿入するようなコーディングとすること。
( lseiseki1.c )
ヒント  プログラムの44行目から51行目を書き換えることになります。
     合計点の高い順ですから、新規セルを線形リストの途中に挿入しなければ
     なりません。新規セルの合計点、既存のセルの合計点を比較しなければ
     ならないので、sumx という名の int 型変数を新たに宣言し、
     43行目のしたに
      sumx = x->score[0] + x->score[1] + x->score[2] + x->score[3] + x->score[4] ;
と追加したり、変数sum を利用して合計点を比較しやすくするのが良いでしょう。


960デフォルトの名無しさん:2007/02/07(水) 21:44:47
課題2  lseiseki.cをを修正し、次のようなメニューを表示し、メニューに従って
    成績表を出力するようにしなさい。ユーザーがメニュー項目を選んだら
    その項目に従って、リンクを張り直して出力するようにすること。
    また、成績表の出力はユーザーが終了を指定するまで何度でも行えるように
    すること。( lseiseki2.c )

      1.国語の点順に表示
      2.算数の点順に表示
      3.社会の点順に表示
      4.理科の点順に表示
      5.英語の点順に表示
      6.合計点順に表示
      0.終了
      メニュー番号を指定して下さい>


  ヒント 55行目〜64行目を更にループの中に入れる必要があります。
      リンクを張り替えるためには、新しい線形リストの根を一時的に保持
      するための、SEISEKI *型の変数が必要です。SEISEKI *root2 などと
      して宣言すればいいでしょう。
      またユーザーの指定を受け付けるための、menu というint 型の変数が
      必要になります。
      またユーザーの指定によって、国語の点、算数の点、理科の点、社会の
      点、英語の点、合計点順にリンクを張り直す訳ですから、
      こえらの観点に応じてデータを比較出来る関数があるとコーディング
      がらくです。
int compare( SEISEKI *a,SEISEKI *b, int menu );
のような感じでプロトタイプ宣言される関数です。

961デフォルトの名無しさん:2007/02/07(水) 21:47:49
/* lseiseki.c 成績データを線形リストを用いて処理する */
#include <stdio.h>
#include <malloc.h>

typedef struct seiseki{ /* 成績情報セルの構造 */
char name[20] ; /* 氏名 */
int score[5] ; /* 国語・数学・社会・理科・英語の点 */
struct seiseki *next;
} SEISEKI;

int main()
{
char fname[100]; /* 入力ファイルの名前 */
FILE *fp; /* ファイル管理構造体のアドレス */

char name[20]; /* データ読み込み用の変数 */
int kokugo, sansuu, syakai, rika, eigo ;

SEISEKI *root=NULL; /* 成績リストの根を指すポインター */
SEISEKI *p,*q; /* 成績リスト探索用のポインター変数 */
SEISEKI *x ; /* 新規セルへのポインター */
int sum; /* 合計点 */
int i,j;

962デフォルトの名無しさん:2007/02/07(水) 21:49:00
printf( "成績ファイルの名前を指定して下さい>" );
gets( fname );
if( (fp=fopen(fname,"r")) ==NULL){
printf( "成績ファイルがオープン出来ません\n" );
exit(-1);
}
/* 成績データの読み込み */
while( 1 ){
if( fscanf( fp,"%s%d%d%d%d%d",name,&kokugo,&sansuu,
&syakai,&rika,&eigo ) != 6 ) break;
x = (SEISEKI *)malloc( sizeof(SEISEKI) );
if( x==NULL ) {
printf( "メモリー不足です\n" );
break;
}
strcpy( x->name, name );
x->score[0] = kokugo; x->score[1] = sansuu;
x->score[2] = syakai; x->score[3] = rika; x->score[4] = eigo;

x->next = NULL;
if( root== NULL ){
root = x;
}
else{
for( p=root; p->next!= NULL; p=p->next );
p->next = x;
}
}
fclose( fp ); /* これ以降ファイルはアクセスしない */
963デフォルトの名無しさん:2007/02/07(水) 21:50:02
/* 成績データの表示 */
printf( "氏名 国語 算数 理科 社会 英語 合計\n");
for( p=root; p != NULL ; p = p->next ){
printf( "%10s",p->name );
for( i=0,sum=0 ; i<5 ; i++) {
sum += p->score[i];
printf( "%4d ",p->score[i]);
}
printf( "%4d\n",sum);
}

/* 成績データの解放 */
for( p=root; p!=NULL ; ){
q = p->next;
free(p);
p = q;
}

return(0);
}

964デフォルトの名無しさん:2007/02/07(水) 21:52:02
リスト2 seiseki.txt のリスト
katou 81 85 56 82 71
furukawa 65 73 65 83 80
shimizu 77 93 90 81 92
yamada 89 76 83 74 77
adachi 62 50 70 65 90
satou 90 85 91 92 95
doi 80 85 60 79 85
gotou 75 45 55 43 60
hasimoto 83 72 85 72 91
ueda 60 63 60 77 76
takahashi 80 100 70 85 79

[3] 環境
 [3.1] OS:WindowsXp
 [3.2] gcc
 [3.3] 言語: C
[4] 期限: ([2007年2月8日24:00まで]
965デフォルトの名無しさん:2007/02/07(水) 22:00:02
seisekiがseiekiに見えた
966デフォルトの名無しさん:2007/02/07(水) 22:36:37
>>959
>>1をよく読め
967デフォルトの名無しさん:2007/02/07(水) 23:00:50
>959-964
びみょ〜〜に成績の格納配列に矛盾があるのだが・・・・

int score[5] ; /* 国語・数学・社会・理科・英語の点 */

printf( "氏名 国語 算数 理科 社会 英語 合計\n");
for( p=root; p != NULL ; p = p->next ){
printf( "%10s",p->name );
for( i=0,sum=0 ; i<5 ; i++) {
    printf( "%4d ",p->score[i]);

これの仕様如何に依っては
    1.国語の点順に表示
    2.算数の点順に表示
    3.社会の点順に表示
    4.理科の点順に表示
    5.英語の点順に表示
    6.合計点順に表示\n
    0.終了
を行う場合に、menu番号と格納先の対応を取り直す必要がある

表示か?格納配列コメントか?どっちを信頼したら良い?
968デフォルトの名無しさん:2007/02/07(水) 23:24:29
>>958
そこをなんとか!
969デフォルトの名無しさん:2007/02/07(水) 23:38:27
>>968
マジ俺には難しすぎるや
てかmat3x3のソースなしでmatrix3x3を継承してrotmat作れって無理じゃないのか?

mat3x3って課題1.1-1によればx[3][3]でしょ

課題3.1によるとx,y,z軸に回転
あー!
俺にはx[3][3]の回転のさせ方わかんねーよ
アフェイン変換?
さっぱりわかんね
ごめんね
970デフォルトの名無しさん:2007/02/07(水) 23:45:36
main(){puts("ちんこ");}
971デフォルトの名無しさん:2007/02/07(水) 23:46:17
>>969
さーせん・・・
では、mat3x3だけでいいです><
さぼっていたのがいけなかったんですね・・・
972デフォルトの名無しさん:2007/02/07(水) 23:49:00
main(){puts("ちんこ");}
973デフォルトの名無しさん:2007/02/07(水) 23:49:40
>967

表示のとおりにしていいと思います。
よろしくお願いします。
974デフォルトの名無しさん:2007/02/08(木) 00:35:08
>>971

全部は作れん。
マトリックスの掛け算とか覚えてないからさ!

スペースやタブの関係でみにくいと思う。
それに自信ない。

#include <iostream>
using namespace std;

// これがクラス
class mat3x3
{
private:
double x[3][3];
public:
mat3x3()
{
x[0][0] = 1;x[0][1] = 0;x[0][2] = 0;
x[1][0] = 0;x[1][1] = 1;x[1][2] = 0;
x[2][0] = 0;x[2][1] = 0;x[2][2] = 1;
}
void print()
{
// coutの使い型よく知らないので
cout << " " << x[0][0] << " " << x[0][1] << " " << x[0][2] << std::endl;
cout << " " << x[1][0] << " " << x[1][1] << " " << x[1][2] << std::endl;
cout << " " << x[2][0] << " " << x[2][1] << " " << x[2][2] << std::endl;
}

つづく
975デフォルトの名無しさん:2007/02/08(木) 00:36:29
>>974 つづき

void set(int a, int b, double val)
{
if(a<0 || a>2 || b<0 || b>2)
{
cout << "error\n";
}
else
{
x[a][b]=val;
}
}
mat3x3 operator + (const mat3x3 & r)
{
mat3x3 v;
for(int a=0; a<3; ++a)
for(int b=0; b<3; ++b)
v.x[a][b] = x[a][b] + r.x[a][b];
return v;
}
mat3x3& operator += (const mat3x3 & r)
{
for(int a=0; a<3; ++a)
for(int b=0; b<3; ++b)
this->x[a][b] += r.x[a][b];
return *this;
}
};

つづく
976デフォルトの名無しさん:2007/02/08(木) 00:39:18
>>975 つづき

// 動作確認コード
int _tmain(int argc, _TCHAR* argv[])
{
mat3x3 a;
mat3x3 b;
mat3x3 c;

cout << "-1-" << std::endl;
a.set(0,0,15);
cout << "a = " << std::endl;
a.print();

cout << "-2-" << std::endl;
b.set(-1,0,15);
cout << "b = " << std::endl;
b.print();

cout << "-3-" << std::endl;
c.set(0,3,15);
cout << "c = " << std::endl;
c.print();

cout << "-4-" << std::endl;
c = a + b; // test operator +
cout << "c = " << std::endl;
c.print();

つづく
977デフォルトの名無しさん:2007/02/08(木) 00:39:55
そろそろうpろだ使っても良いと思うんだ
978デフォルトの名無しさん:2007/02/08(木) 00:42:49
>>976 つづき

cout << "-5-" << std::endl;
c += a; // test operator +=
cout << "c = " << std::endl;
c.print();

return 0;
}

おわり
979デフォルトの名無しさん :2007/02/08(木) 01:03:21
俺が以前作った正方行列用の安全じゃないclass設計のヘッダの内容
#include <cstring>
#include <iostream>
#include <cstdlib>

template<typename MT, unsigned int N>
class SquareMatrix{
private:
MT Matrix[N][N];//MT型のN行N列
public:
SquareMatrix(){}//行列の初期化とか知るかボケーー
~SquareMatrix(){}//もうよくわかんないけど定義しとく
void SetValue();//行列に値を入れる
void ViewMatrix();//見たかったらこれ使え
void ExchangingColumns(unsigned Aj1, unsigned Aj2);//ほれ列代えたぞ
void Transpose();//転置行列の求め方なんか知るか。メンバの行列自体を転置する。
};
template<typename MT, unsigned int N>
void SquareMatrix<MT,N>::SetValue()
{
for(unsigned int i = 0; i < N; i++){
for(unsigned int j = 0; j < N; j++){
std::cout << i + 1 << "行" << j + 1 << "列目入力 \n";
std::cin >> this->Matrix[i][j];
}
std::cout << '\n';
}
}
980デフォルトの名無しさん :2007/02/08(木) 01:04:07
続き
template<typename MT, unsigned int N>
void SquareMatrix<MT,N>::ViewMatrix()
{
for(unsigned int i = 0; i < N; i++){
for(unsigned int j = 0; j < N; j++){
std::cout << this->Matrix[i][j] << ' ';
}
std::cout << '\n';
}
}
template<typename MT, unsigned int N>
void SquareMatrix<MT,N>::ExchangingColumns(unsigned Aj1, unsigned Aj2)
{
if(Aj1 - 1 >= N || Aj2 - 1 >= N){
std::cerr << "over flow ";
exit(1);
}
for(unsigned int i = 0; i < N; i++){
MT Temp = this->Matrix[i][Aj1 -1];
this->Matrix[i][Aj1 -1] = this->Matrix[i][Aj2 -1];
this->Matrix[i][Aj2 -1] = Temp;
}

}
t
981デフォルトの名無しさん:2007/02/08(木) 01:04:40
複数レスに跨るような長いコードを貼らないでくれよ
982デフォルトの名無しさん :2007/02/08(木) 01:05:03
続き
emplate<typename MT, unsigned int N>
void SquareMatrix<MT,N>::Transpose()
{
MT Temp;
for(unsigned int i = 0 ;i < N;i++){
for(unsigned int j = i; j < N; j++){
Temp = this->Matrix[i][j];
this->Matrix[i][j] = this->Matrix[j][i];
this->Matrix[j][i] = Temp;
}
}


}
}
983デフォルトの名無しさん:2007/02/08(木) 01:05:19
嫌ならお前が消えろ
984デフォルトの名無しさん:2007/02/08(木) 01:07:13
レスが流れてみにくい
985デフォルトの名無しさん:2007/02/08(木) 01:08:05
見なきゃいいのに。
986デフォルトの名無しさん:2007/02/08(木) 01:10:26
素直に「うpろだの使い方分かりません」と言えばいいのに
987デフォルトの名無しさん:2007/02/08(木) 01:21:12
御託はいいから解けよ
988デフォルトの名無しさん:2007/02/08(木) 01:23:38
>>971

とりあえずmat3x3は出来た
読みにくいと思うわ
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3624.txt
989デフォルトの名無しさん:2007/02/08(木) 01:24:42
道端で公開オナニーやっといて「見るな」とはw
990デフォルトの名無しさん:2007/02/08(木) 01:28:50
お前のやってることは回転寿司で流れてるイカを見て、他の客に
「俺はイカが嫌いだ」 と言うようなもんだ
嫌なら見るな
991デフォルトの名無しさん:2007/02/08(木) 01:32:55
ここは道端でもなければ回転寿司でもない
992デフォルトの名無しさん:2007/02/08(木) 01:35:36
便所の落書きだよな
993デフォルトの名無しさん:2007/02/08(木) 01:36:10
たまには壁じゃなくてトイレットペーパーに書いて欲しいよな
994デフォルトの名無しさん:2007/02/08(木) 01:37:09
よくきたなまあ座れ
995デフォルトの名無しさん:2007/02/08(木) 01:37:26
次スレどこー
996デフォルトの名無しさん:2007/02/08(木) 01:38:45
ああ・・・次はショ
997デフォルトの名無しさん:2007/02/08(木) 02:02:44

998デフォルトの名無しさん:2007/02/08(木) 02:03:21

999デフォルトの名無しさん:2007/02/08(木) 02:03:52

1000デフォルトの名無しさん:2007/02/08(木) 02:04:25

10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。