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

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

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2006/11/06(月) 09:04:35
あなたが解けないC言語/C++言語の宿題を片付けもらうスレッドです。気に入らない質問やその他や発言はスルーの方向で。
【質問者へ】
回答者の便宜のため、質問の際は以下を行うことを推奨します。
・質問は【質問テンプレ】を利用してください。
・問題文は、出題されたまま全文を書いてください。
・計算問題は数式をあげ、どのような計算をするのか詳しく説明してください。
・エラーは、その詳細と発生した行を書きましょう。エラーメッセージはコピペしてください。
・後から問題に付け足しするのはやめましょう。付け足しは作業を無駄にしがちです。
・なりすましを防ぐため、トリップを使ってください。名前欄に、「#」に続けて任意の文字列を入力して
 投稿すると、その文字列を知らない他人に騙られることを防ぐことができます。
【質問テンプレ】
[1] 授業単元:
[2] 問題文(含コード&リンク):
[3] 環境
 [3.1] OS: (Windows/Linux/等々)
 [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
 [3.3] 言語: (C/C++/どちらでも可 のいずれか)
[4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか)
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)

【アップローダー==ラウンジ】(質問が長い時はココ使うと便利 回答者もコードが長ければここに)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
【C 関数検索 man on WWW】
http://www.linux.or.jp/JM/index.html

【前スレ】
C/C++の宿題を片付けます 75代目
http://pc8.2ch.net/test/read.cgi/tech/1161257941/
【過去スレ一覧】
http://makimo.to/cgi-bin/search/search.cgi?q=C%2B%2B%82%CC%8Fh%91%E8&andor=AND&sf=2&H=&view=table&D=tech&shw=2000
0002デフォルトの名無しさん2006/11/06(月) 10:12:39
ニダ
0003デフォルトの名無しさん2006/11/06(月) 11:07:32
気が早いよ
0004デフォルトの名無しさん2006/11/06(月) 20:56:11
前スレが落ちたのでage
0005デフォルトの名無しさん2006/11/06(月) 21:03:21
[1] プログラミング
[2] 整数 m と d をを入力し, m 月 d 日が 1 年の何日目にあたるかを表示するプログラムを作成せよ. 例えば, 2 と 1 を入力すると, "2 月 1 日は 1 年の 32 日目です" 等と表示するようにせよ.
閏年は考慮しなくてよい. また, 間違った月日 (例えば, m=13 や m= 4, d=31 等) が入力された場合には, 入力が間違っている旨を表示して終了するようにせよ.

※ m月d日 → 1月〜m-1月の日数の和を求め, それに d を足せばよい.
[3]
 [3.1] windowsXP sp2
 [3.2] cygwin
 [3.3] C
[4] 2006年 10月6日(今日中にアップロード)
[5] 配列って分野の宿題です。なるべく簡単な書き方でお願いします。
0006デフォルトの名無しさん2006/11/06(月) 21:07:14
>>5
閏年はどう扱う?
0007デフォルトの名無しさん2006/11/06(月) 21:07:46
>>6
4行目が読めないのか?
0008デフォルトの名無しさん2006/11/06(月) 21:08:43
このすれって監視されてる?
友達がばれたとか言ってたけど釣り?
0009デフォルトの名無しさん2006/11/06(月) 21:10:29
>>7
すまん。読めてなかった。吊ってくるorz
0010デフォルトの名無しさん2006/11/06(月) 21:11:56
>>8
利用させてもらうこともあるけど、
書き方とか定義する文字とか変えて絶対自分だって分からないようにしてる。
0011デフォルトの名無しさん2006/11/06(月) 21:17:16
>>5
#include<stdio.h>
#include<stdlib.h>

int main(void){
int day_list[]={0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int day_sum;
int m, d, i;

printf("Input date month day :");
scanf("%d %d", &m, &d);
if(m<1 || m>12 || d<1 || d>day_list[m]){
printf("\n入力が間違っています\n");
exit(1);
}

day_sum=d;
for(i=0;i<m;i++)
day_sum+=day_list[i];
printf("%d 月 %d 日は 1 年の %d 日目です\n", m, d, day_sum);

return 0;
}
0012デフォルトの名無しさん2006/11/06(月) 21:35:22
scanf
とか
printf
の
f
って何?
0013デフォルトの名無しさん2006/11/06(月) 21:39:16
>>12
宿題なのか?
f(ormat)
0014デフォルトの名無しさん2006/11/06(月) 21:40:18
formatのfじゃね?
0015デフォルトの名無しさん2006/11/06(月) 21:40:31
>>12
formatじゃね?
0016デフォルトの名無しさん2006/11/06(月) 21:44:27
友達が「すきゃんふ」「ぷりんとふ」って発音してくるから
最近は、本当は意味なんてないんじゃないかと思い始めてた
0017デフォルトの名無しさん2006/11/06(月) 21:48:40
とうふぷりん?
0018デフォルトの名無しさん2006/11/06(月) 21:54:05
>>16
意味なんてあるわけないじゃん
0019デフォルトの名無しさん2006/11/06(月) 21:58:01
Format = 書式指定 のこと。とマジレス。
char とかstrlen とか、Cの用語には読み方が分かれるものが多いね。
0020C言語の問題くれよ(GUI無しで)2006/11/06(月) 21:58:47
>>16
<豆知識>
atof → あ、豆腐 → 豆腐は柔らかい → 固定されていない → 浮動小数点数に変換
間違っても ascii to float ではない
0021デフォルトの名無しさん2006/11/06(月) 22:16:37
オマエラもっとアホ知識をひけらかして下さい
0022デフォルトの名無しさん2006/11/06(月) 23:29:55
平均値と標準偏差を求める過程で出す「合計」の値を
表示させようとしたらそこだけバグるんだけど。
例えばm=sum/n が平均だとすると
mはちゃんとした数字出るけどsumはバグってる。
sumそのままprintしようとしちゃいけないんでしょうか。

これだけしか書かなくて分かるだろうか。
0023デフォルトの名無しさん2006/11/06(月) 23:32:10
>>22
わからん。テンプレ嫁。
まぁ書式指定子がどっかおかしいんだろうとは思うが。
0024デフォルトの名無しさん2006/11/06(月) 23:35:55
>>23 に同意
表示部分と変数宣言だけでも晒すべし
0025デフォルトの名無しさん2006/11/06(月) 23:43:16
>>20
そもそも固定小数点型なんてあったっけ?
0026デフォルトの名無しさん2006/11/06(月) 23:44:24
>>25
ネタにマジレスかこわるい
0027デフォルトの名無しさん2006/11/06(月) 23:45:28
>>25
整数型が狭義の固定小数点型
0028デフォルトの名無しさん2006/11/06(月) 23:46:35
>>26
>>25がマジレスだと思ってるのか?
0029デフォルトの名無しさん2006/11/06(月) 23:48:14
>>23
うまくいかないのがほんの一部だけで、全部晒すと効率悪いと思って
>>24


#include<limits.h><math.h><stdio.h>(全部)

int i,x[n];
double sum,m,s,v;

中略

for(sum=0.0,i=0;i<n;i++)
{
sum += x[i];
}

m=sum/n;

for(sum=0.0,i=0;i<n;i++)
{
sum += (x[i]-m)*(x[i]-m);
}
v=sum/n;
s=sqrt(v);

printf("合計%f\n",sum);
printf("平均%f\n",m);
printf("標準偏差%f\n",s);
return終わり

です
0030デフォルトの名無しさん2006/11/06(月) 23:54:29
再現できないバグは存在しないことになっている
0031デフォルトの名無しさん2006/11/06(月) 23:54:46
>>29
書いてあるとおりに動いているだけじゃないのか?
sum を上書きしてしまってるの忘れてるとかな
0032デフォルトの名無しさん2006/11/06(月) 23:55:02
>>29
sumがバグってるとはどのような状況か?
異常なものが表示されるのか、
表示されないのか、
暴走するのか?
はっきりさせろ。
0033デフォルトの名無しさん2006/11/06(月) 23:55:04
>>29
出来ればどうバグってるのか教えておくれ。
オレはてっきり出力が”あqwせdrftgyふじこ”になってるんだと
思ってたんだけど、違うっぽいし。

あとドットとか本でした見た事なかったよ。
0034デフォルトの名無しさん2006/11/07(火) 00:02:39
>>31
親切にありがとうございます。
気付きました。
0035デフォルトの名無しさん2006/11/07(火) 00:41:28
[1] 授業単元:情報処理
[2] 問題文(含コード&リンク):
オイラーの予想:
オイラー(Euler, 1707年-1783年)は、1769年頃に、
「a^5+b^5+c^5+d^5=e^5を満足する正の整数はない」という予想を立てた。
コンピュータを用いて、偉大な数学者であるオイラーの予想を覆せ。
また、このプログラムは多少時間がかかることが予想されるので、
効率よくプログラムを組むこと。そのため、すべてを計算すると大変なので、
a<b<c<d<e<200を仮定してよい。

ヒント:
カウンタ変数を5つ用意して5重ループを構成する。
ループ数が多くなるので計算量に注意されたい。
200^5程度の値になると、通常のint型の表現範囲を超えるので注意すること。
答えは、次のとおり
a=27,b=84,c=110,d=133,e=144
a^5=14348907,b^5=4182119424,c^5=16105100000,d^5=41615795893,e^5=61917364224
c^5,d^5,e^5は、int型の表現範囲を超えているので、注意してください。

[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:Microsoft Visual C++ 6.0
 [3.3] 言語: C++
[4] 期限: 2006年11月7日まで
[5] その他の制限: この答え以外でも存在したら表示して欲しいです。
0036デフォルトの名無しさん2006/11/07(火) 00:49:32
この答えは自力で出したの?
意地悪で聞いてるわけじゃなくて,手元にある程度プログラムが出来てるのか確かめておきたい
0037デフォルトの名無しさん2006/11/07(火) 00:55:47
答えは与えられたものです。
このプログラムは出来ています。
他の答えをだすプログラムを知りたくて。
0038デフォルトの名無しさん2006/11/07(火) 00:58:05
他のも何も、見つかった時にそこで終わらずprintfでabcde表示して続行すればいいだけじゃないの?
単純に考えて・・・
0039デフォルトの名無しさん2006/11/07(火) 01:05:39
そうですよね。
ありがとうございます。
0040デフォルトの名無しさん2006/11/07(火) 01:40:13
a=54, b=168, c=220, d=266, e=288
ってのがあったけど200超えてるしな。
0041デフォルトの名無しさん2006/11/07(火) 01:51:37
>>11
ありがとうございました。
0042デフォルトの名無しさん2006/11/07(火) 01:57:39
[1] 授業単元: 数値解析
[2] 問題文(含コード&リンク):3元連立方程式をガウスザイデル法で解くプログラムを作成せよ
[3] 環境
 [3.1] OS: (Windows/Linux/等々) Windows
 [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等) Microsoft Visual C++ 6.0
 [3.3] 言語: C
[4] 期限:水曜日まで
[5] その他の制限:

参考書にアルゴリズムは色々書いてあるけど
これをどうやってプログラムで書けばいいか分かりません・・・
0043デフォルトの名無しさん2006/11/07(火) 02:10:00
>>42
http://www.vector.co.jp/soft/dl/data/prog/se002453.html

この中のgseidel.c

というのはあまりにやっつけだろうか
0044c不明な人2006/11/07(火) 13:10:25
1] 授業単元:情報処理�U
[2] 問題文(含コード&リンク):二つの整数n , r をキーボードから入力し,組合せの数nCrを画面表示するプログラムを作成
しなさい.ただし,組合せの数を求める関数のプロトタイプを「int combination(int, int)」,
整数値の階乗を求める関数のプロトタイプを「int kaijo(int)」としてプログラムすること. n や
r を大きくとるとオーバフローすることがあるが,本課題では考慮しなくてよい.
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限:[2006年11月10日まで]
[5] その他の制限:なし

よろしくお願いします。。。
0045デフォルトの名無しさん2006/11/07(火) 13:15:45
>>44
前スレで見たよ、それ
0046デフォルトの名無しさん2006/11/07(火) 13:17:20
(x_a-x_b)(x_c-x_b)+(y_a-y_b)(y_c-y_b) / √(((x_a-x_b)^2+(y_a-y_b)^2)((x_c-x_b)^2+(y_c-y_b)^2))
をプログラムで書こうとして、

((x[i]-x[i+1])(x[i+2]-x[i+1])+(y[i]-y[i+1])(y[i+2]-y[i+1]))
/sqrt(((x[i]-x[i+1])^2+(y[i]-y[i+1])^2))*((x[i+2]-x[i+1])^2+(y[i+2]-y[i+1])^2)))
と書いてみたのですが、エラーばっかりです。
x[i+1]と言う表現はダメなんでしょうか?
どのように表現すればいいでしょうか?
また、^2という表現も使えないのでしょうか?
どのように記述すればよいでしょうか?
言語はcです
0047c不明な人2006/11/07(火) 13:19:40
もう1つです。よろしくお願いします。
1] 授業単元:情報処理�U
[2] 問題文(含コード&リンク):x を-2.8 以上2.8 以下の範囲で0.02 ずつ変化させ, y = cos x 及びy = sin x の値を画面表
示するプログラムを作成しなさい.ただし, y = cos x 及びy = sin x は,次式に示す多項式
cosx=1-x^2/2!+x^4/4!-x^6/6!+x^8/8!-x^10/10!
sinx=x-x^3/3!+x^5/5!-x^7/7!+x^9/9!-x^11/11!
により計算すること.また,これらの計算を行う関数のプロトタイプをそれぞれ「double
mycos(double)」,「double mysin(double)」とし,課題1(↑の44の問題です。)で作成した「kaijo()」関数を利用す
ること.
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限:[2006年11月10日まで]
[5] その他の制限:なし

改めてよろしくお願いしますm(__)m
0048デフォルトの名無しさん2006/11/07(火) 13:29:27
>>46
>・エラーは、その詳細と発生した行を書きましょう。エラーメッセージはコピペしてください。

配列宣言してないんじゃないのって気がするがな

そもそもそこで配列を使いたい理由がわからん
0049c不明な人2006/11/07(火) 13:30:12
>>47 すいません!0.02じゃなくて0.1でした。
>>45 それってどこですか?
0050デフォルトの名無しさん2006/11/07(火) 13:30:31
[1] 授業単元:
[2] 問題文(含コード&リンク): 引数で受け取った全角文字列を逆順に入れ替える
int reverse_string(char *str)を作成せよ。
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン: Borland C++ Compiler 5.5 
 [3.3] 言語: C
[4] 期限:2006年11月8日

半角英数字はうまくいくのですが2バイト文字の場合がわかりません。
よろしくお願いします。
0051502006/11/07(火) 13:31:48
#include <stdio.h>
int reverse_string(char *str)
{
char *p,tmp;
p=str;
for(;*p !='\0';p++);
for(;p-str>0;str++){
tmp=*(--p);
*p=*str;
*str=tmp;
}
return 0;
}
main(void)
{
char str[50]="C言語";
printf("reverse_string関数実行前\n%s\n",str);
printf("reverse_string関数実行後\n");
reverse_string(str);
printf("%s\n",str);
return 0;
}
0052デフォルトの名無しさん2006/11/07(火) 13:36:02
配列は 
#define M 4096
double x[M], y[M], z[M];
で確保してあります。

error C2064: 関数ポインタとして評価されない式を使って、関数を呼び出そうとしました。
error C2296: '^' : 不正な左オペランドです。
こんな感じです。

>そもそもそこで配列を使いたい理由がわからん
配列に連続した座標が入っているので。
一つずつ動かして判定したいのです。
0053デフォルトの名無しさん2006/11/07(火) 13:36:25
まずは、math.hのpow関数を勉強しようぜ
期限もまだあることだし
0054デフォルトの名無しさん2006/11/07(火) 13:40:51
>>52
error C2296: '^' : 不正な左オペランドです。  というエラーメッセージを見る
↓
^2という表現は使えないのかな と気づく←ここまで出来てる
↓
C 演算子でググる
↓
^はxorに使われていることを知る
↓
じゃあべき乗はどう表すのか疑問に思う
↓
C べき乗でググる
↓
math.hのpowを使うことが分かる

はぁ・・・
0055デフォルトの名無しさん2006/11/07(火) 13:44:11
c言語で英文を入力し,その英文の単語を全て出力するソースコードを作って頂きたいのですが
0056デフォルトの名無しさん2006/11/07(火) 13:46:04
>>55
>>1
0057462006/11/07(火) 13:56:11
です。
ありがとうございます。
べき乗については解決いたしました。

(x[i]-x[i+1])
のみだとエラーは出ないのですが、

(x[i]-x[i+1])(x[i+2]-x[i+1])
と書くと
error C2064: 関数ポインタとして評価されない式を使って、関数を呼び出そうとしました。
となります。
なぜなんでしょうか???
0058デフォルトの名無しさん2006/11/07(火) 14:00:26
すいません初心者で(汗)
[1] cis english 2
[2] 問題文
英文を入力し,その英文の単語を全て出力するソースコード
[3] 環境
 [3.1] OS: WindowsXP
 [3.2]gcc
 [3.3] C
[4] 期限:2006年11月12日12:00まで
[5] その他の制限:なし
0059デフォルトの名無しさん2006/11/07(火) 14:02:19
>>58は重複した単語に関する指定ないし
.,!?;:"'取り除くだけで答えになってしまうんじゃないだろうか

出てきた単語は昇順に並べ替えるとか 指定ないの?
0060デフォルトの名無しさん2006/11/07(火) 14:05:24
[1] 授業単元:数値解析
[2] 問題文:
ガウスの消去法を用いたプログラムで微分方程式を解く
f(0)=0,f(pi/2)=1の条件でf''(x)+f(x)を解け

[3] 環境
 [3.1] OS:linux
 [3.2] コンパイラ名とバージョン: gcc 2.95
 [3.3] 言語: C言語
[4] 期限: レポート提出があるので可能なら今日、できれば明日まで
[5] その他の制限: 特にありません

現在
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2897.c
までプログラムが進んでいます

数値の入力の直後にセグメンテーション違反です。と表示され終了してしまいます
微分方程式を解くときの数値などは問題ないはずなのですが、
17行目のscanfのところで止まってしまいます。

このエラーをどうにかする方法はないでしょうか?力を貸して頂ければ幸いです
0061デフォルトの名無しさん2006/11/07(火) 14:06:15
>>57
釣り?
掛け算は*だべ。
0062602006/11/07(火) 14:07:48
>>60
微分方程式が間違っていました
正しくはf''(x)+f(x)=0です
0063462006/11/07(火) 14:09:02
>>61さん
すみませんでした・・・・アホすぎました。
ありがとうございます。
死んできます。
0064デフォルトの名無しさん2006/11/07(火) 14:10:31
>>63
いい意味でアメリカのラテン系移民の英語みたいなガッツを感じます。
0065デフォルトの名無しさん2006/11/07(火) 14:59:05
>>44
脳内コンパイラ
#include<stdio.h>
main() {
int kotae,n,r;
printf("nCrを計算するにゃん\n");
printf("nの値を入力するにゃん\n(n>=0にゃん)");
scanf("%d",&n);
if(n<0){
printf("死ねにゃん");
exit(1);
}
printf("rの値を入力するにゃん\n(0<=r<=nにゃん)\n");
scanf("%d",&r);
if(r>n||r<0){
printf("死ねにゃん");
exit(1);
}
printf("計算開始にゃん\n");
kotae = combination(n,r);
printf("答えは%dにゃん\a",kotae);
}

int kaijo(int x) {
if(x=1||x=0){return 1};
return x*kaijo(x-1);
}
int combination(int n, int r) {
int c;
c = kaijo(n)/(kaijo(r)*kaijo(n-r));
return c;
}
0066デフォルトの名無しさん2006/11/07(火) 15:06:41
脳内失敗

int kaijo(int x) {
if(x=0)
return 1;
return x*kaijo(x-1);
}
0067デフォルトの名無しさん2006/11/07(火) 15:07:24
いや、まだ失敗してるから
if ( x == 0 ) だろうが
0068デフォルトの名無しさん2006/11/07(火) 15:07:28
脳内大失敗
int kaijo(int x) {
if(x==0)
return 1;
return x*kaijo(x-1);
}
0069デフォルトの名無しさん2006/11/07(火) 15:31:33
#include <stdio.h>
#include <math.h>
main(){
double i,y1,y2;
for (i=-2.8;i<=2.8;i=i+0.02){

省略
指定された書式で思い思いに表示してください

}
}

double mycos(double x){
int n;
double y=0;
for(n=10;n>=2;n=n-4){
y=y-pow(x,n)/kaijo(n)+pow(x,n-2)/kaijo(n-2);
}
return y;
}

double mysin(double x){
int n;
double y=0;
for(n=11;n>=3;n=n-4){
y=y-pow(x,n)/kaijo(n)+pow(x,n-2)/kaijo(n-2);
}
return y;
}

展開式はアンロールしたよ その方が早いから(言い訳
0070デフォルトの名無しさん2006/11/07(火) 16:27:45
59さん、説明不足ですいません。書き出すだけで順番の指定はありません。重複した単語は�@つにまとめる必要があるみたいです(>_<)
0071デフォルトの名無しさん2006/11/07(火) 16:28:26
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):
#include <stdio.h>
#include<string.h> 
int main(void)
{
int i;
char str_num[10] = "123456789";
char str_alpha[6] = "abcde";
for(i=0;i<10;i++){
strcpy(str_num, "123456789");  /* �@ */
strncpy(str_num, str_alpha, i); /* �A */  
printf("i=%d, str_num:\"%s\"\n", i, str_num); /* �B */
}
return 0;
}
このプログラムの
�@をstrcpy(str_alpha, "abcde");
�Aをstrncpy(str_alpha, str_num, i);
�Bをprintf("i=%d, str_alpha=\"%s\"\n", i, str_alpha);
とした場合の実行結果について説明し、strncpy()の動作について説明
しなさい。
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: 分かりません
 [3.3] 言語: C
[4] 期限: 明日の朝まで
よろしくお願いします。
0072デフォルトの名無しさん2006/11/07(火) 16:44:00
コンパイラ名とバージョン: 分かりません

ちょwwww分かれwwwwww
0073712006/11/07(火) 17:04:28
>>72
申し訳ないです。
コンパイラ名とバージョンは教えてもらってないです。
0074デフォルトの名無しさん2006/11/07(火) 17:09:23
>>71
kore.jikkou.sure.ba.ii.dake.jamaica!
0075sage2006/11/07(火) 17:21:14
1] 授業単元:プログラミング
[2] 問題文 番号と名前をメンバとする構造体を作成し、3件分のデータ表示を行うプログラムを作成せよ。
番号は3桁までとし、3桁を超える場合やすでに入力済みの数字が入力された場合はエラーを表示せよ。
 [3.1] OS:unix
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限:[2006年11月9日まで]
[5] その他の制限:なし

特に番号の重複エラーの処理がよくわからないのでよろしくお願いします。
0076712006/11/07(火) 17:24:41
>>74
もちろん実行したのですが、
/* �@ */
/* �A */  
/* �B */
を変えることによって、なぜこの様な実行結果になったかを説明しないと
いけないのです。
なぜこの様な実行結果になったかが解らなくて。
0077デフォルトの名無しさん2006/11/07(火) 17:36:39
>>76
strcpy.to.strncpy.wo.google
0078デフォルトの名無しさん2006/11/07(火) 18:32:35
[1] 授業単元: 情報A
[2] 問題文(含コード&リンク): 数字を二つ入力したとき、その二つの数字の間の全ての数の和(シグマ計算)
を出力する(1と10を入力すると55、のような)プログラムをif と gotoを用いて2パターン以上作成せよ。
[3] 環境
 [3.1] OS: (Windows
 [3.2] コンパイラ名とバージョン: 初心者なもので何のことか…
 [3.3] 言語: C++
[4] 期限: ([今年11月10日まで]
[5] その他の制限:超初心者なのでなるべく単純な方法でお願いします。m(_ _ )m
0079デフォルトの名無しさん2006/11/07(火) 18:38:32
>>76
ヒント web: manpage of strcpy
0080デフォルトの名無しさん2006/11/07(火) 19:37:49
>>35
作ってはみたが、時間がかかりすぎる。
それでもいいなら、アップする
CPU600MHz → 推定12時間以上?アリエネ
枝狩りのアルゴリズム考えないとな
0081デフォルトの名無しさん2006/11/07(火) 19:38:53
>>78
#include <stdlib.h>
main(){
int s,m,n;
scanf("%d",&m);
scanf("%d",&n);
s=(m+n)*(abs(m-n)+1)/2;
printf("%d",s);
}
0082デフォルトの名無しさん2006/11/07(火) 19:42:30
>>78
1)
#define go int
#define gogo if(
#define toog )
#include<stdio.h>
go amain(){
    go gog,gg,tot=0;scanf("%d%d",&gog,&gg);
    goto to;gdg:++gog;goto to;togo:tot += gog;goto gdg;
    to:gogo gog <= gg toog goto togo;printf("%d\n",tot);
}
2)
#define go int
#define gogo if(
#define toog )
#include<stdio.h>

go og(go gg){gg/10&&og(gg/10);putchar(gg%10+48);}
go main(){
    go gog,gg,tot=0;scanf("%d%d",&gog,&gg);
    goto to;gdg:++gog;goto to;togo:tot += gog;goto gdg;
    to:gogo gog <= gg toog goto togo;
    og(tot);
}
0083812006/11/07(火) 19:49:05
#include <stdio.h> ぬけてた
0084デフォルトの名無しさん2006/11/07(火) 19:50:53
>>81 さらに条件を満たすために最後に追記しては?
if(1) goto owari;
owari:
0085デフォルトの名無しさん2006/11/07(火) 20:01:54
>>84
先生がイラつくこと間違い無しの良解答だな
0086デフォルトの名無しさん2006/11/07(火) 20:11:45
goto文を使わせるなんてどういう教育してるんだか。
最近の教科書にはどんどん使いましょうとか書いてあるのか。
0087デフォルトの名無しさん2006/11/07(火) 20:12:20
IOCCC は anderson.c が最高傑作だと思う。
0088デフォルトの名無しさん2006/11/07(火) 20:19:26
>>58
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define BUF_SIZE 1024
typedef struct tag_word_list{
char *word_data;
struct tag_word_list *next;
}word_list;
void word_add(const char *one_word, word_list **start){
word_list *wl;
for(wl=*start;wl!=NULL;wl=wl->next)
if(strcmp(one_word, wl->word_data)==0) return;
wl=malloc(sizeof(word_list));
wl->word_data=strdup(one_word);
wl->next=*start;
*start=wl;
}
int main(void){
char one_word[BUF_SIZE], dummy[BUF_SIZE];
word_list *wl=NULL;
while(!feof(stdin)){
one_word[0]='\0';
if(fscanf(stdin, "%[a-zA-Z-]", one_word)==1) word_add(one_word, &wl);
fscanf(stdin, "%[^a-zA-Z-]", dummy);
}
for(;wl!=NULL;wl=wl->next)
printf("%s\n", wl->word_data);
return 0;
}
0089デフォルトの名無しさん2006/11/07(火) 20:31:37
[2] 問題文(含コード&リンク):
以下の様なプログラムを作りなさい。
・メイン関数の引数を用いてユーザ名とパスワードの前半部分を入力する。
・scanfを用いてパスワードの後半部分の入力を要求する。
・前半部分と後半部分を連結して1つのパスワードにする。
・前もって決めたパスワードと一致するか調べ、一致する場合には「OK, ユーザ名」のメッセージを
表示し、一致しない場合はパスワードの文字数を表示する。
以下、自分で考えてみたプログラムです。
#include<stdio.h>
#include<string.h>
#define MAX 20
int main(int argc, char *argv[]) /* ユーザ名をargv[1]としてパスワードの前半をargv[2]とします。*/
{char x[MAX], y[MAX], password[MAX]=abcd;
int i, k, flag=1;
scanf("%s", x);
y[MAX] = *strcat(argv[2], x);
k = strlen(strcat(argv[2], x));
for(i=0;i<=3;i++){
flag *= (y[i] == password[i]);}
if(flag == 1)
printf("OK, %s\n", argv[1]);
else
printf("パスワードの長さ:%d", k);}
ユーザ名はVVVでパスワードの前半はabで実行しパスワードの後半はcdを入力してみたのですが、
ちゃんとなりませんでした。どこをどのように訂正すれば良いのでしょうか?
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語: C
[4] 期限: 2006年11月8日18:00まで
[5] その他の制限: C言語を始めて4ヶ月程度なのであまり上級な知識は避けて頂けると助かります。
0090デフォルトの名無しさん2006/11/07(火) 20:34:42
>>35
#include <stdio.h>
#include <time.h>
void p(int i) { printf("%d ", i); fflush(stdout); }
int proc(void)
{
int a, b, c, d, e; double x, y, z, f[200];

for (e = 1; e < 200; e++)
f[e] = (double)e * e * e * e * e;
for (e = 1; e < 200; e++)
for (p(e), d = 1; d < e; d++)
for (c = 1; c < d && (z = f[c] + f[d]) < f[e]; c++)
for (b = 1; b < c && (y = f[b] + z) < f[e]; b++) {
for (a = 1; a < b && (x = f[a] + y) < f[e]; a++)
;
if (x == f[e])
return !printf("\na=%d b=%d c=%d d=%d e=%d\n",
a, b, c, d, e);
}
return printf("not found\n");
}
int main(void)
{
clock_t t = clock();
proc();
printf("%g\n", difftime(clock(), t) / CLOCKS_PER_SEC);
return 0;
}
0091デフォルトの名無しさん2006/11/07(火) 20:39:18
パスワードはパスワード用のライブラリ関数を使うべき
0092デフォルトの名無しさん2006/11/07(火) 20:42:01
[1] 授業単元: プログラミングI(C)
[2] 問題文(含コード&リンク): 引数で受け取った全角文字列を逆順に入れ替える
int reverse(char *str)を作成せよ。
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン: VC 6.0
 [3.3] 言語: C
[4] 期限:明日まで
[5] その他の制限: インクルードはstdio.hのみでお願いします。

「C言語プログラミング」と文字列に入れたら「グンミラグロプ語言C」と出力されるようにお願いします。
0093デフォルトの名無しさん2006/11/07(火) 20:43:08
お願いします
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):ある商店でメロンを販売している。この商店では購入個数が増えると1個あたりの単価が安くなる。メロン1個の仕入価格は1000円である。またメロンの購入個数と単価の関係は以下のようになっている。
 5個未満:1個あたり2000円
10個未満:1個あたり1900円
15個未満:1個あたり1500円
20個未満:1個あたり1400円
20個以上:1個あたり1200円
客がn人買いにきたとして、格客の購入個数を入力し、それぞれの支払い価格と商店の総販売価格と総利益出力するプログラムを作成せよ。nはプログラム開始時に読み込むこと。
[3] 環境
 [3.1] OS:Windows
 [3.3] 言語:C++
[4] 期限:明日
0094デフォルトの名無しさん2006/11/07(火) 20:47:19
>>89
password[MAX]=abcd;
↓
password[MAX]="abcd";

y[MAX] = *strcat(argv[2], x);
↓
sprintf(y, "%s%s", argv[2], x);

for(i=0;i<=3;i++){
flag *= (y[i] == password[i]);}
↓
flag=(strcmp(y, password)==0);
0095デフォルトの名無しさん2006/11/07(火) 20:59:06
>>89
return忘れてるぞ
0096デフォルトの名無しさん2006/11/07(火) 20:59:26
>>92
文字コードの指定はないのか?
内部で判別するの?
シフトJIS限定?
0097デフォルトの名無しさん2006/11/07(火) 21:03:46
>>92
>引数で受け取った全角文字列を逆順に入れ替える
>〜と出力されるように

どっちだ?
むしろ出力したら駄目なんじゃないかな?かな?
0098922006/11/07(火) 21:04:37
文字コードの指定はありませんでした。
0099892006/11/07(火) 21:17:45
レスありがとうございます。
>>94
あ、「"」つけるの忘れてました。

y[MAX] = *strcat(argv[2], x);
↓
sprintf(y, "%s%s", argv[2], x);
についてですが、sprintfは、まだ習って無いです。strcatを使って出来ないですかね?
strcatにアスタリスクを付けなければ、うまくいきそうなのですが、
それだとコンパイルに通らないですし。

>>95
あ、リターンも忘れてました。
0100デフォルトの名無しさん2006/11/07(火) 21:21:46
(;´Д`)つ $man strcat
0101922006/11/07(火) 21:21:48
#include <stdio.h>
int reverse(char *str)
{
char *p, tmp;
p = str;
for( ; *p != '\0' ; p++);
for( ; p-str > 0 ; str++){
tmp = *(--p);
*p = *str;
*str = tmp;
}
return 0;
}
main(void)
{
char str[30]="abcde";
printf("reverse関数実行前\n%s\n",str);
printf("reverse関数実行後\n");
reverse(str);
printf("%s",str);
return 0;
}

1バイト文字をreverse関数で逆順に並べ替えて、main関数で出力はできたのですが、
2バイト文字だと文字化けしてしまいます。
■ このスレッドは過去ログ倉庫に格納されています