トップページ⇒tech
1001コメント313KB

C/C++の宿題やらせてください。おながいします

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさんNGNG
私はC++房。
今まで1年*ヶ月、ほとんど毎日休まず一生懸命C++を勉強してきた。
ついでに今はJavaと基本情報もやっている。
わからない宿題若しくは処理があったら私にやらせてくださいm(_ _)m
4代目(前スレ): http://pc2.2ch.net/test/read.cgi/tech/1045074808/l50
3代目: http://pc2.2ch.net/test/read.cgi/tech/1041992392/l50
2代目: http://pc3.2ch.net/test/read.cgi/tech/1039772622/l50
宿題手伝いますYO!!: http://pc3.2ch.net/test/read.cgi/tech/1038024989/l50



0002デフォルトの名無しさんNGNG
2
0003デフォルトの名無しさんNGNG
乙

前スレの話だが汎用の値交換に興味のある向きは
BSD や GNU の libc/stdlib/qsort.c を見るといいやも
0004C初心者NGNG
SGLつかってscanfで読み込んだ2つの数値n,mで
n行m列の表を作ろうと思ったのですがうまくいきません。
超初心者的な質問で申し訳ないですが、どなたかご教授下さい。

#include "sfcgl.h"
void display()
{
BGColor(0, 0, 0);
int i,j;
double n,m,x,y;
for(i = 0; i < n; i++){
x = 10.0 + 10*i;
DrawLine(x, 0.0, 0.0, x, n*100 , 0.0);
}
for(j = 0; j < m; j++){
y = 10.0 + 10*j;
DrawLine(0.0, y, 0.0, m*100, y, 0.0);
}
SGSwapFrames();
}
int main(int argc, char** argv) {
int n,m;
scanf("%d%d",&n,&m);
SGInit(argc, argv);
SGOpenWindow(50, 50, 500, 500);
SG2DMode();
SGSetDisplay(display);
SGCallBack();
return 0;
}

mainで読み込んだn,mをvoid displayに関連させる方法が分りません。
0005デフォルトの名無しさんNGNG
>>4
void display(double n,m) /* ←引数にする */
{
BGColor(0, 0, 0);
int i,j;
double x,y; /*←ローカル変数のm,nは削除*/
for(i = 0; i < n; i++){
x = 10.0 + 10*i;
DrawLine(x, 0.0, 0.0, x, n*100 , 0.0);
}
0006デフォルトの名無しさんNGNG
>>3
glibcはdo{}while(0)マクロを使っていたと思う。
0007C初心者NGNG
レスどもです。
でもそれをやると
parse error before m と
m undeclared, n undeclared
とエラーが出ます。引数にするのは正しいと思うのですが、
なぜかできない・・・。
スマソ
0008bloomNGNG
http://homepage.mac.com/ayaya16/
0009デフォルトの名無しさんNGNG
>>7
void display(double n,double m)
0010デフォルトの名無しさんNGNG
http://pc2.2ch.net/test/read.cgi/tech/1045074808/948
質問の問いのを作ってるのですが、カーソルにあたった時の処理ってどうでしたっけ?
・ボールの角度が垂直×真ん中にあたった=垂直のボールが飛ぶ
・ボールの角度が垂直×端にあたった=端にあたるほど角度の無いボールが飛ぶ
・ボールの角度が垂直でない×真ん中にあたった=その角度を反転させたボールが飛ぶ
・ボールの角度が垂直でない×端にあたった=?
?の部分を教えてください。元のボールの角度に関係なくあたった位置により角度を作るか、
元のボールの位置とあたった位置を平均して角度を作るのどちらかっぽいのですが。
0011C初心者NGNG
神キター!!!
しかしできず。萎え・・・。
passing arg 1 of SGSetDisplay from imcompatible pointer type
と出ます。

何度も何度もスマソですがこのエラーの対処方わかります?。
0012デフォルトの名無しさんNGNG
>>11
お前はそのエラーメッセージが読めんのか?
0013デフォルトの名無しさんNGNG
SGSetDisplay()に渡す関数ポインタのシグネチャが違うんじゃないの
0014デフォルトの名無しさんNGNG
>>11
ヒント。
自分自身の書いた関数名を渡そうとしていないか?
そのSGなんたらには何を渡すべきか判っているのか?
0015C初心者NGNG
SGSetDisplay(display);
問題は上の()の中に入れる関数だと思うのですが、
(display(n,m))と入力しても voidエラーが出て実行できません。
英語が駄目駄目なんでエラー文の意味もまともに解釈できず困ってます。
神の方どうかご教授下さい。
0016デフォルトの名無しさんNGNG
>>15
とりあえず関数ポインタについて勉強してからにした方がいいよ

0017デフォルトの名無しさんNGNG
>>15
博識者を神とおだてるより自分で調べろよ。
英語がわからないならオンライン辞書でも使えばいいしさ。
エラーをヘルプで検索するってのもできるだろ?
0018C初心者NGNG
わかりました。関数ポインタについては参考書を購入して
勉強いたしたいと思います。ですがとりあえずこのプログラムが
上手くいく方法をご教授願えないでしょうか?よろしくお願いします。
0019デフォルトの名無しさんNGNG
>>18
英語も勉強しろ。
sageも覚えろ。

さて、「とりあえず」のコードをやろう。

#include "sfcgl.h"
int n,m;
void display()
{
BGColor(0, 0, 0);
int i,j;
double x,y;
〜〜〜〜〜〜〜〜〜〜〜〜
〜〜〜〜〜〜〜〜〜〜〜〜
}
int main(int argc, char** argv) {
scanf("%d%d",&n,&m);
SGInit(argc, argv);
SGOpenWindow(50, 50, 500, 500);
SG2DMode();
SGSetDisplay(display);
SGCallBack();
return 0;
}

このライブラリは描画関数に引数を渡せんのか・・・。不便だな。
0020デフォルトの名無しさんNGNG
>>19
> sageも覚えろ。

これは余計
0021デフォルトの名無しさんNGNG
なんか結局質問した時に戻ってるような
0022デフォルトの名無しさんNGNG
ようは答えだけが知りたいんだろ。

ヒントなんかくれなくていいから答えだせ、と
0023C初心者NGNG
>>19氏
ありがとうございます。おかげさまで実行できますた。

0024デフォルトの名無しさんNGNG
scanfに突っ込むのは無粋ですね
0025デフォルトの名無しさんNGNG
既存質問スレでの常時age進行は、
質問スレ乱立防止策には成り得ませんか?ダメ?
0026デフォルトの名無しさんNGNG
>C初心者さん
なんでnとmへの入力をmain関数で受けるの?
0027デフォルトの名無しさんNGNG
以下の2つの宣言は、どう異なるか述べなさい。
char *p = 'A';
char *p = "A";
次に上記のようにポインタ変数に初期値を与えるのでなく、
代入によって与えるような次のプログラムを書いた。
このプログラムに誤りがあるとすれば指摘しなさい。
#include<stdio.h>
int main(void)
{
char *p;
*p = 'A';
printf("*p = %c",*p);
return 0;
}
よろしくお願いします。
0028デフォルトの名無しさんNGNG
とりあえず。1が宿題をやらないのがむかつく
0029デフォルトの名無しさんNGNG
>>27
怪しい問題だな。写し間違いか?
0030デフォルトの名無しさんNGNG
>char *p = 'A';
>char *p = "A";

上、ろくな事にならんぞ。
0031デフォルトの名無しさんNGNG

>char *p;
>*p = 'A';
>printf("*p = %c",*p);

pは有効な変数を指してないのでまともに動かね
0032デフォルトの名無しさんNGNG
#include<stdio.h>

main(){
int i;
float f;
f=1234.0098;
i=f;
printf("%f %d",f,i);}

1234.0098 1234 と表示されるはずが
1234.009766 1234 と表示されます。
どうしてですか?教えてください。
ちなみに環境はwinXP,bcc5.5です
0033デフォルトの名無しさんNGNG
>>31
重箱の隅だが「pは有効な変数を指してない」はいかがなものか
0034デフォルトの名無しさんNGNG
>>27
> char *p = 'A';
> char *p = "A";

Cではcharはintと等価だから、上のは代入の時点で普通Warning吐かれるよ。
まあ、そういうことを言いたいんじゃないと思うけど。

とりあえず'A'は値を代入、"A"はアドレスを代入することになるから。
char *p = 'A'は多分、コンパイル通ってもAccess Viorationで落ちるね。
このプログラム、なんか少し前のVCLの某文字列クラスのバグを皮肉ってるようでなんかムカつく。

>>32
C、というかprintfはfloat型を出力できません。
すべてdouble型に暗黙の型変換されます。
0035デフォルトの名無しさんNGNG
int型って-127〜128だったっけ?

2進数    →10進数

00000000  → 0
10000000  → -128  でいいの?
10000001  → -1
01111111  → 128  ?

助けて
0036デフォルトの名無しさんNGNG
>>35
× int型って-127〜128だったっけ?

○ 00000000  → 0
○ 10000000  → -128
× 10000001  → -1
× 01111111  → 128

× 助けて
003735NGNG
char型って-128〜127だっけ?

00000000  →  0
10000000  →  -128
11111111  →  -1
01111110  →  127

助けて
0038デフォルトの名無しさんNGNG
>>37
× char型って-128〜127だっけ?

○ 00000000  →  0
○ 10000000  →  -128
○ 11111111  →  -1
× 01111110  →  127

× 助けて
003935NGNG
char型って-128〜127だろ!

00000000  →  0
10000000  →  -128
11111111  →  -1
01111111  →  127
10000001  →  -127
10000010  →  -126

分かった!
0040デフォルトの名無しさんNGNG
>>34
そうなんですか?でも、誤差はでませんよね??
0041デフォルトの名無しさんNGNG
>>39
× char型って-128〜127だろ!

○ 00000000  →  0
○ 10000000  →  -128
○ 11111111  →  -1
○ 01111111  →  127
○ 10000001  →  -127
○ 10000010  →  -126

× 分かった!
0042デフォルトの名無しさんNGNG
実数を使う以上誤差はでるよ。
004335NGNG
char型って-127〜127ですか?

中略


分かりません。
0044デフォルトの名無しさんNGNG
>>43
型の取り得る値の範囲は処理系依存。(CHAR_MIN〜CHAR_MAX)
char型が符号付か符合無しかも処理系依存。
0045デフォルトの名無しさんNGNG
>>42
丸め誤差とかのことでしょ?
0.0098に対して0.009766は誤差がありすきでしょう。
0046デフォルトの名無しさんNGNG
#include <float.h>
printf("%f",FLT_EPSILON);
0047デフォルトの名無しさんNGNG
>>43
signed charなら確実にその範囲は表せる。
004847NGNG
0〜127なら確実だね。
004935NGNG
サッパリ分かりません。
char型は1バイトでしょう?8ビット。
256個の整数を表せるのでは?
-128〜127は256個
-127〜127では255個です。
unsigned charでは0〜255なので256個

リナックスとウィンドウズは想像以上に違うの?
つうかリナックスの何処に<stdio.h>ってあるのですか?
#include <stdio.h>
って書いて意味あるの?
0050デフォルトの名無しさんNGNG
>>49
補数って知ってますか?
0051デフォルトの名無しさんNGNG
>>49
最低8ビットだけど、8ビットとは限らない。
limits.hの中のCHAR_BITがビット数

で、8ビットかつ1の補数表現なら最低は-127
1の補数表現だと全ビット0と全ビット1がどちらも値として0になる。

> つうかリナックスの何処に<stdio.h>ってあるのですか?
多分/usr/include
stddef.hとかは別の場所にあるかも。
005235NGNG
出直してきます
ありがとうございました。
0053デフォルトの名無しさんNGNG
>>45
IEEE754ならfloatの32bitの内訳は符号sが1bit, 指数eが8bit, 仮数mが23bitなので
有効数字は2進で24桁、約7桁だから期待通りの結果だと思うが?
0054 NGNG
つーか
ttp://www.bohyoh.com/CandCPP/FAQ/FAQ00046.html
読めば全て解決。

昔、漏れも C の先生に
sizeof int 以外は処理系に依らず決まってる
と嘘つかれますた。
0055デフォルトの名無しさんNGNG
薦めるならこっち
ttp://www-ccs.ucsd.edu/c/types.html#Basic%20Integer%20Types
ttp://www-ccs.ucsd.edu/c/limits.html
ttp://www-ccs.ucsd.edu/c/
0056デフォルトの名無しさんNGNG
int one(int i, int vc)
{


for (i = 0; i < 2; i++) {
int temp = vc[i];
vc[i] = vc[4 -i];
vc[4 -i] = temp;
}
return(vc[i]);
}

どこをどう治したらいいかわからん
あと
c:7: warning: declaration of `i' shadows a parameter
これはなに?
0057デフォルトの名無しさんNGNG
>>56
なぜint vcを配列として扱う?
0058デフォルトの名無しさんNGNG
>>56
その程度の英語くらい何とかしろよ。
そのソースには書いてないようだが、
パラメータでiを宣言しているのに関数内でも宣言してないか?
0059デフォルトの名無しさんNGNG
>>56
ただのループカウンタを引数にすんなよ。
0060デフォルトの名無しさんNGNG
>>56
何をしたいプログラムなの?
0061デフォルトの名無しさんNGNG
>>56
% echo 'void f(int i){
int i;};' | gcc -c -xc -
: In function `f':
:2: warning: declaration of `i' shadows a parameter
0062デフォルトの名無しさんNGNG
int one(int n, int *vc)
{
int i;
for (i = 0; i < 2; i++) {
int temp = vc[i];
vc[i] = vc[4 -i];
vc[4 -i] = temp;
}
return(vc[n]);
}
0063デフォルトの名無しさんNGNG
>>62
中途半端なスワップ関数だなぁ・・・。
0064デフォルトの名無しさんNGNG
スワップッつーか、リバースだろ。
006556「NGNG
returnは使えないんじゃないの
使わないやり方教えてください
0066デフォルトの名無しさんNGNG
>>56
おいおい、それ以前にやることがあるだろ。
・自分がどんな関数を書きたかったのか
・書かれたことは理解できたか
・ついでにお礼も
ここは質問スレじゃないんだからネタ提供せずに質問だけするなよ。
#あ、ネタにはなってるのか。
0067デフォルトの名無しさんNGNG
リバースならこうかな。iは要素数として
void one(int i, int *vc)
{
for (; --i > 0; vc++) {
int temp = *vc;
*vc = vc[i];
vc[i] = temp;
}
}
0068デフォルトの名無しさんNGNG
なんで使えないの?
vc[n]はintだから型もあっているし。
0069デフォルトの名無しさんNGNG
名前が one だからリバースじゃないね
007056「NGNG
配列の並び順を 逆にする関数を作りたいんです
#include <stdio.h>
#define NUMBER 5
void one(int i, int *vc)
{ for (; --i > 0; vc++) {
int temp = *vc;
*vc = vc[i];
vc[i] = temp;
} }
int main(void)
{
int i;
int vc[5];


puts("5個の整数を入力してください。");
for ( i = 0;i < 5; i++){
printf("%2d番目:", i + 1); scanf("%d", &vc[i]);
}
puts("逆に並べると");

for (i = 0;i < 5; i ++)
printf("vc[%d]=%d\n", one(i, *vc ));
return(0);
}
: In function `main':
:26: warning: passing arg 2 of `one' makes pointer from integer without a cast
:26: invalid use of void expression
さっぱりでつ お願いします
0071デフォルトの名無しさんNGNG
>>70
> printf("vc[%d]=%d\n", one(i, *vc ));

なぜ*vcと間接参照する。参照しないでポインタを渡すの。
007271NGNG
それにoneの戻り値はvoidなんだからprintfの引数には使えないでしょう。
007356「NGNG
もう少しわかりやすくお願いします
0074デフォルトの名無しさんNGNG
>>73
#include <stdio.h>
#define NUMBER 5
void one(int i, int *vc)
{ for (; --i > 0; vc++) {
int temp = *vc;
*vc = vc[i];
vc[i] = temp;
} }
int main(void)
{
int i;
int vc[5];


puts("5個の整数を入力してください。");
for ( i = 0;i < 5; i++){
printf("%2d番目:", i + 1); scanf("%d", &vc[i]);
}
puts("逆に並べると");
one(i, vc );
for (i = 0;i < 5; i ++)
printf("vc[%d]=%d\n", i,vc[i]);
return(0);
}
0075デフォルトの名無しさんNGNG
>>66
漏れは礼はいらんと思う。理解できたかどうかだけが意味がある。
007666NGNG
>>75
「理解できました、ありがとう。」ってのを期待してた。
でもどうやらそれ以前のようだね・・・
0077デフォルトの名無しさんNGNG
>>76
紛らわしかったかもしれんが75≠56
007866NGNG
>>77
わかってるよん。
0079デフォルトの名無しさんNGNG
>>67
もう一つ引かないといけないんじゃない?
void one(int i, int *vc)
{
for (; --i > 0; vc++, i--) {
int temp = *vc;
*vc = vc[i];
vc[i] = temp;
}
}
0080デフォルトの名無しさんNGNG
void reverse(int i, int *vc) {
for (; --i > 0;)
*vc++ ^= vc[i--] ^= *vc ^= vc[i];
}
0081__NGNG
  ∧_∧   
 ( ・∀・)/< こんなのみつけたっち♪ 
http://www.yamazaki.90.kg/moe/hankaku07html
http://yamazaki.90.kg/mona/index.html
http://www.yamazaki.90.kg/moe/hankaku08.html
http://yamazaki.90.kg/moe/hankaku10.html
http://www.yamazaki.90.kg/moe/hankaku07.html
http://yamazaki.90.kg/moe/hankaku03.html
http://www.yamazaki.90.kg/moe/hankaku05.html
http://yamazaki.90.kg/moe/hankaku01.html
http://www.yamazaki.90.kg/moe/hankaku06.html
http://yamazaki.90.kg/moe/hankaku04.html
http://www.yamazaki.90.kg/moe/hankaku09.html
0082デフォルトの名無しさんNGNG
>>1 やってみて。

1.1926以上2002以下の数(西暦)をキーボードから入力すると、「昭和45年です」とか
 「平成6年です」とか和暦に直すプログラム。1926年の場合は「昭和元年です」
 1989年の場合は「平成元年です」と表示するように。
 で、1925以下や2002以上が入力されると「入力は1926-2001の間にして下さい」と表示。

2.Aさん、Bさんが階段じゃんけんゲームをシュミレーションするプログラム。
 ルールは・・・
 ○プレイヤー2人は、最初階段の0段目にいてじゃんけんする。
 ○じゃんけんの勝者はグーで勝てば1段、チョキで勝てば2段、パーで勝てば5段
  階段を登ることが出来る。あいこは0段。
 ○10回のじゃんけんの結果、より高い段に居た方が勝ち。

3.「2のn乗 −2」がnで割り切れるなら素数であるという定理を使って、2〜20までの
 素数を全て求めよ。
0083デフォルトの名無しさんNGNG
>>67 >>79 >>80
おまえら、無駄が多い。
0084デフォルトの名無しさんNGNG
>>83
お前は無駄レスだけ。
0085デフォルトの名無しさんNGNG
オレニマカセロ!
0086not 1NGNG
>>82
1ではないが、やっていいかNa??
0087 NGNG
>>82
> 3.「2のn乗 −2」がnで割り切れるなら素数であるという定理を使って、2〜20までの
この定理、なんか変じゃないか???

0088デフォルトの名無しさんNGNG
2^2-2=4
2^3-2=6
2^4-2=14 ×
2^5-2=30
...
0089デフォルトの名無しさんNGNG
そもそも何が素数か書かれていない。
0090デフォルトの名無しさんNGNG
>>87
n=341の時はその定理は成り立たない。nが20以下には全部適用できるね。
009187 NGNG
>>90
なるほど「問題文の日本語が変」なだけだw

3.「2のn乗 −2」がnで割り切れるなら "nが" 素数であるという定理を使って、2〜20までの
 素数を全て求めよ。

ってことね。
0092デフォルトの名無しさんNGNG
ちょっとやってみるか。
0093デフォルトの名無しさんNGNG
今日の宿題です。

配列を上位桁から表示するようにして欲しいです。
関数は


int card_conv(unsigned x, int n, char d[])
{

int i;

char dchar[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
int digits = 0;
if (x == 0)
d[digits++] = dchar[0];
else
while (x) {
d[digits++] = dchar[x % n];
x /= n;
}


for (i = 0; i < n / 2; i++)
swap(int, d[i], d[n - i - 1]);


return (digits);

}
0094デフォルトの名無しさんNGNG
メインは


int main(void)
{
int i;
unsigned no;/* 変換する整数 */
int cd;/* 基数 */
int dno;/* 変換後の桁数 */
char cno[100];/* 変換後の各桁を格納する文字の配列 */
int retry;/* もう一度? */

do {
printf("正の整数値を入力してください:");
scanf("%u", &no);
do {
printf("何進数に変換しますか(2-36):");
scanf("%d", &cd);
} while (cd < 2 || cd > 36);
dno = card_conv(no, cd, cno);/* noをcd進数に変換 */
printf("%d進数では", cd);
for (i = dno - 1; i >= 0; i--)/* 上位桁から順に表示 */
printf("%c", cno[i]);
printf("です。\n");
printf("もう一度しますか(1…はい/0…いいえ):");
scanf("%d", &retry);
} while (retry == 1);

return (0);
}
0095デフォルトの名無しさんNGNG
for (i = 0; i < n / 2; i++)
swap(int, d[i], d[n - i - 1]);

for (i = 0; i < digits / 2; i++)
swap(int, d[i], d[digits - i - 1]);
0096デフォルトの名無しさんNGNG
16行目でエラーが出てしまいます。aには名前を入力したいのですが
この書式指定では駄目なのでしょうか?

#include <stdio.h>
#include <string.h>
struct tell{
char name[20];
char tele[20];
};
main(){
char *a,*b;
struct tell c[255];
int i,j=0;
while(1) {
printf("全角5字以内で、氏名を入力せよ。 終了:e\n");
scanf("%s",&a);
if (a == "e") break;
strcpy(c[j].name, a);
printf("半角20字以内、ハイフン編集して、電話番号を入力せよ。 終了:e\n");
scanf("%s",&b);
if (b == "e") break;
strcpy(c[j].tele, b);
j++;
}
printf("氏名  電話番号\n");
for (i=0;i>j;i++) {
printf("c[i].name  c[i].tele\n");
}
}
009796NGNG
すいません13行目になります
0098デフォルトの名無しさんNGNG
char *a

char a[1000]
0099デフォルトの名無しさんNGNG
scanf("%s",&a);

scanf("%s",a);
0100デフォルトの名無しさんNGNG
>>96
exploitコードの見本ですか?
0101デフォルトの名無しさんNGNG
>>94
> char cno[100];/* 変換後の各桁を格納する文字の配列 */

変換対象が unsigned no なら 100 もとることはなかろう。
■ このスレッドは過去ログ倉庫に格納されています