課題がわかりません。

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
アンフェア

課題がわかりません。

#1

投稿記事 by アンフェア » 15年前

このプログラムなんですけど正しく動作しません。その理由がを説明してください。

/* swap3.c swap */
#include <stdio.h>
void swap3 (int x,int y)
{
int wk;
wk=x; x=y; y=wk;
}
void swap5 (int *x,int *y)
{
int wk;
wk=&x; &x=&y; &y=wk;
}
void swap6 (int x,int y)
{
int *wk;
wk=&x; &x=&y; &y=*wk;
}
void main(void) /*test main*/
{
int a=3,b=5;
printf("%d-%d\n",a,b); swap3(a,b);
printf("%d-%d\n",a,b); swap5(&a,&b);
printf("%d-%d\n",a,b); swap6(a,b);
printf("%d-%d\n",a,b);
}



コンパイルした結果

kadai4-2.c(11) : warning C4047: '=' : 間接参照のレベルが 'int' と 'int **' で異
なっています。
kadai4-2.c(11) : error C2106: '=' : 左のオペランドが、左辺値になっていません。
kadai4-2.c(11) : warning C4047: '=' : 間接参照のレベルが 'int **' と 'int' で異
なっています。
kadai4-2.c(11) : error C2106: '=' : 左のオペランドが、左辺値になっていません。
kadai4-2.c(16) : error C2106: '=' : 左のオペランドが、左辺値になっていません。
kadai4-2.c(16) : warning C4047: '=' : 間接参照のレベルが 'int *' と 'int' で異な
っています。
kadai4-2.c(16) : error C2106: '=' : 左のオペランドが、左辺値になっていません。

たかぎ

Re:課題がわかりません。

#2

投稿記事 by たかぎ » 15年前

動作しない理由はコンパイルできていないからです。

アンフェア

Re:課題がわかりません。

#3

投稿記事 by アンフェア » 15年前

上のプログラムで動作しない理由を説明してください。という課題です。

たかぎ

Re:課題がわかりません。

#4

投稿記事 by たかぎ » 15年前

コンパイルできないものは、動作させる以前の問題です。
まずは、コンパイルエラーを解消してください。

実際にエラーが出ている箇所以外にも複数の問題があるようですが、エラーさえとれば、たまたま動く可能性は十分にあります。

softya

Re:課題がわかりません。

#5

投稿記事 by softya » 15年前

>上のプログラムで動作しない理由を説明してください。 という課題です。

動作というのは、コンパイルが正常終了出来て始めて行えることです。
この場合、コンパイルが正常終了していないのだから、動作するはずが無いとたかぎさんはおっしゃられています。

>という課題です。

始めに断りしておきますが、ここの回答者の大半は必要と感じな限り直接答えを書くことはありません(特に課題の場合)。あくまで本人が回答を導き出すのをお手伝いする事です。

コンパイルエラーの原因を調べてください。
アンフェアさんは何が原因だと推測されていますか?

たかぎ

Re:課題がわかりません。

#6

投稿記事 by たかぎ » 15年前

もう一言付け加えておくと、「正しく動作する」というのは、書いたとおりに動作するということです。
書いたとおりに動作しないとすれば、動作させるための手順が違うか、コンパイラに不具合があるか、ハードウェア等プラットフォーム側に故障があるかです。

アンフェア

Re:課題がわかりません。

#7

投稿記事 by アンフェア » 15年前

すみません。まだまだ初心者で手探り状態なんです。


教科書を見たり、エラーを自分なりに色々いじったのですが上手くコンパイルできませんでした。

softya

Re:課題がわかりません。

#8

投稿記事 by softya » 15年前

マルチポストしていませんか?
http://detail.chiebukuro.yahoo.co.jp/qa ... 1340759928
まず、ここの規約を読み、回答者の方々に失礼の無いように対処してください。
相互参照になさるのがベストだと思います。
あちらの方々も補足を求めてらっしゃるので、補足でちゃんと説明してください。

・コンパイルが通ればよいのですか?
・結果の正当性は不要ですか?
・あなたの求める正しくとはなんですか?
・私の問いにも答えてください。

画像

Dixq (管理人)

Re:課題がわかりません。

#9

投稿記事 by Dixq (管理人) » 15年前

聞かれたことに全て答えるようにした方がスムーズにやり取りが出来ますよ。

答えてくれないと回答者は何度も同じ事を聞かなくてはいけません。

?マークのある文章を全て引用するようにすると漏れなく答えられると思います。

アンフェア

Re:課題がわかりません。

#10

投稿記事 by アンフェア » 15年前

softya さんすみません。

・コンパイルが通ればいいです。

・結果の正当性は必要です。

・正しくとはコンパイルが上手くいく事です。

・間接参照のレベルが 'int' と 'int **' で異なっています。
という事は'int'に統一しろってことですか?しかし11行目に'int **' にそんな文章無いのですが。

本当にごめんなさい。皆さんの質問に答えなくって。反省しています。

自分にまだまだ力が足りなく。

ookami

Re:課題がわかりません。

#11

投稿記事 by ookami » 15年前

横からすみません。

アンフェアさんの理解度を伺いたいのですが、以下のソースコードを見て(実行せずに)、それぞれの出力結果がわかりますか?
※ 不定の場合は「不定」と回答ください。


#include<stdio.h>

void main(void) {
printf("Hello, world!\n"); //(1)

int i,*p;
p=&i;
i=3;
printf("%d\n",i); //(2)

i=i+1;
printf("%d\n",i); //(3)
printf("%d\n",p); //(4)
printf("%d\n",*p); //(5)
}

まずはここまで。あと、課題の期限はいつですか?不完全燃焼で終わったら残念なので。

ookami

Re:課題がわかりません。

#12

投稿記事 by ookami » 15年前

おっと。入れ違いになってしまいました。

> ・コンパイルが通ればいいです。
> ・結果の正当性は必要です。

この二つは矛盾してます。コンパイルが通ってもリンクが通らなかったり、リンクが通っても実行できなかったり、実行できても正当な(期待した)結果になるとは限らないです。

もう一度課題をよく確認することをオススメします。

Dixq (管理人)

Re:課題がわかりません。

#13

投稿記事 by Dixq (管理人) » 15年前

softyaさんが

> 失礼の無いように対処してください

と仰っているのに、Yahoo!の方削除されていますね・・。
私はリンク先見ていませんが、削除するのは回答して下さった方に申し訳ない行為ですよ。

例えばアンフェアさんが、誰かに何かを教えてあげるためにあれこれ考えてアドバイスを書いてあげたとしましょう。
もう一度アクセスした時そのページが消えていたらどうでしょう?

「せっかく書いてあげたのに・・」

と思わないでしょうか?

ところで、課題は上記プログラムでは動作しない理由を述べるということですよね?
それはきっとコンパイル出来ない理由を述べよということだと思いますが、いかがでしょうか?

であれば、

>・コンパイルが通ればいいです。

というのはおかしくないでしょうか?
また、上の回答に対して

>・結果の正当性は必要です。

というのも矛盾していると思います。
上の回答は「コンパイルが通りさえすれば答えはどうでもいい」ということですよね?


>・「正しくとはコンパイルが上手くいく事です。 」

という答えも曖昧で、なかなか円滑な意思疎通が出来ていないようです。
そのような時は抽象的な言葉を無くせばいいですよ。

例えばアンフェアさんに誰かが
「車が壊れたんですが、うまく直せないんです。どうしたらいいですか?」
と聞いてきたら的確に答えられるでしょうか?
それより
「1年ほど放置していた車をかけようと、エンジンキーを回してもスターターが回らないんです。どうしたらいいですか?」
と聞いてくれば
「あぁ、バッテリーがあがってるんじゃないかな」
と推測が出来るのではないでしょうか。

「うまくいきません」「思ったように動きません」「ちゃんとできません」

といった言葉は非常に解りにくい場合が多いです。

ということで今一度情報を整理してみましょう。

・「今自分は何がしたいのか(明確に)」
・「自分はどこまで取り組んだのか(取り組んだ内容を提示)」
・「どこが解らないのか(具体的に)」

ここのところを明確にして下さい。


# ookamiさんの付け加えで
アドレスとポインタについては理解されていますか?
例えば変数に&を付けるとどういう意味になるかなどは大丈夫ですか?

softya

Re:課題がわかりません。

#14

投稿記事 by softya » 15年前

消してしまわれたみたいですが失礼な行為だと思います。残念ですね。

>・コンパイルが通ればいいです。
>・正しくとはコンパイルが上手くいく事です。

コンパイルは文法さえ正しければ、正常に終わります。

>・間接参照のレベルが 'int' と 'int **' で異なっています。
<という事は'int'に統一しろってことですか?しかし11行目に'int **' にそんな文章無いのですが。

wkと&xの型はそれぞれ何でしょうか?

>・結果の正当性は必要です。

正当性のある結果は、あなたのみが知っています。
課題で提示された仕様が明確ではないので、どの答えが正しいのかもこちらでは判断出来ません。
課題の正確な情報、ソースコードで自分が書いた部分(書き換えても良い部分)、正当と思える答え、あと課題の締め切り日を書いてください。

たかぎ

Re:課題がわかりません。

#15

投稿記事 by たかぎ » 15年前

> ・コンパイルが通ればいいです。
> ・正しくとはコンパイルが上手くいく事です。

コンパイルさえ通ればよいのなら、ソースコードをすべて削除し、空のファイルにすればコンパイルは通ります(リンクは通りませんが)。
リンクも通したければ、

int man(void) { return 0; }

とでもしておきましょう。
そういうことを望んでいるのでしょうか?

> ・結果の正当性は必要です。

上記の通りにすれば、何もせずに終了するという、書いたとおりの正統な結果が得られるはずです。

閉鎖

“C言語何でも質問掲示板” へ戻る