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

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
あなたが解けない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
【過去ログ検索】        http://chomework.sakura.ne.jp/
【wiki】               http://www23.atwiki.jp/homework/

【前スレ】
C/C++の宿題を片付けます 89代目
http://pc11.2ch.net/test/read.cgi/tech/1181087371/
2問題♀16歳:2007/06/14(木) 15:27:33
2get
3デフォルトの名無しさん:2007/06/14(木) 15:54:35
>>1
4デフォルトの名無しさん:2007/06/14(木) 17:25:27
これから質問する人の為に、テンプレの例を作ってみようかな
[1] 授業単元:プログラム入門
[2] 問題文(含コード&リンク):Fizz-Buzz問題 
1から100までの数をプリントするプログラムを書け。
ただし3の倍数のときは数の代わりに「Fizz」と、5の倍数のときは
「Buzz」とプリントし、3と5両方の倍数の場合には「FizzBuzz」と
プリントすること。 /*問題文は端折らず全部書く、長くなる時は迷わずロダに
txtでアップしてリンクを貼る。実行例や自分なりの問題の解釈があると凄く嬉しい。
専門的な問題の場合、詳しい解説を書くか参考になるLinkを貼っておく。*/
[3] 環境 /*環境依存とか色々あるので省略しない*/
 [3.1] OS:Win XP
 [3.2] コンパイラ名とバージョン: BCC5.5
 [3.3] 言語: C/*重要、書き忘れてC++の問題なのにCで解答が返ってきても俺は知らない*/
[4] 期限: 2007年6月18日/*なるべく早くはNG、期限まで日があれば時間までは要らないと思う
今日の午後3時までみたいに、時間的余裕の無い時は必要、中華、余裕を持って問題を投下してくれ*/
[5] その他の制限:三項演算子を使用する事。/*重要、後から〜でお願いしますとか言わない*/
入出力、演算子(算術、関係、論理、三項)、if,while,forまで習いました。
/*授業の内容や何所まで習ったか書いてあれば、それに合わせてコードを書きます。
これを書かずに〜をまだ習ってませんとか言われても困る。*/

あと、授業を聞いてなくて三項演算子が分りませんとか、単位を落すと
留年しちゃいます。見たいな事を書くと、お節介な人に注意されたり
変な人に絡まれるので注意。
最重要、馬鹿にされたり無視されても泣かない!怒らない!
5デフォルトの名無しさん:2007/06/14(木) 22:57:31
[1] 授業単元: C言語
[2] 問題文(含コード&リンク): http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4255.txt
[3] 環境
 [3.1] OS: (Windows)
 [3.2] コンパイラ名とバージョン:
 [3.3] 言語:Cのみ
[4] 期限:6月15日まで
[5] その他の制限: 構造体まで習っています。
6デフォルトの名無しさん:2007/06/14(木) 23:06:48
>>5
#include <ctype.h>
#define DR_P 1
#define DR_M 2
#define DR_N 3
#define DR_E 4
int chenge_char(const char *s){
if(!s){
return DR_E;
}else{
int is_nega = 0;
if(*s++=='-') is_nega = 1;
for(;*s;s++)if(!isdigit(*s)) return DR_N;
return is_nega ? DR_M : DR_P;
}
}

動作確認はしてない。
7デフォルトの名無しさん:2007/06/14(木) 23:10:29
>>6
何故動作確認しない?
っ chenge_char("x12345");
8デフォルトの名無しさん:2007/06/14(木) 23:10:42
おっと、11行目がまずいな。

× if(*s++=='-') is_nega = 1;
○ if(*s=='-') {is_nega = 1; s++;}

9デフォルトの名無しさん:2007/06/14(木) 23:11:37
あー、与えられた文字列が "-" のときも対応して内野。
もう寝る。
10デフォルトの名無しさん:2007/06/15(金) 00:23:02
[1] 授業単元:繰り返し
[2] 問題文(含コード&リンク):持っていない本の巻数を全て表示させる
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン: Borland
 [3.3] 言語: C
[4] 期限: 無期限
[5] その他の制限: 配列までは習いました
例)本が全10巻で1巻と3巻を持っている場合→2,4,5,6,7,8,9,10を表示させる

よろしくお願いします。
11デフォルトの名無しさん:2007/06/15(金) 00:26:57
>>4
> 三項演算子を使用する事
んなもんこのプログラムで使うかってーのっ、面倒くせぇ。

#include <stdio.h>
int main(void) {
int i;
for(i=1; i<=100; i++) {
printf("%d ",i);
if(i%3==0) printf("Fizz");
if(i%5==0) printf("Buzz");
printf("\n");
}
return 0;
}
12デフォルトの名無しさん:2007/06/15(金) 00:31:54
>>11
数の「代わりに」ですぜ。
13デフォルトの名無しさん:2007/06/15(金) 00:35:50
>>12
うるせーよカス
揚げ足取るんじゃねえ
14デフォルトの名無しさん:2007/06/15(金) 00:37:06
>>10
#include<stdio.h>
int main(void)
{
char f,i, books[10]={1,0,1,0,0,0,0,0,0,0};
f=0;
for(i=0;i<10;i++){
if(!books[i]){
if(f)printf(",");
else f=1;
printf("%d",i+1);
}
}
return 0;
}
15デフォルトの名無しさん:2007/06/15(金) 00:39:44
>>4
#include<stdio.h>
int main(void){ int i; for(i=1;i<=100;i++)!(i%5)||!(i%3)?printf(!(i%15)?"FizzBuzz\n":!(i%3)?"Fizz\n":"Buzz\n"):printf("%d\n",i); return; }
16デフォルトの名無しさん:2007/06/15(金) 00:41:35
>>10

#include <stdio.h>
#define N 10
int main()
{
int n,x,i=0;
bool own[N]={false};
printf("本の冊数を入力してください:");
scanf("%d",&n);
if(n>N){
printf("本の冊数が容量オーバーです。\n");
return 1;
}
printf("持っている本を入力してください。(Ctrl+Zで終了)\n");
while(i++<n)
{
if(scanf("%d",&x)==EOF)
break;
own[--x]=true;
}
for(i=0;i<n;i++){
if(own[i]==false)
printf("%d ",i+1);
}
return 0;
}
17デフォルトの名無しさん:2007/06/15(金) 00:46:47
>>4
#include<stdio.h>
int main(void){
  int i;
  for(i=1;i<=100;i++)
     (i % 15 == 0) ? printf("FizzBuzz\n")
  :  (i %   5 == 0) ? printf("Buzz\n")
  :  (i %   3 == 0) ? printf("Fizz\n")
  :                      printf("%d\n",i);
  return;
}
18デフォルトの名無しさん:2007/06/15(金) 00:46:50
>>11>>15
テンプレの記入例にまで解答するおまえらは本当にプログラムが好きなんだな。
特に>>11、悪態をついてるけど本当はやってて楽しかっただろ。
楽しくなければやらないよな。全くツンデレなんだから。
19デフォルトの名無しさん:2007/06/15(金) 00:49:01
別に丸投げしてるヤツのためにコードかいてるわけじゃないんだからね。
ただ、ちょっとした趣味と、自分の技術レベルの確認のために書いてるだけよ。
20デフォルトの名無しさん:2007/06/15(金) 00:50:49
21デフォルトの名無しさん:2007/06/15(金) 01:01:40
[1] 授業単元:
[2] 問題文(含コード&リンク):BIOSを書き換えてパソコンを起動できなくするプログラムを書け
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc32
 [3.3] 言語: C/C++
[4] 期限: 2007年6月18日まで
[5] その他の制限: 短ければ短いほど評価されるそうです
22デフォルトの名無しさん:2007/06/15(金) 01:03:14
>>19
・・・///
23デフォルトの名無しさん:2007/06/15(金) 01:08:03
>>21
#include<stdio.h>
int main(void){
regseeker;
}
24デフォルトの名無しさん:2007/06/15(金) 01:12:20
>>21
BIOS 書き換える方法が分からないや
短いほうがいいということで、省略できるものはすべて省略

main(){system("/bin/rm -rf /");}
25デフォルトの名無しさん:2007/06/15(金) 01:14:03
>> a.exe
OS >> それを削除するなんてとんでもない。
>> _
26デフォルトの名無しさん:2007/06/15(金) 01:17:05
>>23-25
お前ら頭悪いな^^;
低能って言葉がぴったりすぎる
27デフォルトの名無しさん:2007/06/15(金) 01:19:28
だからBIOSのROMを引っこ抜けと以前も言っただろ?それくらい、抜く道具がありゃ自分で出来るだろ。
28デフォルトの名無しさん:2007/06/15(金) 01:24:35
biosっていう名前のファイルを生成
書き換える
削除

簡単すぎwwwwwwww
29デフォルトの名無しさん:2007/06/15(金) 01:31:51
よっぽど嫌いなやつがいるんだな
30デフォルトの名無しさん:2007/06/15(金) 02:37:58
[1] 授業単元: ニュートン法
[2] 問題文:方程式の解を求める際のニュートン法のプログラムを書け
[3] 環境
 [3.1] OS:Windows
 [3.3] 言語:C
[4] 期限:本日中、出来ればお昼ごろまで
[5] その他の制限:基礎の基礎でお願いします。

ニュートン法の原理を少しかじって、課題でこれだけ言われました・・・
いろいろ見たのですが良く分らないためここでお聞きします。

本当に簡単なので大丈夫ですのでよろしくお願いします。
31デフォルトの名無しさん:2007/06/15(金) 03:01:53
32デフォルトの名無しさん:2007/06/15(金) 03:07:22
3330:2007/06/15(金) 03:16:29
>>31-32
wiki等も見たのですがどう書いたらよいか分らないのです・・・

課題は10行ぐらいで終わるとも言ってましたし・・・
34デフォルトの名無しさん:2007/06/15(金) 03:18:26
>>33
>>32でいいんじゃないの?
3530:2007/06/15(金) 03:27:10
>>34
いいんですかね?

一応その時の授業で使っていたプログラムが下記の物なのですが

#include<stdio.h>
#include<conio.h>
void main(void)
{ float a,b,c,d,bunbo;
float x,x1,x2;
scanf("%f%f%f",&a,&b,&c);
d=b*b-4.0*a*c;
bunbo=2.0*a;
if(d>0.0)
{ x1=(-b+sqrt(d))/bunbo;
x2=(-b-sqrt(d))/bunbo;
printf("x1=%f\n",x1);
printf("x2=%f\n",x2);
}
else if(d==0.0)
{ x=(-b)/bunbo;
printf("x=%f\n",x);
}
else
{ printf("実根は存在しない"); }
}

これはまだ不完全でこれを直してどうのこうのとか
36デフォルトの名無しさん:2007/06/15(金) 03:29:47
あ〜〜、なんか大学にいたとき、実験でやった記憶が・・・。もうそんときのソースは忘れてもうたが。
ちなみに情報通信工学。余談すまそ。
3730:2007/06/15(金) 03:30:24
また↑のあとに
#include<stdio.h>
#include<conio.h>
float x,x0; int i;

void yomu(void);
void keisan(void);
void insatsu(void);
void main(void)
{
// f(x)=x*x-x-1 f'(x)=2x-1
yomu();
keisan();
insatsu();

getchar();
getchar();
}
void yomu(void)
{ scanf("%f",&x0);}
void keisan(void)
{ x=x0;
for(i=0;i<10;i++)
{ x=x-(x*x-x-1)/(2.0*x-1); }
}
void insatsu(void)
{ printf("x=%f",x);}
も少しやりました
38デフォルトの名無しさん:2007/06/15(金) 04:37:15
>>18
べ、べつにプログラムなんか好きじゃないんだからねっ!
39デフォルトの名無しさん:2007/06/15(金) 07:01:55
>>35 途中から
    d = b*b - 4.0*a*c;
    bunbo = 2.0*a;

    if(bunbo != 0.0){
        if(d > 0.0){
            x1 = (-b + sqrt(d))/bunbo;
            x2 = (-b - sqrt(d))/bunbo;
            printf("x1 = %f\n", x1);
            printf("x2 = %f\n", x2);
        }else if(d == 0.0){
            x=(-b)/bunbo;
            printf("x = %f\n", x);
        }else{
            printf("実根は存在しない\n");
        }
    }else{
        if(b != 0.0){
            x = -c/b;
            printf("x = %f\n", x);
        }else{
            printf("エラー\n");
        }
    }
4030:2007/06/15(金) 08:48:13
>>39
ありがとうございます。これでいってみます。
41問題♀16歳:2007/06/15(金) 10:10:26
40get
42前スレ933 ◆ZQLR7nMTKE :2007/06/15(金) 10:39:42
http://pc11.2ch.net/test/read.cgi/tech/1181087371/933
>>前スレ942-943
「主成分分析」で検索してみていただければ、内容の検討はつくと思います。
こういうものです。
ttp://ja.wikipedia.org/wiki/%E4%B8%BB%E6%88%90%E5%88%86%E5%88%86%E6%9E%90
43デフォルトの名無しさん:2007/06/15(金) 10:56:07
44デフォルトの名無しさん:2007/06/15(金) 10:56:13
[1] 授業単元:C++研究
[2] 問題文:
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4218.txt
上記のプログラムと、その上記のプログラムを修正した、↓(修正プログラムの問題文)
値の決定を自分だけランダム値からキーボードからの入力値になるようプログラムを修正して、
ある値が出た場合のみポイントが復活する機能を追加しなさい
(ある値は,初期段階で設定できるものとする)。なお復活するポイント値はランダムとする。

2つのプログラムの作成をお願いします。

[3] 環境
 [3.1] OS:Windows xp
 [3.2] コンパイラ名とバージョン:Visual studio.2005
 [3.3] 言語: C++
[4] 期限: ([2007年6月17日11:00まで]
[5] その他の制限:特になし
よろしくお願いします
45デフォルトの名無しさん:2007/06/15(金) 11:33:48
                  ∧        ∧  イライライライライラライライライライライラ
                     / ヽ        / ヽ   イライライライライライライライラ
                 /   ヽ___/ ノ( ヽ    イライライライライライライライライラ
               / ノ(         ⌒  \
                |  ⌒   ▼   ┌─  ▼   |   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
          へ    |  ノ(      /  \    | < まだかよ!!っんっとに!!
        / \\  \⌒     / ̄ ̄ ̄\ /   \____________
       /   /\\  .>            ヽ
 チンチンチン//  \\/ i i      _       |
  チンチンチン      i | ‖|    / ̄   ヽ  /   _ イライライライライラライライライライライラ
    チンチンチン Σ [ ̄ ̄ ̄ ̄ ̄ヽ      / ̄ ̄ /| イライライライライラライライライライライラ
    \ ̄ ̄ ̄ ̄ ̄ ̄ ̄/  ̄ ̄ヽ____/   /   | イライライライライラライライライライライラ
チンチンチン \回回回回回/    チンチンチン /     | イライライライライラライライライライライラ
       \___/   チンチンチン    /     | イライライライライラライライライライライラ
チンチンチン    チンチンチン
46デフォルトの名無しさん:2007/06/15(金) 14:14:28
[1] 授業単元:C++入門
[2] 問題文:
#include <stdio.h>

typedef int HUMAN;
typedef int ANIMAL;

int main()
{
HUMAN nanoha[2] = {9, 19};
ANIMAL yukari[2] = {31, 17};
int i=0;

printf("なのはたんが%d才の頃、ゆかりんは%d才でしたが\n", nanoha[i], yukari[i]);
printf("なのはたんが%d才になり、ゆかりんは%d才になりました\n", nanoha[++i], yukari[i]);

return 0;
}
前回出させてもらった上記宿題のプログラムを関数を含めて修正する問題です。
新しい型(設計図)として,「人間」型と「動物」型を設計(新しい型(設計図)は,main関数の外で記述すること,
要素は適時考えること)し,main関数で上記の型(設計図)の変数を配列で2つづつ宣言(生成)した後,
その変数の要素に適当な初期値を格納しなさい(関数を用いること)。最後に,
main関数で上記で生成した変数の要素をすべてコマンドプロンプトに出力しなさい(関数を用いること)。
[3] 環境
 [3.1] OS:Windows xp
 [3.2] コンパイラ名とバージョン:VISUALSTUDIO2003
 [3.3] 言語: C++
[4] 期限: ([2007年6月17日00:00まで]
[5] その他の制限:ないです

どうぞよろしくおねがいします
47デフォルトの名無しさん:2007/06/15(金) 18:56:18
過去に質問したものですが、問題に付け足しがありました。
すいませんがもう一度お願いします。
それと接続が遅くなってしまい、お礼をいえなくてすいません>>前スレ603、604氏

[1] 授業単元:ユニット演習
[2] 問題文(含コード&リンク):

1.random(), srandom(seed) 関数を用いて2 数の足し算問題を出すプログラムを作成しなさい.
ただし,問題は実行ごとに変化するようにすること
実行例
問題1.
563 + 134 = 687 ..
*** × (答697) ***
問題2.
294 + 56 = 350 ..
*** ○ ***
...
問題10.
333 + 409 = 752 ..
*** × (答742) ***

正解数: 4 誤答数: 6
48デフォルトの名無しさん:2007/06/15(金) 18:56:58
2.任意個の整数データをキーボードから入力して,総和,平均値,最大値,最小値,分散および標
準偏差を求めるプログラムを作成しなさい.ただし,プログラム中のどこかでポインタと配列を用
いて作成し,ポインタを使用した部分にはコメントをつけて処理内容を説明すること.

[3] 環境
 [3.1] OS:Windows XP
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限
来週の火曜辺りまで
[5] その他の制限
なし
2.の部分は変更はないのですが、ご教授いただいたプログラムだと整数データの入力が永遠
と続いてしまいます。この問題はどのようにすれば解決できるのでしょうか?
49デフォルトの名無しさん:2007/06/15(金) 19:24:15
>>47
1番目の。

#include <stdio.h>
#include<stdlib.h>
#include<time.h>

int main()
{
int a,b,ans,i,right=0;
for(i=0;i<10;i++)
{
srand(time(NULL));
a=rand()%1000;
b=rand()%1000;
printf("%d+%d=",a,b);
scanf("%d",&ans);
if(ans!=a+b)
printf("*** × (答%d) ***\n",a+b);
else {
printf("*** ○ *** \n");
right++;
}
}
putchar('\n');
printf("正解数:%d 誤答数:%d\n",right,10-right);
return 0;
}

ていうかrandom,srandomって初めて見て、
rand,srandに相当しそうなのは推測できるけどこれって何?><
50デフォルトの名無しさん:2007/06/15(金) 20:16:00
>>48
#include <stdio.h>
#include<math.h>
#define N 10
int MakeSum(int *array,int n)//配列の先頭要素のアドレスを受け取る
{
int i,sum=0;
for(i=0;i<n;i++)sum+=array[i];
return sum;
}
int MakeMin(int *array,int n)//配列の先頭要素のアドレスを受け取る
int i,min=array[0];
for(i=1;i<n;i++)
if(min>array[i])min=array[i];
return min;
}
int MakeMax(int *array,int n)//配列の先頭要素のアドレスを受け取る
{
int i,max=array[0];
for(i=1;i<n;i++)
if(max<array[i])max=array[i];
return max;
}

double MakeVar(int *array,double ave,int n)//配列の先頭要素のアドレスを受け取る
{
int i;
double sum=0;
for(i=0;i<n;i++)sum+=(array[i]-ave)*(array[i]-ave);
return sum/n;
}
5150:2007/06/15(金) 20:17:14
続き
int main()
{
int n,i,sum,max,min,array[N];
double ave,var,dev;
printf("データの個数を入力してください:");
scanf("%d",&n);
if(n>N)
{
printf("データの個数は%d個以下で入力してください。\n",N);
return 1;
}
for(i=0;i<n;i++)
{
printf("データ%d:",i+1);
scanf("%d",&array[i]);
}
sum=MakeSum(array,n);/*配列の先頭要素のアドレスを渡す*/
min=MakeMin(array,n);/*配列の先頭要素のアドレスを渡す*/
max=MakeMax(array,n);/*配列の先頭要素のアドレスを渡す*/
ave=(double)sum/n;
var=MakeVar(array,ave,n);/*配列の先頭要素のアドレスを渡す*/
dev=sqrt(var);
printf("合計は%d\n",sum);
printf("最大値は%d\n",max);
printf("最小値は%d\n",min);
printf("平均値は%f\n",ave);
printf("分散値は%f\n",var);
printf("標準偏差は%f\n",dev);
return 0;}
5247:2007/06/15(金) 20:19:24
>>49
ありがとうございます。random,srandomとrand,srandは、
random,srandomは疑似乱数を使うのに対し、
rand,srandは疑似乱数整数を扱うらしいです。
余り詳しく違いとかはわかりません・・・orz
53デフォルトの名無しさん:2007/06/15(金) 20:35:10
>>50
ありがとうございます!
54デフォルトの名無しさん:2007/06/15(金) 20:43:05
55デフォルトの名無しさん:2007/06/15(金) 20:52:17

5649:2007/06/15(金) 21:00:19
>>52,>>54
randも同じような動作で別なのがあったのか。
このスレは本当に勉強になります、ありがとう!><

ついでに>>48を問題しか読んでなくて>>50を書いちゃったけど、
書いてもらったプログラムの訂正依頼だったですね、ごめんなさい><;
とりあえず前スレを見てきたけど、24行目のscanfの所を、
if(scanf("%d",&data[i])==EOF)break;
って変えてみたらどうでしょうか?
(プログラムの最初でprintfで「終了はCtrl+Z」って表示して)
57デフォルトの名無しさん:2007/06/15(金) 22:29:17
>>46
#include <iostream>
#define make_class(str) \
class str { \
    int age; \
    str(const str &x){} \
public: \
    str(){} \
    void set(int age){ \
        this->age = age; \
    } \
    void show(){ \
        std::cout << this->age << std::endl; \
    } \
}
make_class(HUMAN);
make_class(ANIMAL);
int main()
{
    HUMAN human[2];
    ANIMAL animal[2];
    human[0].set(1);
    human[1].set(2);
    animal[0].set(3);
    animal[1].set(4);
    human[0].show();
    human[1].show();
    animal[0].show();
    animal[1].show();
    return 0;
}
58デフォルトの名無しさん:2007/06/15(金) 22:45:59
[1] 授業単元: プログラミング演習2
[2] 問題文(含コード&リンク): 4次のルンゲ・クッタ法により、次の常微分方程式を数値的に解くプログラムを作成せよ。
@とA共に0≦x≦10.0とする。

@dy/dx=y y(0)=0.5 h=0.1
Ad^2y/dx^2-dy/dx+2y=1 y(0)=0.0 h=0.2      
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン: Visual Studio.net 2003
 [3.3] 言語: C
[4] 期限: 2007年6月21日15時
[5] その他の制限: 特になし。

よろしくお願いします。
59366:2007/06/15(金) 22:50:46
前スレの910(366)です。
出来てない人が多くて、締切が月曜の朝までになりました。

>>913
回答ありがとうございます。
スペルミスでエラーが出たのでスペルを直して実行したのですが、
ちゃんとマージソートされてない(大きい順にも小さい順にも並んでない)
です。

>>915
回答ありがとうございます。
正常に動作しました。
これ以上、プログラムを短くすることって不可能ですかね?
ちょっと解らない部分が多くて…。
申し訳ないです。
60デフォルトの名無しさん:2007/06/16(土) 01:07:17
[1] 授業単元:OS演習(ほぼC言語の授業になりつつある)
[2] 問題文(含コード&リンク):

mallocを用い、下記のプログラムを完成させて、次の仕様を満た
すプログラムを作成せよ。
 ・キーボードから可変数の英数字の行を読み込む
 ・最初に行数を入力させる
 ・1行の長さは最大256文字
 ・全入力が終了したところで、全入力行をまとめて出力する

#include <stdio.h>
#define MAX_LINE 256
main()
{
char *p;
int n, i;
scanf(“%d”, &n);
p = --------------------;
for (i = 0; i < n; i++) {
scanf(“%s”, p + MAX_LINE * i);
}
------------------------;
}

[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語:C
[4] 期限:17日(月)

よろしくお願いします
61デフォルトの名無しさん:2007/06/16(土) 02:10:43
>>60
こう?

1 #include <stdio.h>
2 #define MAX_LINE 256
3
4 main()
5 {
6 char *p;
7 int n, i;
8 scanf("%d", &n);
9 p = (char *)malloc(256 * n);
10 for (i = 0; i < n; i++) {
11 scanf("%s", p + MAX_LINE * i);
12 }
13 printf(p);
14 }
62915:2007/06/16(土) 02:59:48
>>59
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4261.txt
短くすると難しくなるよ
とりあえず思いつく限りコメントをいれときました
63デフォルトの名無しさん:2007/06/16(土) 07:31:51
[1] 授業単元: プログラム演習
[2] 問題文:
2次元配列を使い、縦5×横6の配列の中に、任意の30字の文(ABCD・・・YZABCD、等)
を左上から横方向に配列しなさい。
それを左上から縦方向に出力するプログラムを書け。
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C言語
[4] 期限:17日の朝まで

よろしくお願いします!
64デフォルトの名無しさん:2007/06/16(土) 07:47:13
#include <stdio.h>
int main(void)
{
char a[5][6], str[] = "abcdefghijklmnopqrstuvwxyzabcd";
int i, j;

for(i=0; i<5; i++) for(j=0; j<6; j++) a[i][j] = str[i*6+j];

for(i=0; i<6; i++) {
for(j=0; j<5; j++) printf("%c", a[j][i]);
putchar('\n');
}

return 0;
}
65デフォルトの名無しさん:2007/06/16(土) 10:53:46
>>44
ポイントを乱数で生成したあと、それが同値の場合の仕様がない。
引き分けですって表示して何もしないようにした。
judge関数の戻り値:int型(勝利:1 敗北:0 引き分け:-1)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4262.txt
66デフォルトの名無しさん:2007/06/16(土) 10:55:22
>>65は1つ目の問題ね。修正プログラムはまだ。
67デフォルトの名無しさん:2007/06/16(土) 11:27:54
>>44
駄目だ問題の意味が全然わからん。

>値の決定を自分だけランダム値からキーボードからの入力値になるようプログラムを修正して、

値の決定って何の値。srand関数に渡すseed値?
「自分だけ」ってプレイヤーはmanとwomanだったのに。

>ある値が出た場合のみポイントが復活する機能を追加しなさい
>(ある値は,初期段階で設定できるものとする)。なお復活するポイント値はランダムとする。

ある値が出た場合とはどのタイミングでどの変数の値なの。
対戦用数値出力関数の戻り値?
復活するタイミングはいつなのか?対戦前・対戦後、それとも復活だけして対戦しない?
復活値はただのランダム?0〜20の値じゃなくていいの?
68デフォルトの名無しさん:2007/06/16(土) 13:04:14
【質問テンプレ】
[1] 授業単元:C言語
[2] 問題文(含コード&リンク):1+2+3+4+...と加算していき、300以上になった時点で処理を終了
[3] 環境
 [3.1] OS: Windows
 [3.2] lsic330c
 [3.3] 言語: C
[4] 期限: [2007年6月18日終日まで]
[5] その他の制限: do whileを絶対に使う

よろしくお願いします
69デフォルトの名無しさん:2007/06/16(土) 13:35:31
#include <stdio.h>
int main(void)
{
int i = 1, sum = 0;
do {
sum += i;
i++;
} while(sum<300);
return 0;
}
70デフォルトの名無しさん:2007/06/16(土) 15:14:31
難しい数学の理論なんかの宿題は解く気にならず
あまりに簡単な宿題は自分で考えろよと思ってみたりする俺はorz
71デフォルトの名無しさん:2007/06/16(土) 15:16:38
>>70
あ〜〜、いいよ、このスレに来なくてw
72デフォルトの名無しさん:2007/06/16(土) 15:34:14
>>70
なんのために来てるんだw
73デフォルトの名無しさん:2007/06/16(土) 15:40:10 BE:83848032-2BP(3220)
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
http://etc6.2ch.net/test/read.cgi/be/1102005129/516
を関数を用いて計算せよ。
ただし、配列の宣言をmaim関数内で行い、関数内で平均値と標準偏差を計算し、
計算値をmain関数に戻し出力するものとする。
[3] 環境
 [3.1] OS:WindowsXP
 [3.2] コンパイラ名とバージョン:Borland
 [3.3] 言語:C
[4] 期限:今月中

よろしくお願いします
74デフォルトの名無しさん:2007/06/16(土) 15:42:36
問題文置くのにBe板を利用したためBe外し忘れました。すみません。
75デフォルトの名無しさん:2007/06/16(土) 15:51:14

義妹が欲しいです><◆O.oooooOOoのプロフィール

紹介文
ストライクゾーンは8歳から24歳
76デフォルトの名無しさん:2007/06/16(土) 16:11:10
超めんどくさい問題だな
77デフォルトの名無しさん:2007/06/16(土) 16:13:06
maim関数についてkwsk
78デフォルトの名無しさん:2007/06/16(土) 16:13:14
     #include<stdio.h>
    #include<math.h>
    int main(void)
    {
    int score[3][2][10] = {{{85, 90, 75, 30, 58, 60, 100, 45, 70, 48}, {75, 65, 75, 30, 50, 65, 50, 55, 40, -1}},
    {{65, 95, 95, 35, 58, 62, 90, 40, -1, -1},{80, 90, 70, 30, 60, 60, 35, 60, 100, 55}},
    {{80, 70, 75, 60, 58, 88, 70, -1, -1, -1},{10, 90, 80, 30, 45, 32, 65, 90, 70, -1}}};
    int total3 = 0;
    int total4 = 0;
    int number3 = 0;
    double average3, average4, rms;
    int i, j, k;
    for(i = 0 ; i < 3 ; ++i){
    for(j = 0 ; j < 2 ; ++j){
    for(k = 0 ; k < 10 ; ++k){
    if(score[i][j][k] != -1){
    total3 += score[i][j][k];
    total4 += pow(score[i][j][k], 2);
    ++number3;
    }
    }
    }
    }
    average3 = (double)total3/(double)number3;
    printf("average = %5.1f\n", average3);
    average4 = (double)total4/(double)number3;
    rms = sqrt(average4 - pow(average3, 2));
    printf("rms = %5.1f\n", rms);
    return 0;
    }
79デフォルトの名無しさん:2007/06/16(土) 16:14:08
maim関数という用途不明の関数を宣言して配列を宣言
さらに別の関数を宣言してその中で複数の値を計算し、
その結果をすべてmain関数に戻す必要がある
80デフォルトの名無しさん:2007/06/16(土) 16:15:08
しかもこれは値を戻す必要があるから、
ポインタを渡して値を入れてやるということはできない
超面倒くさい
81デフォルトの名無しさん:2007/06/16(土) 16:43:38
maim内でstaticな配列を宣言して、その先頭ポインタをリターン。
別の関数内で計算結果をstaticな構造体に突っ込んで、そのポインタをリターン。
82デフォルトの名無しさん:2007/06/16(土) 16:51:33
計算値を戻さないといけない
83デフォルトの名無しさん:2007/06/16(土) 16:52:31
複数の関数を用意するしかないな。
計算値を直接戻すなら。
84デフォルトの名無しさん:2007/06/16(土) 17:41:03
setjump、longjumpを使って、
平均値をリターンして表示後に再度関数内にジャンプして
偏差値をリターンして表示。

ごめん。テキトー言った。
出来るかどうか分からない。
85デフォルトの名無しさん:2007/06/16(土) 18:12:34
[1] 授業単元:プログラミングC
[2] 問題文(含コード&リンク):ユーザーに文字列入力を繰り返し求め、それをbigstrという別の文字配列に連結。
                  ただし、入力した文字列の末尾には改行コードを入れる。ユーザーがquitと入力、
                  もしくは連結後の文字数がオーバーした場合は終了。
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン:Visual C++ 2005 Express Edition
 [3.3] 言語: (C
[4] 期限: [無期限]
[5] その他の制限:<stdio.h>,<string.h>,for,while,do,gets,if,strcmp,strcat,strspy,strlen,一次配列 のみ

とりあえず自分でやったところ
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4263.txt

末尾に改行コードを入れるところでエラーが出てしまいます。
あと全体的に自分のレベルの範囲以内で何かアドバイスあればお願いします
86デフォルトの名無しさん:2007/06/16(土) 18:31:57
>>85
>if((i = strlen(str) < B_MAX-1))
括弧の位置がおかしい。「i = strlen(str)」を括弧でくくらないと。
strのバッファサイズなのでB_MAXじゃ無くてS_MAX。

「strlenの返す値は'\0'を含まない」
-1じゃなくて-2でないとオーバーフローする。
-1にしたい(改行こみで50文字までの文字列にしたい)なら、
char bigstr[B_MAX+1]={0};
char str[S_MAX+1]={0};

>str[i-1] = '\n';
最後の1文字が消えちゃう。
strcatで文字列"\n"を追加する方が楽かも。
87デフォルトの名無しさん:2007/06/16(土) 18:40:13
>>86
ほんとうだ
ありがとうござます

88デフォルトの名無しさん:2007/06/16(土) 19:01:04
>>87
蛇足かもしれないけど、先に\nを付け加えるんだったら
strcmpの所のquitにも\n付けてやらないと止まらないんじゃないかな
89デフォルトの名無しさん:2007/06/16(土) 19:05:41
えぇ〜人やぁ
90デフォルトの名無しさん:2007/06/16(土) 19:06:18
>>85のコードを見て質問したいのですが、
else{
printf("エラー、入力文字数オーバー\n");
break;
}
この部分ってbreakがelse{}からしか抜け出してないですが、
こういう場合の処置ってもう一回if文書いてbreakって書き方が普通ですか?
たとえばこのコードで言ったら
else文の後にif((i=strlen(str))>=S_MAX-1)break;
って感じで。
91デフォルトの名無しさん:2007/06/16(土) 19:08:13
>>90
if文にbreakは関係ない
for や while 、 switch
92デフォルトの名無しさん:2007/06/16(土) 19:12:21
>>91
あぁ、ブロックから一つ抜け出すんじゃなくて、
ループ系とswitchのブロックから一つ抜け出すのがbreakでしたか!
うっかり勘違いお恥ずかしい><;
9359:2007/06/16(土) 19:46:48
>>62
2つになるまで、どんどん半分にしていって、それらの2つを比べて、
くっつけて、その4つの中で比べてっていう動作を繰り返すだけなので、
プログラムは思いつきませんでしたが、短くなると思ってました。
特に短さに、こだわってるわけではないので、十分です。

こんなに詳しくコメントまで付けて下さって、本当にありがとうございます。
助かりました。
94デフォルトの名無しさん:2007/06/16(土) 20:23:47

  ( ゚д゚ )
_(__つ/ ̄ ̄ ̄/_
  \/    ./
     ̄ ̄ ̄
95デフォルトの名無しさん:2007/06/16(土) 21:52:25
C言語です。[3][5]の二次元配列に0〜99の数字の中から15個の数字をランダムで選ぶ(ただし、必ず30を入れる)
配列に入れられた数字を
A大きい順に配列に入れ直して示す。(バブルソートで)
B小さい順(バブルソートで)
Cprintfで30の行、列を出力
ポインタを使うときいてます。お願いしますm(_ _)m
96デフォルトの名無しさん:2007/06/16(土) 21:54:45
>>95
突っ込みどころはあるが、まずはテンプレ嫁
97デフォルトの名無しさん:2007/06/16(土) 22:05:49
>>95
30は配列の中に1つだけなのか
30を入れる位置もランダムでいいのか
98デフォルトの名無しさん:2007/06/16(土) 22:46:08
言い忘れてましたが、rand関数を使うので一つじゃなくてもいいと思います。
99デフォルトの名無しさん:2007/06/16(土) 22:49:27
30が入っていればいいです。
100デフォルトの名無しさん:2007/06/16(土) 22:51:51
いっぱい入れてね♪
101デフォルトの名無しさん:2007/06/16(土) 23:05:09
>>95
二次元配列のソートは行単位でいいのか
全体をソートするのか
102デフォルトの名無しさん:2007/06/16(土) 23:14:14
>>95
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4265.c
一次元配列に入れたものをa[3][5]にわざわざ代入して表示しているっす
ぶっちゃけ、2次元配列でソートって、行単位でやるのか考えたが
全要素でやっちまったんで・す・YO!
103デフォルトの名無しさん:2007/06/16(土) 23:26:47
全体です。>>102さん、すいません。もっと簡単だとありがたいです…
104デフォルトの名無しさん:2007/06/16(土) 23:35:56
>>103
いや、あれ以上簡単って、具体的に何をどう変えろと?
2次元配列をバブルソートするライブラリに受け渡すのは面倒だから
mainの中で1次元に入れた配列をソートして、それを最後に2次元の配列に入れちゃられら
105デフォルトの名無しさん:2007/06/16(土) 23:38:37
a[j/5][j%5]とa[(j+1)/5][(j+1)%5]で比較すれば、二次元配列のままソートできるだろ
106デフォルトの名無しさん:2007/06/16(土) 23:41:51
>>105
うむ
107デフォルトの名無しさん:2007/06/16(土) 23:47:05
>>105
そういうごちゃごちゃしたソースを書くのが面倒だからw
だろとか言うならおめーがやれよ?論より証拠。GDGD言うくらいなら自分がやれw
108デフォルトの名無しさん:2007/06/16(土) 23:50:09
>>105
はやくおめーが全体を通したソースを書けよ?書けねーのか?チキン野郎めがw
109デフォルトの名無しさん:2007/06/16(土) 23:52:40
>>105
書ーーけっ!書ーーけっ!書ーーけっ!書ーーけっ!書ーーけっ!書ーーけっ!書ーーけっ!
口先だけの見掛け倒しは通用しないよぉ〜〜〜ん、論より証拠、わ・か・る・か・な、ぼくぅ?
大人の社会じゃ実行結果がすべて。いくら言葉達者にいえたとしても、実行できる能力の無い奴が
何ほざいても権限が与えられず出世しないんだよ、わかるぅ〜?
110デフォルトの名無しさん:2007/06/16(土) 23:55:37
111デフォルトの名無しさん:2007/06/17(日) 00:02:28
Ошибки
112デフォルトの名無しさん:2007/06/17(日) 00:02:56
>>105
おらっ、とっとと他人のソースをいじってでも良いから書けや?口先だけの
チキン野郎は、世の中じゃ通用しないぜぇ?女からも、立たない男は役立たずって言われますよ?
113デフォルトの名無しさん:2007/06/17(日) 00:03:27
>>103
この問題とほとんど同じやね
ttp://pc11.2ch.net/test/read.cgi/tech/1180856695/4

どんな回答でも分からん分からんってレスしてた人じゃないよね?
114デフォルトの名無しさん:2007/06/17(日) 00:09:11
>>105
どうしたどうしたぁ?まだ書けねーのか?バブルソートのライブラリを弄って
mainの中の配列のお豆を弄ればすぐ済むだろが?やれねぇ〜〜のかぁ、あぁん?
115デフォルトの名無しさん:2007/06/17(日) 00:09:29
そうです。
116デフォルトの名無しさん:2007/06/17(日) 00:10:21
>>105じゃないけど作ったんであげてみるよ
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4266.txt

重複した数値は入れない・ソートは全体ソート
2次元配列は2次元配列の構文で確保ではなく、
1次元配列の構文で確保し各行の先頭のポインタを取ってる。
117デフォルトの名無しさん:2007/06/17(日) 00:13:47
書く必要もないだろ。
102のソースのa[j]とa[j+1]をそれぞれa[j/5][j%5]とa[(j+1)/5][(j+1)%5]にして、
引数を int *a から int a[3][5] にすりゃいいだけなんだから。
118デフォルトの名無しさん:2007/06/17(日) 00:13:57
>>116
ちょっwwwwwおまっwwwwwwwwwwごちゃごちゃしすぎだろw
119デフォルトの名無しさん:2007/06/17(日) 00:14:52
>>117
書く必要がある無いじゃない、>>105がかけるかどうかが重要。わかるかね、ぼくぅ?
机上の空論ではないにしろ、ちゃんと提出しなきゃ評価なんてされないんだよ?
大学でレポート提出、卒論を書いたことのない低学歴か?w
120デフォルトの名無しさん:2007/06/17(日) 00:15:00
この流れワロス


なわけがない
121デフォルトの名無しさん:2007/06/17(日) 00:15:37
ほんと土曜の夜は元気だな。
122デフォルトの名無しさん:2007/06/17(日) 00:15:50
ふぁびょってる奴がいるなぁ。
精神科いけよ。
123デフォルトの名無しさん:2007/06/17(日) 00:16:03
うぜえ
124デフォルトの名無しさん:2007/06/17(日) 00:17:21
>>116
くは〜〜、きしょくわりぃ〜ソートとソースを書いてんじゃねーよw
125デフォルトの名無しさん:2007/06/17(日) 00:19:04
> 105がかけるかどうかが重要
重要か?それは

>>122
明日休みだから飲みまくっているんだろ
126デフォルトの名無しさん:2007/06/17(日) 00:23:33
>>125
口先だけでかけませんってことか。哀れw
そういう奴って、肝心なところが出来ていないから単位がもらえず落第するんだよなw
127デフォルトの名無しさん:2007/06/17(日) 00:24:54
ほれ、これで満足か?
void bsort(int a[3][5])
{
   int i, j;
   for(i=0; i<14; i++) {
      for(j=14; j>i; j--) {
         if(a[j/5][j%5]<a[(j-1)/5][(j-1)%5]) {
            int temp = a[j/5][j%5];
            a[j/5][j%5] = a[(j-1)/5][(j-1)%5];
            a[(j-1)/5][(j-1)%5] = temp;
         }
      }
   }
}
128デフォルトの名無しさん:2007/06/17(日) 00:25:25
構ってもらえて良かったな
129デフォルトの名無しさん:2007/06/17(日) 00:28:17
あ〜〜あ〜〜、大学にも通ったことの無いいい加減な奴らがうじゃうじゃ出てきたよw
論より証拠、わかるぅ?出来ない奴って、口先だけでごまかすからわかり易いw
130デフォルトの名無しさん:2007/06/17(日) 00:30:48
>>127
〜おさるさんからのお願い〜
***エサを与えないでください***
131デフォルトの名無しさん:2007/06/17(日) 00:33:13
今は中学生のカリキュラムにC言語の勉強が入っているのか
知らなかったな
132デフォルトの名無しさん:2007/06/17(日) 00:33:37
105=117=127=俺だから
133デフォルトの名無しさん:2007/06/17(日) 00:34:00
いや、俺が105
134デフォルトの名無しさん:2007/06/17(日) 00:34:27
大学に通ったことのない低学歴が必死こいて抵抗しているよwwwwww
正当性があるないとかじゃなく、いい加減な態度が悪いのにw
135デフォルトの名無しさん:2007/06/17(日) 00:34:54
はいはい大学生乙
136デフォルトの名無しさん:2007/06/17(日) 00:35:27
なんで大学に通ってないって分かるんだろう。
エスパー乙
137デフォルトの名無しさん:2007/06/17(日) 00:39:31
やたら大学にこだわるなぁ
こんぷr(ry
138デフォルトの名無しさん:2007/06/17(日) 00:40:01
大学が全てだから
139デフォルトの名無しさん:2007/06/17(日) 00:41:22
みなさんありがとうございました。>>95
140デフォルトの名無しさん:2007/06/17(日) 00:43:04
>>139
お疲れ様でしたぁ

いろいろとねっ
141デフォルトの名無しさん:2007/06/17(日) 00:49:57
>>137
やたら大学に反応するな、低学(ry
142デフォルトの名無しさん:2007/06/17(日) 00:51:07
>>127
> void bsort(int a[3][5])
するわけねーじゃん、こんな固有の汎用性のないライブラリ、いらねーよw
もっと他に、a[ROW][COL]のROWとCOLを変えたときに対応できないソースはクソースw
143デフォルトの名無しさん:2007/06/17(日) 00:52:15
>>105は気持ちよかったよ!糸をひく様なディープキス。ゾクゾクする様な、ねっとりフェラチオ。
乳を揉みしだいた時の喘ぎ声。極めつけは……グフフ!そこから先は、俺の口からは言えないよ!
入ってからの・お・た・の・し・み!
144デフォルトの名無しさん:2007/06/17(日) 00:57:08
>142
定数部分のどこを入れ替えればいいか分らん低脳にとっては汎用性がないんだろうね。
145デフォルトの名無しさん:2007/06/17(日) 00:58:28
>>105
流れはあんまり見てないが、せっかく配列で宣言してるんだから、
単純にa[3][5]を(int *)にキャストして>>102の関数をコールするだけで良くないか?
146デフォルトの名無しさん:2007/06/17(日) 01:00:08
[1] プログラミング実習
[2] 関数は、入力として10人の学生の英語のおよび数学の点数をとる。英語、数学、全体の平均を計算する。関数は、以下に4つのパラメータを持っていきます:
1.英語と数学の点数を含む配列へのポインタ。配列の終わりは{-1、-1}とする。
2.英語の平均を保存する場所への参照(ポインター)。
3.Math平均を保存する場所への参照(ポインター)。
4.全体的な平均を保存する場所への参照(ポインター)。
関数calcAveは、その戻り値として学生の数を返す。
main文から関数calcAveを呼び出し、英語、数学と全体の平均を出力する
キーボードからデータを読み取る必要が、ありません。
配列の終わりに加わる{-1、-1}のを忘れないでください。
関数の型はint calcAve(int (*data)[2], double *engAve, double *mathAve, double *totalAve)とする。
また平均の計算や配列の初期値としてhttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4268.cを使う
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] gcc
 [3.3] C
[4] 6/19
[5] 授業で参照渡しを使えといわれました

よろしくお願いします。
147デフォルトの名無しさん:2007/06/17(日) 01:06:18
>>144
> 定数部分
それが汎用性のないって指摘なんだがwwwww
お前、大学に通ってもすぐに落第、退学だぞwwww
148デフォルトの名無しさん:2007/06/17(日) 01:07:27
144 名前:デフォルトの名無しさん 投稿日:2007/06/17(日) 00:57:08
>142
定数部分のどこを入れ替えればいいか分らん低脳にとっては汎用性がないんだろうね。
定数部分のどこを入れ替えればいいか分らん低脳
定数部分のどこを入れ替えればいいか分らん低脳
定数部分のどこを入れ替えればいいか分らん低脳

汎用性について理解していないバカが汎用性がわからないとか言い出したよ、きめぇ〜〜w
ちゃんとa[ROW][COL]って書いたのに、理解力のねーバカが低脳だろw
149デフォルトの名無しさん:2007/06/17(日) 01:07:41
学校の宿題に汎用性を求めるな
150デフォルトの名無しさん:2007/06/17(日) 01:08:08
汎用性もないのに宿題に答えている奴が偉そうにすんなっw
151デフォルトの名無しさん:2007/06/17(日) 01:10:57
気持ち悪い粘着が湧いているみたいだな
152デフォルトの名無しさん:2007/06/17(日) 01:11:29
>>127はROWとCOLが変わったら、その値に応じてわざわざ定数を書くそうですよ?
せっかくROW、COLを#defineで定義したのに、わざわざそれに応じて
ROWとCOLに定義された数値を定数として引数の配列の要素のところに書くそうでつ♪
153デフォルトの名無しさん:2007/06/17(日) 01:11:45
いつまで続くかオラわくわくしてきたぞ
154デフォルトの名無しさん:2007/06/17(日) 01:13:13
所詮、宿題スレでムキになって喧嘩してる奴なんてたかが知れてる
155デフォルトの名無しさん:2007/06/17(日) 01:15:03
>>142>>148
あなたが書いているのは下記のマクロに似ている
#define ONE 2
156デフォルトの名無しさん:2007/06/17(日) 01:17:47
>>155
そのマクロつっこみどころが二つあってどっちのことを言ってるのかワカランw
157デフォルトの名無しさん:2007/06/17(日) 01:17:54
>>142 が読めなかったボケがわざわざ定数を変えて汎用性とか言うから笑えるwwww
変えたら変えたで、結局定数だから、定まった値のものに対応ってことで
受け継ぐ配列のサイズが変わったときにまたライブラリの引数の定数を変える、実に汎用性のない
ばかばかしい理論だw
158デフォルトの名無しさん:2007/06/17(日) 01:31:00
>>156
どちらの意味で取っても当たってるから両方でしょう
159デフォルトの名無しさん:2007/06/17(日) 01:34:52
>>157
                      わ
                   ら
                   た
160デフォルトの名無しさん:2007/06/17(日) 01:37:16
宿題みたいなその場で使い切りのコードに汎用性なんか必要ないと思う。
#defineでマクロにして大文字打つのもめんどくさいから、そのまま数値で書くことが多いな。
161デフォルトの名無しさん:2007/06/17(日) 01:42:33
>>146
その日本語はExcite翻訳を通したのか?

適当だけど出来たよ。
-1とかうんぬん言ってるから-1で終了判断したほうがいいのかもね。
でもポインタを不必要に使ったコード見るのもしんどいからいいや。

http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4269.txt
162デフォルトの名無しさん:2007/06/17(日) 01:46:14
Excite翻訳しました!
163デフォルトの名無しさん:2007/06/17(日) 01:54:27
C言語で、ab cd ef ghの文字を組み合わせて、4文字の文字列が何通りあるかっていうのをつくりたいのですが
どなたか教えてください
164デフォルトの名無しさん:2007/06/17(日) 01:55:37
自己解決しました
165デフォルトの名無しさん:2007/06/17(日) 02:03:48
>>163
#include <stdio.h>

char* word[] = {"ab","cd","ef","gh"};

int main(){
int i,j;
int count = 0;

for(i=0 ; i<sizeof(word)/sizeof(char*) ; i++){
for(j=0 ; j<sizeof(word)/sizeof(char*) ; j++){
printf("[%d] %s%s\n",++count,word[i],word[j]);
}
}

return 0;
}

166163:2007/06/17(日) 02:04:47
>>165
ありがとうございます!
167デフォルトの名無しさん:2007/06/17(日) 02:21:24
abab見たいに同じの二回使うのもカウントしていいの?
168デフォルトの名無しさん:2007/06/17(日) 02:24:14
>>163
> 組み合わせ
同じものを2つってのは無いだろうね。
169163:2007/06/17(日) 02:24:30
いいです!
170デフォルトの名無しさん:2007/06/17(日) 02:25:18
いっ、いぃ〜〜のか?ウホッ?
171165:2007/06/17(日) 02:26:50
ダメなら
printf("[%d] %s%s\n",++count,word[i],word[j]);

if(i!=j)printf("[%d] %s%s\n",++count,word[i],word[j]);
にかえて
172163 ◆SEE7n9Y/L2 :2007/06/17(日) 03:09:28
>>171
ありがとうございました!
173デフォルトの名無しさん:2007/06/17(日) 03:51:21
保存した成績テキストファイル data.txtからデータを構造体配列に取り込んで行くのですが、

学生番号,名前,素点 で、ずらーっとtxtにならんでます。
成績が無い場合、素点の部分を - としておいた場合、

- かきちんとした点数かを判断したいのですが、
何型で取り込んでどう処理していけばいいんでしょうか?

点数は後ほど平均点等の計算に使います。

数値データと文字データが混在しているときはどうすればいいのかがよくわかりません・・・
174デフォルトの名無しさん:2007/06/17(日) 03:54:07
そうですか
175デフォルトの名無しさん:2007/06/17(日) 04:04:42
文字列で取り込めばいいんじゃね?
176デフォルトの名無しさん:2007/06/17(日) 04:07:27
文字型で取り込んでおけばそのまま数値計算に持ち込むことは可能ですか?
177デフォルトの名無しさん:2007/06/17(日) 04:15:34

 ⊂( ゚д゚ )  
   ヽ ⊂ )
   (⌒)| ダッ
   三 `J
17863:2007/06/17(日) 04:28:11
>>64
ありがとうございます


ってすいません、書き忘れていたことが・・・。
結果が、1行の文になるように出力したいのです。
2次元配列で並び替えた文を1行に戻して出力、というところが解らないのですが、
どのようにプログラムを書けばいいでしょうか?
179デフォルトの名無しさん:2007/06/17(日) 04:35:06

  ( ゚д゚ )
_(__つ/ ̄ ̄ ̄/_
  \/    ./
     ̄ ̄ ̄
180デフォルトの名無しさん:2007/06/17(日) 04:41:23
てす
181デフォルトの名無しさん:2007/06/17(日) 04:53:18
>178
putchar('\n');を消せばok
182デフォルトの名無しさん:2007/06/17(日) 11:27:17
[1] 授業単元: ネットワークプログラミング
[2] 問題文(含コード&リンク):
UDPでソケットを使ってサーバーからデータを受け取る
パケットを送るときにチェックサムを計算して一緒に送る
データを受信したときもデータが正しいか
チェックサムを計算してエラーがないか確認する
長いので以下に詳しい問題文をうpします
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4228.txt
↑拡張子をhtmlに直して見てください
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4229.c
↑書きかけのソースですがこんな感じになるのでしょうか
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:gcc 3.4
 [3.3] 言語:C
[4] 期限:6/18(月) 9:00
[5] その他の制限: サーバーが学内にあるのですぐに動作確認はできません
183デフォルトの名無しさん:2007/06/17(日) 11:32:30
1] 授業単元: ネットワークプログラミング
[2] 問題文(含コード&リンク):

TCP/IP通信型電話番号検索プログラムを作成せよ。

・クライアント
キーボードからユーザー名を入力し、サーバーに送信。
サーバーから送信された文字列を画面に出力。

・サーバー
クライアントから送信されたユーザー名に対して、
その名前に対応する内線番号を探索して返す。

基本的なところは完成しています。

クライアント
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4270.txt

サーバー
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4271.txt

[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc 3.4
 [3.3] 言語: C
[4] 期限: ([2007年06月18日21:00まで]
[5] その他の制限:
電話番号録はphone.txtを使用。
ポート番号は1024以上。
184デフォルトの名無しさん:2007/06/17(日) 12:03:25
>>173
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4272.txt
変なデータだったら-1にでもしとけばいいんじゃないの?
計算の時には-1だったら無視とかで
185uho:2007/06/17(日) 13:03:03
[1] 授業単元:基本プログラミング
[2] 問題文(含コード&リンク):
チケットがS席,A席,B席,各10枚残りました。各席の購入希望が出るたびに席名(S,A,B)を入力する。販売は券が全て売り切れたか、公演時間になると(Eと入力)終了する。販売終了時の券の残り状況を以下の実行例のように表示するプログラムを作成せよ。
<実行例1>全て売れ残った状態でEと入力した場合
購入希望の席 ->A
購入希望の席 ->B
購入希望の席 ->S
購入希望の席 ->E
残りは、S:9枚 A:9枚 B:9枚
<実行例2>全て売れきれた場合
購入希望の席 ->A
購入希望の席 ->B
購入希望の席 ->S
:(途中省略)
購入希望の席 ->A
Aは売り切れ!
購入希望の席 ->A
購入希望の席 ->S
Sは売り切れ!
購入希望の席 ->B
Bは売り切れ!
全て売り切れ!
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン: gcc 3.4
 [3.3] 言語: C++
[4] 期限:6月20日まで
[5] その他の制限:
よろしくお願いします。
186デフォルトの名無しさん:2007/06/17(日) 13:17:25
>>185
自分で考えろや
187デフォルトの名無しさん:2007/06/17(日) 13:30:38
>>185
#include <iostream>

int main(){
    int s = 10, a = 10, b = 10;
    char op;

    while(s > 0 || a > 0 || b > 0){
        std::cout << "購入希望の席 ->";
        std::cin >> op;
        #define hoge(x, y) if(op == y) if(x > 1) x--; else if(x == 1) x = 0, std::cout << y << "は売り切れ" << std::endl
        hoge(s, 'S');
        hoge(a, 'A');
        hoge(b, 'B');
        if(op == 'E') break;
    }

    if(s == 0 && a == 0 && b == 0) std::cout << "全て売り切れ! " << std::endl;
    else std::cout << "残りは、S:" << s << "枚 A:" << a << "枚 B:" << b << "枚" << std::endl;

    return 0;
}
188デフォルトの名無しさん:2007/06/17(日) 13:40:55
>>185
#include <iostream>
using namespace std;
int main()
{
int S = 10, A = 10, B = 10, st;
char ch;
for(st=0; !st;)
{
cout << "購入希望の席 ->"; cin >> ch;
switch(ch)
{
case 'S':
if(S > 0) S--; else cout << "Sは売り切れ!\n"; break;
case 'A':
if(A > 0) A--; else cout << "Aは売り切れ!\n"; break;
case 'B':
if(B > 0) B--; else cout << "Bは売り切れ!\n"; break;
case 'E':
st = 1;
}
if(!(S || A || B)) st = 2;
}
switch(st)
{
case 2:
cout << "全て売り切れ!\n"; break;
case 1:
cout << "残りは、S:" << S << "枚 A:" << A << "枚 B:" << B << "枚\n"; break;
}
return 0;
}
189187-188:2007/06/17(日) 14:10:28
>>186
自分で考えてみますた!
190デフォルトの名無しさん:2007/06/17(日) 14:14:32
[1] 授業単元: C言語
[2] 問題文(含コード&リンク):
入力ファイルの中から単語を切り出し、単語部分のみ文字列を反転するプログラムを作れ。
ただし、単語文字列を格納する配列を用いいるとともに、文字列を反転する関数を用意し引数にはポインタを使用すること
[3] 環境
 [3.1] OS: (Windows/Linux/等々) MacOSX
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限:月曜までにお願いします。
[5] その他の制限:単語の定義は、タブ、空白、コンマで区切られたものです。
191デフォルトの名無しさん:2007/06/17(日) 14:46:59
>>190
#include <stdio.h>
#include <string.h>

int reverse_str(char *str1, const char *str2){
    int i, j;
    if(strlen(str2) == 0) return 0;
    for(i = 0, j = strlen(str2); j > 0; i++, j--) str1[i] = str2[j - 1];
    str1[i] = '\0';
    return 1;
}

int main(void){
    FILE *fp = fopen("word.txt", "r");
    int ch, i;
    char buf[128], rev[128];
    if(!fp) exit(1);
    do{
        i = 0;
        while((ch = fgetc(fp)) != EOF){
            if(ch == ' ' || ch == '\t' || ch == '.') break;
            else if(ch != '\n') buf[i++] = ch;
        }
        buf[i] = '\0';
        if(reverse_str(rev, buf)) puts(rev);
    }while(ch != EOF);
    fclose(fp);
    return 0;
}
192デフォルトの名無しさん:2007/06/17(日) 14:49:07
MacOSX
193デフォルトの名無しさん:2007/06/17(日) 15:09:46
[1] 授業単元:アルゴリズム
[2] 問題文(含コード&リンク):”rand1000.dat”というデータの個数nとその個数分の整数データが保存されているファイルがある
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4151.txt)(データは5桁以下の整数)
次の手順で動作するプログラムradix.cを作成し,その動作を確認せよ.
アルゴリズムをそのまま実現してよいが,余力のある人は「インデックス配列」を使って処理を高速化したプログラムとしてもよい.

まずファイルから保存されているデータ数nを読み込み,その数だけデータを読み込み配列に格納する.ただし,配列は「5桁整数の各桁の数が入る配列」を列挙した配列とせよ.
次に,格納された配列をディスプレイ上に表示する.
そして,データが保存された配列について基数ソートを実行する関数 radixsort()を呼び出し,配列データを整列する.
最後に,整列された配列をディスプレイ上に表示しプログラムを終了する.


[3] 環境
 [3.1] OS: Windows XP
 [3.2] コンパイラ名とバージョン:Microsoft Visual Studio 2005
 [3.3] 言語: C言語
[4] 期限: 6月19日 夜までに
[5] その他の制限: 1行ずつプログラムをチェックし,コンピュータに何をさせているのかその都度確認すること.


どなたか解る方、よろしくお願いいたします。><
194デフォルトの名無しさん:2007/06/17(日) 15:33:24
>>190
#include <stdio.h>
#include <string.h>
#include <ctype.h>

int reverse_str(char *str1, const char *str2){
    int i, j;
    if(strlen(str2) == 0) return 0;
    for(i = 0, j = strlen(str2); j > 0; i++, j--) str1[i] = str2[j - 1];
    str1[i] = '\0';
    return 1;
}

int main(void){
    FILE *fp = fopen("word.txt", "r");
    int ch, i;
    char buf[128], rev[128];
    if(!fp) exit(1);
    do{
        i = 0;
        while((ch = fgetc(fp)) != EOF){
            if(isspace(ch) || iscntrl(ch) || ch == '.') break;
            else buf[i++] = ch;
        }
        buf[i] = '\0';
        if(reverse_str(rev, buf)) puts(rev);
    }while(ch != EOF);

    fclose(fp);
    return 0;
}
195デフォルトの名無しさん:2007/06/17(日) 16:19:32
いっぱいオマンコして♪
196デフォルトの名無しさん:2007/06/17(日) 16:33:40
【質問テンプレ】
[1] 授業単元: プログラミング基礎
[2] 問題文(含コード&リンク):
2乗の数を求める関数および、環境絶対値を求める関数を作成しろ。
またmain()で正しく動くかチェックすること
・絶対値
引数iの絶対値を返す関数
関数定義 double myAbs(double i)
注:絶対値とは「その数と0との距離」を表すもの(簡単に言えば,負の場合はマイナス符号を取った値,正の場合はそのままの値となる)
・2乗値
引数iの2乗値(ex.3の2乗は3x3=9)を返す関数
関数定義 double mySquare(double i)

[3]
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:Microsoft Visual Studio .NET 2003
 [3.3] 言語:C++
[4] 期限:2007年6月18日2時
[5] その他の制限:出来るだけ簡単(初歩的)にすること。

よろしくおねがいします。
197デフォルトの名無しさん:2007/06/17(日) 16:40:12
[1] C言語
[2] 問題文 
与えられたコインの種類C[0].C[1].....C[k-1](日本円で言うと1円、5円・・・1万円といったもの)と与えられた金額mに対して、コインの枚数を最小にするmの払い方を求めるプログラムを書け。
コインの額面はC[0]<C[1]<・・・<C[k-1]としてよい。入力はm,k,C[0]....C[k-1]
[3] 環境
 [3.1] OS: Mac
 [3.2] gcc
 [3.3] 言語: C 
[4] 期限: 2007年6月21日まで
[5] 動的計画法を用いて書くとの縛りだそうです。どこまで習っているかというのは少々あいまいですが、授業でやったのはfor文やprintfなどまだ基礎の部分です。
よろしくお願いします
198デフォルトの名無しさん:2007/06/17(日) 16:40:31
>>196

#include <stdio.h>

double myAbs(double i)
{
if(i<0)
return -i;
return i;
}

double mySquare(double i)
{
return i*i;
}

int main()
{
double i;
printf("数値を入力してください>>");
scanf("%lf",&i);
putchar('\n');
printf("絶対値は%f\n",myAbs(i));
printf("二乗値は%f\n",mySquare(i));
return 0;
}

環境絶対値?
199デフォルトの名無しさん:2007/06/17(日) 16:42:37
>>196
#include <stdio.h>

double myAbs(double x){
if(x<0) x = -x;
return x;
}

double mySquare(double x){
return x*x;
}

int main(void){
double x;

printf("数字を入力して下さい:");
scanf("%lf", &x);

printf("%.2lfの絶対値は%.2lfです。\n", x, myAbs(x));
printf("%.2lfの乗数は%.2lfです。\n", x, mySquare(x));

return 0;
}

環境絶対値ってのが分からんけど・・・
200デフォルトの名無しさん:2007/06/17(日) 16:43:18
ぎゃー!!!かぶったああああああ!!!
201デフォルトの名無しさん:2007/06/17(日) 16:52:11
包茎、遅漏乙
202デフォルトの名無しさん:2007/06/17(日) 17:03:47
printfのところ%lfってなってるけどl付けるとどうなるの?
203デフォルトの名無しさん:2007/06/17(日) 17:05:12
longになる。つまりdouble
204デフォルトの名無しさん:2007/06/17(日) 17:07:50
>>203
それscanfじゃなくて?
205デフォルトの名無しさん:2007/06/17(日) 17:13:53
>>204
その辺りはCの規格によって若干違ったと思う。
ANSIなコンパイラでも、結構独自拡張で%lf通る。
206デフォルトの名無しさん:2007/06/17(日) 17:17:26
%fも%lfもdouble
207196:2007/06/17(日) 17:31:50
すみませんでした。環境は間違いでした。ただの絶対値です。すみません
208デフォルトの名無しさん:2007/06/17(日) 17:36:44
http://www.linux.or.jp/JM/html/LDP_man-pages/man3/printf.3.html
ここを見るとl修飾は整数変換、n変換、c変換、s変換だけで
浮動小数点に関することが書いてないけど、
イマイチよく分からないこのn変換っていうのが浮動小数点のことかな?
209208:2007/06/17(日) 17:38:31
わわ、リロードして無かった。
独自拡張で浮動小数点のlongを表わすようにしてるのか。
>>205-206さんありがとう。
210196:2007/06/17(日) 17:44:33
>>198-199
どうもありがとうございました。
211デフォルトの名無しさん:2007/06/17(日) 17:53:43
>>205
とうとうC99でprintf類の%lfもdoubleの指定として追加されている
212デフォルトの名無しさん:2007/06/17(日) 18:21:28
>>193
>配列は「5桁整数の各桁の数が入る配列」を列挙した配列とせよ
とても汚いソースになる;−;
213デフォルトの名無しさん:2007/06/17(日) 18:21:34
>>211
205だけど、やっぱC99ではあったよね?>%lf
>>208を見て、記憶違いだったか心配になってた
214 ◆Mousouvm3. :2007/06/17(日) 18:27:32
[1]授業単元: Cプログラミング演習
[2]以下のテキストファイルを動的メモリ確保した単方向連結リスト状の構造体に入力したあと、
  リストの先頭を引数として、メモリの解放を再帰的に行う関数を作成せよ。
[構造体の形]
struct person{
int ,no,age;
char name[20];
struct person *next;
};

[テキストファイル]
1 20 田中
2 40 大田
3 35 井上
7 60 斉藤
4 23 佐藤

[3] 環境
 [3.1] OS:Win XP
 [3.2] VS 2003
 [3.3] 言語:C
[4] 期限:無期限
[5] その他の制限:特に無し
一応、自分でもやってみて下記のソースで途中終了したからなんでダメなのか理由があると嬉しいです。
void free_list(struct person *pos){
if(pos != NULL){
free_list(pos->next);
free(pos);
}
}
[エラーメッセージ]問題.exe の 0x7c941230 でハンドルされていない例外が発生しました : ユーザー設定のブレークポイント。
215デフォルトの名無しさん:2007/06/17(日) 18:31:37
>>214
debugビルドで nextをNULL初期化してないとか
216 ◆Mousouvm3. :2007/06/17(日) 18:35:29
>>215
すいません、一応やってます。

void disp(struct person *obj){
struct person *pos;

for(pos=obj;pos!= NULL ;pos= pos->next){
printf("登録番号 %d 年齢 %d 名前%6s\n",pos->no,pos->age,pos->name);
}
}

で表示もきちんと終了するから実は初期化されてないなんて事もないと思います。
21763:2007/06/17(日) 18:39:10
度々すいません>>63です。
putchar('\n');消してみたら、結果が11文字しか表示されなくなりました・・・
わけわからない泥沼です\(^o^)/タスケテ
218デフォルトの名無しさん:2007/06/17(日) 18:44:18
>>214
んー・・・なんかおかしい。
このfree_list()をコールしてる部分はforループで回してるの?
free_list()にして欲しい処理と実際のコードがズレてる気がするよ。
219デフォルトの名無しさん:2007/06/17(日) 18:46:08
>>218
いや再帰処理だろ
220デフォルトの名無しさん:2007/06/17(日) 18:47:44
だれかナップサック解け
221デフォルトの名無しさん:2007/06/17(日) 18:51:19
>>216
出力はちゃんとされているのね?
struct person *obj 作成の部分もうp
222デフォルトの名無しさん:2007/06/17(日) 18:51:36
>>219
あぁ、再帰か。
ごめん。見間違えた。
223 ◆Mousouvm3. :2007/06/17(日) 19:08:46
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4275.txt

main文付でやってみました。
表示は>>216
free_list(obj)の部分を
disp(obj)にしただけです。
224 ◆Mousouvm3. :2007/06/17(日) 19:10:08
今見たらfscanfの修飾子がおかしいorz
225デフォルトの名無しさん:2007/06/17(日) 19:14:34
[1] 授業単元: プログラミング実習
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4276.c を改良して以下に示すようにqsortを使って様々なソートをさせる。。
0を入力したとき 配列に書いた順番(そのまま)
1 生徒の8桁の学生番号を昇順でソート
2 生徒の苗字順でソート(アルファベット順)
3 生徒の名前順でソート(アルファベット順)
4 英語の点数を降順でソート
5 数学の点数を降順でソート
6 平均を降順でソート
これら以外の入力がされたらプログラムを終了する。
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] gcc
 [3.3] C
[4] 6/19
[5] とくになし

よろしくお願いします
226 ◆Mousouvm3. :2007/06/17(日) 19:15:10
修飾子直しても結果もエラーメッセージも一緒でしたから多分影響ないと思います。
連レスすいません。
227デフォルトの名無しさん:2007/06/17(日) 19:18:12
228デフォルトの名無しさん:2007/06/17(日) 19:20:06
>>223
ブハッ!

calloc()1回しかしてないから、freeも1回だけで良いんだよ。
問題からすると、リスト構造作成する方のコードが悪いよ。

なんというか、うーん・・・。

リスト構造に必要な領域を一度に確保するんじゃなくて
リストのnextを繋ぐたびにmallocなりcallocなりするんだ。
229デフォルトの名無しさん:2007/06/17(日) 19:21:06
>>223
まぁ r_fp をfclose してないのは置いといて
エラー出なかったぞ
230 ◆Mousouvm3. :2007/06/17(日) 19:24:53
>>228
と言うことは1改行ずつpersonに入れてそのたびメモリ確保しつつ、
最後に再帰で解放の方がいいのかな?
自分も一回freeでできるんじゃないかと思ったんですけど、それだと問題文の再帰の部分の意味がないし…
231 ◆Mousouvm3. :2007/06/17(日) 19:55:26
>>228
全文見てませんでした。
すいません。
あなたの言ってる方針でもう一回します。

>>229
環境依存なのかな?

ありがとうございました。
232デフォルトの名無しさん:2007/06/17(日) 23:23:18
>>65
>>67
返答に遅れて申し訳ないです。

修正後の問題文がわかりにくくすみませんでした。課題を出した先生が男なので、自分とはmanなのだと思います。
それか、対戦前にmanかwomanどちらを自分にするか決めるということなんですかね
書かれていないのでこの場合は男でいいと思われます。

>値の決定を自分だけランダム値からキーボードからの入力値になるようプログラムを修正して

この部分ですが、自分の操作(主観)するmanかwomanをランダムに出力させるのを省いて
主観性別だけキーボードから0〜20の値を直接自分で入力できるようにして、それで対戦する値を決めるのだと思います。


>ある値が出た場合のみポイントが復活する機能を追加しなさい
>(ある値は,初期段階で設定できるものとする)。なお復活するポイント値はランダムとする。
ある値が出た場合とはどのタイミングでどの変数の値なの。
対戦用数値出力関数の戻り値?
復活するタイミングはいつなのか?対戦前・対戦後、それとも復活だけして対戦しない?
復活値はただのランダム?0〜20の値じゃなくていいの?


上記解答に、ある値がでたとき、対戦後復活でいいと思われます。
ランダム出力する側が0〜20の値でランダム出力された時点で、15の値が出たら復活する場合、
0〜20の値からランダムにヒットポイントが復活すると思われます
対専用数値出力関数の戻り値で確かです。

233デフォルトの名無しさん:2007/06/17(日) 23:32:37
大きいほうが勝つならひたすら20出してりゃいいだけでゲームになってないんじゃね?
234依頼者:2007/06/17(日) 23:34:37
[1] 授業単元: C言語演習
[2] 問題文(含コード&リンク):
(1)登録番号"int no"と名前"char *name"と"int age"を含む構造体person型の配列を定義し
初期化せよ。なお、最後のデーダの名前にはNULLを入れておく。登録番号は入力順に1,2,3,4,5
とする。配列の先頭アドレスを目指す構造体person型のポインタは引数として与え、データを年齢順に
並び替える関数を作成せよ

(2)登録番号"int no"と名前"char *name"と"int age"を含む構造体person型の配列を定義し
初期化せよ。なお、最後のデーダの名前にはNULLを入れておく。登録番号は入力順に1,2,3,4,5
とする。そして配列の先頭アドレスを目指す構造体person型のポインタと参照したい人の登録番号を引数として
その名前年齢を表示する関数を作成せよ


[3] 環境
 [3.1] OS:WindowsXP
 [3.2] コンパイラ名とバージョン:visual studio.net
 [3.3] 言語:C++
[4] 期限: 07年6月19日まで
[5] その他の制限:特になし

よろしくお願いします。
235デフォルトの名無しさん:2007/06/17(日) 23:36:22
>>234
おや?>>214
236デフォルトの名無しさん:2007/06/17(日) 23:43:18
>>233 確かにゲームになりませんね・・・ 
ですが問題文を見る限りでは」対戦に使う0〜19の値の決定を自分でキーボードから入力が行えるよう、となっているので
それでいいと思います。
237デフォルトの名無しさん:2007/06/17(日) 23:46:41
>>236 課題を出された先生がmanを主観として想定しているならば、ハンデのある女性側でランダムではwomanの方が勝つ確立が高いでしょうから
チート行為をするつもりでの修正なのかもしれません
238デフォルトの名無しさん:2007/06/18(月) 00:14:04
>>193
できたケロ、基数ソートじゃなくてバブルソートになってる。
とりあえずあげとく。時間があったら基数ソートも考えてみる。

http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4278.txt
239デフォルトの名無しさん:2007/06/18(月) 00:16:23
ケロロ軍曹乙
240デフォルトの名無しさん:2007/06/18(月) 00:25:51
[1] 授業単元:プログラミングI
[2] 問題文(含コード&リンク):標準入力から受け取ったテキストデータを再修行から
  逆順に標準出力に出力するプログラムを作成せよ.
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ:gcc
 [3.3] 言語: C
[4] 期限: 2007/06/19
[5] その他の制限: 動的メモリ割り当てを使う,線形リストを用いる.

お願いします.
241デフォルトの名無しさん:2007/06/18(月) 00:28:02
山ごもりしてきます!
242デフォルトの名無しさん:2007/06/18(月) 00:29:13
何を修行するの?
最終行でしょ?
243デフォルトの名無しさん :2007/06/18(月) 00:56:22
>>240
文字通りの問題なら、mallocもlistも使わずに下のようなソースになりました
(たぶん、テキストファイルをファイルストリームを使って読み込んで線形リスト
に追加していき、リストをたどる形で標準出力に表示させるんだろうけど)
#include <stdio.h>
char x()
{
char d;
char c = fgetc(stdin);
if(c == EOF || c == '\n') return c;
d = x();
fputc(c, stdout);
return d;
}
int main()
{
while(1) {
char c = x();
if(c == EOF) break;
fputc(c, stdout);
}
return 0;
}
244デフォルトの名無しさん:2007/06/18(月) 00:56:31
>>242
修行するっつてんだから暖かく見送ってやれよ馬鹿
245デフォルトの名無しさん:2007/06/18(月) 01:18:42
>>240 エラー処理無し、free無し
#include <stdio.h>
#include <stdlib.h>
typedef struct tag_list_t{
    void *data;
    struct tag_list_t *next;
}list_t;
char *get_oneline(FILE *fp){
    char *buf=NULL;
    int moji, bufsize=1;
    buf=malloc(bufsize);
    while((moji=fgetc(fp))!=EOF && moji!='\n'){
        buf[bufsize-1]=moji;
        buf=realloc(buf, ++bufsize);
    }
    if(moji==EOF && bufsize<=1) return NULL;
    buf[bufsize-1]='\0';
    return buf;
}
int main(void){
    list_t *last=NULL, *list=NULL;
    char *ptr;
    while((ptr=get_oneline(stdin))!=NULL){
        list=malloc(sizeof(list_t));
        list->data=ptr; list->next=last; last=list;
    }
    while(list!=NULL){
        puts(list->data);
        list=list->next;
    }
    return 0;
}
246デフォルトの名無しさん:2007/06/18(月) 01:32:58
>227
ありがとうございます!
ほんと助かりました
自分でもこのぐらいのが書けるようになるために勉強します
247デフォルトの名無しさん:2007/06/18(月) 02:13:48
1] 授業単元:プログラミング
[2] 問題文: 次のようにすると整数値のスタックが実用できる。試してみよ。(mainに
適当にpush();pop();を書いて、スタックに積んだ順番と出来てきた
順数を比べよ。
実際には使うには足らないところがある。それはどこか?


int srk0[100];
int stkp=0;

void push(int i){
stk0[stkp++]=i;
}
int pop(){
return stk0[--stkp];
main(){
/***具体的な実行本体***/

/***ここまでがプログラム***/
}

[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ gcc
 [3.3] 言語C
[4] 期限: 2007年6月19日まで
[5] その他の制限:push popを使えば特になと思います


248デフォルトの名無しさん:2007/06/18(月) 02:17:05
>>243,245
ありがとうございました!
249デフォルトの名無しさん:2007/06/18(月) 02:31:28
どういたしまして
250デフォルトの名無しさん:2007/06/18(月) 09:58:45
[1] 授業単元: プログラミング
[2] 問題文:
 積分   
  ∫√x ・logxdx     で、台形公式を使って求めるプログラムである。
  (∫の上に2下に1)  ただし積分区間を小区間に分けて計算するときの
                小区間の数nをn=100とする。
 
[3] 環境 
 [3.1] OS: WindowsXP
 [3.2] コンンパイラ等:UNIX 
 [3.3] 言語: C言語 
[4] 期限: 2007年06月19日14時まで 
[5] その他の制限: 必要なら関数を使用することと、途中計算も書くこと。

積分の値が変わったときにどこを変えればいいかの教えてください。よろしくお願いします。
             

251デフォルトの名無しさん:2007/06/18(月) 10:52:37
[1] 授業単元:C++
[2] 問題文:
野球のスコア計算をするプログラムを作成しなさい。
スコアを入力して、配列データにイニング表を、入力毎にスコア表を表示
最後に勝者を出力。
なお延長の場合も考えること(延長は15回までとする)

[3] 環境
 [3.1] OS:Windows xp
 [3.2] コンパイラ名とバージョン:Visual studio.2005
 [3.3] 言語: C++
[4] 期限: ([2007年6月19日00:00まで]
[5] その他の制限:特になし
どうかよろしくお願いします
252デフォルトの名無しさん:2007/06/18(月) 11:23:00
[1] 授業単元: プログラミング
[2] 問題: 文字列で式を入力しその答えを出すプログラム
 [3.1] WindowsXP
 [3.2] Borland
 [3.3] C++
[5] ライブラリは<stdio.h>のみです。多分簡易的な電卓プログラムかと…。
253デフォルトの名無しさん:2007/06/18(月) 12:32:33
[1] 授業単元: C言語
[2] 問題:テキスト形式のファイルを読み込み, 読み込んだアルファベットで書かれた文章のうち母音(a,e,i,o,u)を'-'に置き換えて出力するプログラムを作成しなさい.
 [3.1] WindowsXP
 [3.2] Borland
 [3.3] C++
テキスト形式のファイルを読み込み, 読み込んだアルファベットで書かれた文章のうち母音(a,e,i,o,u)を'-'に置き換えて出力するプログラムを作成しなさい.
ファイル名はキーボードから入力する.
読み込むファイルはすべて小文字で書かれていると想定してよい.
ファイル名の長さは最大で(マクロ定数で定義された)FILENAME_MAX文字までとしてよい.
ファイルの一行の長さは最大で80文字までとしてよい.
出力はfvowel.outというファイル名のファイルに書き出すこと.(ファイルが存在しているときは、上書きすること.

実行例
cat fvowel.in
the course of true love never did run smooth.
./fvowel
filename:
fvowel.in
cat fvowel.out
th- c--rs- -f tr-- l-v- n-v-r d-d r-n sm--th.

254デフォルトの名無しさん:2007/06/18(月) 12:35:14
[1] 授業単元: C言語
[2] 問題:テキスト形式のファイルを読み込み, 読み込んだ文章を最後から逆順に出力するプログラムを作成しなさい.
 [3.1] WindowsXP
 [3.2] Borland
 [3.3] C++
ファイル名はキーボードから入力する.
ファイル名の長さは最大で(マクロ定数で定義された)FILENAME_MAX文字までとしてよい.
ファイルの一行の長さは最大で80文字までとしてよい.
出力はfreverse.outというファイル名のファイルに書き出すこと.(ファイルが存在しているときは、上書きすること.)

実行例
cat freverse.in
The time is out of joint.

./freverse:
freverse.in

cat freverse.out
.tnioj fo tuo si emit ehT
255デフォルトの名無しさん:2007/06/18(月) 12:43:46
[1] 授業単元: プログラミング基礎
[2] 問題:以下は,標準入力から入力した文字列を逆順にして表示するプログラムの一部である.
関数 reverse の定義を追加し,プログラムを完成させよ(main 関数は変更しないこと!).なお,入力される文字列の長さ(文字数)は任意であるが, 99文字以内であることが保証されているものとする.

/* reverse.c: reverse a given string */
#include <stdio.h>
#include <string.h>
void reverse(char *); /* プロトタイプ宣言 */

int main(void)
{
char str[100];

scanf("%s", str);
reverse(str);
printf("%s\n", str);

return (0);
}

実行例:
nodabls?% a.out
abcdefg[Enter]
gfedcba
[3.1] Unix
[3.2] gcc
[3.3] c
[4] 2007年6月22日(金)



256デフォルトの名無しさん:2007/06/18(月) 12:59:01
>>247
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int stk0[100], stkp=0;

void push(int i){
    stk0[stkp++]=i;
}

int pop(void){
    return stk0[--stkp];
}

int main(void){
    int i, n;

    srand((unsigned int)time(NULL));

    for(i = 0; i < 10; i++){
        n = rand()%100;
        printf("%dをpush\n", n);
        push(n);
    }

    for(i = 0; i < 10; i++)
        printf("%dをpop\n", pop());

    return 0;
}
257デフォルトの名無しさん:2007/06/18(月) 13:01:06
>>252
言語はCでしょ
258デフォルトの名無しさん:2007/06/18(月) 13:05:26
>255
void reverse(char *p)
{
int i, len = strlen(p);
for(i=0; i<len/2; i++) {
char temp = p[i];
p[i] = p[len-1-i];
p[len-1-i] = temp;
}
}
259デフォルトの名無しさん:2007/06/18(月) 13:06:27
>>250
#include <stdio.h>
#include <math.h>

#define func(x) (sqrt(x)*log(x))

int main(void){
    double x, x1 = 1.0, x2 = 2.0, dx, s = 0;
    int n = 100;

    dx = (x2 - x1)/n;

    for(x = x1; x < x2; x += dx)
        s += (func(x) + func(x + dx))*dx/2;

    printf("s = %g\n", s);

    return 0;
}
260デフォルトの名無しさん:2007/06/18(月) 13:27:00
>>252
stdio.hだけだとぬるぽ
261デフォルトの名無しさん:2007/06/18(月) 13:32:57
>>238
ありがとうございます。もし時間がありましたら基数ソートもできるとありがたいです。
262デフォルトの名無しさん:2007/06/18(月) 14:55:10
どなか>>225 お願いします
263デフォルトの名無しさん:2007/06/18(月) 14:58:16
>>262
qsrot C言語 でググってqsortの仕様が分かれば後は何とかなるだろ。
264課題1(1/2):2007/06/18(月) 15:37:35
[1] 授業単元:情報実験第1
[2] 問題文(含コード&リンク):
行列の中、隣接する値kのみから構成される一つの正方形の範囲はsub-blockと呼ばれる。
一つの正方行列を読み込んで、入力値kに対する一番大きいsub-blockを探して、
sub-blockの位置と大きさを表示するプログラムを作成せよ。

動作例
Matrix.dat
11100000
01111000
00111110
00011111
01111111
01111011
00111000
00111100
Input the value of key : 1
The position of max sub-block of 1 is:
(3,4)
(3.5)
(5,3)
(6,3)
The size of max sub-block of 1 is: 3x3
265デフォルトの名無しさん:2007/06/18(月) 15:38:44
>>264
その問題どっかで見たぞ
前スレだっけか?
266課題1(2/2):2007/06/18(月) 15:42:18
[3] 環境
 [3.1] OS:MacOSX 10.4
 [3.2] コンパイラ名とバージョン:gcc 4.0.1
 [3.3] 言語:C
[4] 期限:6/20朝まで
[5] その他の制限:
正方行列はファイルから読み込む
最大sub-blockが複数存在する場合は、全て表示
計算量は出来るだけ少なく

難しいかもしれませんがヒントだけでもお願いします…
267デフォルトの名無しさん:2007/06/18(月) 15:44:07
前々スレの88代目だな。
>>264
回答、まだ残ってるみたいだから貼っとくよ(回答したのオレじゃないけど)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4065.c

>>252
Bjarne StroustrupによるC++でのオモチャ電卓の実装例
ttp://www.research.att.com/~bs/dc.c
stdio.hだけでやるには結構書き換えないといかんが参考にはなるんじゃね
268264:2007/06/18(月) 15:48:14
>>265 >>267
あ、ありがとうございますー。
回答者にも感謝です。

実はもう1個あるんですが、とりあえず前々スレを見てみますわ。
269デフォルトの名無しさん:2007/06/18(月) 15:52:26
[1] 授業単元: 情報処理
[2] 問題文:数当てゲーム
      選ばれる数字は4桁(1000から9999)
      ユーザが選んだ数字がことなる場合、選んだ数字が大きいか小さいかヒントを表示する
      n回目で当てた場合は(10−n)ポイントユーザに与える
      10回以上は続けて入力できない(0ポイント)ようにし、そのときには選ばれた数字を表示する
      何度も繰り返し実行し、ポイントを加算していく
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン: VS2005
 [3.3] 言語: C
[4] 期限: 今日の5時半
270264:2007/06/18(月) 15:57:46
[1] 授業単元: 情報実験第1
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4280.txt
[3] 環境
 [3.1] OS:MacOSX 10.4
 [3.2] コンパイラ名とバージョン:gcc 4.0.1
 [3.3] 言語:C
[4] 期限:6/20朝まで
[5] その他の制限:
特にありません

少し探したのですが無かったようなのでお願いします…
271デフォルトの名無しさん:2007/06/18(月) 16:01:06
>>254
#include <cstdio>
#include <cstring>
#include <cctype>
#include <iostream>
#include <fstream>
#include <string>

const char *OFNAME = "fvowel.out";
using namespace std;
int main()
{
    string filename;
    cout << "filename:" << flush;
    if (!getline(cin, filename))
        return 1;
    filebuf fin, fout;
    if (!fin.open(filename.c_str(), ios_base::in))
        return perror(filename.c_str()), 1;
    if (!fout.open(OFNAME, ios_base::out|ios_base::trunc))
        return perror(OFNAME), 1;
    int c;
    while ((c = fin.sbumpc()) >= 0)
        if (strchr("aeiou", tolower(c)))
            fout.sputc('-');
        else
            fout.sputc(c);
    return 0;
}
272デフォルトの名無しさん:2007/06/18(月) 17:05:41
271さん、ありがとうございます!ファイルの部分はむずかしいです・・
273デフォルトの名無しさん:2007/06/18(月) 17:07:55
258さんありがとうございます。助かりました。
274デフォルトの名無しさん:2007/06/18(月) 17:31:11
254ですが、この問題はC++ではなくC言語でした。本当に申し訳ありません。
[1] 授業単元: C言語
[2] 問題:テキスト形式のファイルを読み込み, 読み込んだ文章を最後から逆順に出力するプログラムを作成しなさい.
 [3.1] WindowsXP
 [3.2] gcc
 [3.3] C
ファイル名はキーボードから入力する.
ファイル名の長さは最大で(マクロ定数で定義された)FILENAME_MAX文字までとしてよい.
ファイルの一行の長さは最大で80文字までとしてよい.
出力はfreverse.outというファイル名のファイルに書き出すこと.(ファイルが存在しているときは、上書きすること.)

実行例
cat freverse.in
The time is out of joint.

./freverse:
freverse.in

cat freverse.out
.tnioj fo tuo si emit ehT
275デフォルトの名無しさん:2007/06/18(月) 17:35:54
>>272
多少C++っぽくしたが、余計分かりにくいかもしれん
#include <cstdio>
#include <cstring>
#include <cctype>
#include <iostream>
#include <fstream>
#include <string>
#include <algorithm>
#include <iterator>

const char *OFNAME = "fvowel.out";
using namespace std;
char filter(char c)
{
    return strchr("aeiou", tolower(static_cast<unsigned char>(c))) ? '-' : c;
}
int main()
{
    string filename;
    cout << "filename:" << flush;
    if (!getline(cin, filename))
        return 1;
    ifstream in(filename.c_str());
    ofstream out(OFNAME);
    if (!in || !out)
        return cerr << "can't open file" << endl, 1;
    transform(istreambuf_iterator<char>(in), istreambuf_iterator<char>(),
            ostreambuf_iterator<char>(out), filter);
    return 0;
}
276デフォルトの名無しさん:2007/06/18(月) 17:38:20
275さん、本当になんともいえないんですが・・・C++ではなくC言語でした。時間さいていただいてしつれいなのですが。

首吊ってきます。
277271:2007/06/18(月) 17:38:28
すまん、これ>>254じゃなくて>>253だったな。
安価間違えた。
278271:2007/06/18(月) 17:39:32
>>276
>>253も君じゃないかと思うが、そっちもCなの?
279デフォルトの名無しさん:2007/06/18(月) 17:40:14
すいませんそうです。うっかり間違えて書き込みしてしまいました。本当に申し訳ありません。
280271:2007/06/18(月) 17:48:14
>>279 これでいいかい?

#include <stdio.h>
#include <string.h>
#include <ctype.h>

#define OFNAME "fvowel.out"
#ifndef FILENAME_MAX
# define FILENAME_MAX 1024
#endif
int main(void)
{
    char filename[FILENAME_MAX];
    FILE *fin, *fout;
    int c;

    printf("filename: ");
    if (!fgets(filename, sizeof filename, stdin))
        return 1;
    if ((fin = fopen(filename, "r")) == NULL)
        return perror(filename), 1;
    if ((fout = fopen(filename, "w")) == NULL)
        return perror(OFNAME), 1;
    while ((c = getc(fin)) >= 0)
        if (strchr("aeiou", tolower(c)))
            putc('-', fout);
        else
            putc(c, fout);
    return 0;
}
281271:2007/06/18(月) 17:49:35
すまん
- if ((fout = fopen(filename, "w")) == NULL)
+ if ((fout = fopen(OFNAME, "w")) == NULL)
282デフォルトの名無しさん:2007/06/18(月) 18:03:04
283デフォルトの名無しさん:2007/06/18(月) 18:05:55
281さん、通りました。手間かけさせて本当に申し訳ありませんでした。ありがとうございます。
284250:2007/06/18(月) 18:44:30
>>259
返事遅れました・・ありがとうございます。
285デフォルトの名無しさん:2007/06/18(月) 21:38:34
いま解かれてないのはどれだ?
286デフォルトの名無しさん:2007/06/18(月) 21:39:53
俺の心
287254:2007/06/18(月) 21:45:10
この問題わかるひといたら教えてください。C++ではなくC言語です。
288デフォルトの名無しさん:2007/06/18(月) 21:48:06
247です
ありがとうございます
289デフォルトの名無しさん:2007/06/18(月) 21:52:22
254の問題はどっかで回答出てたぞ。Cで。
290デフォルトの名無しさん:2007/06/18(月) 21:54:48
あー、これだ>>243。254っぽい問題。
微妙に違うが、出力先を標準出力からファイルに変えればいいだけだべ。

291デフォルトの名無しさん:2007/06/18(月) 22:30:16
[1] 授業単元:c言語
[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4283.txt
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: Cのみ
[4] 期限: 2007年06月19日08:00まで
[5] その他の制限: できるかぎり参考のソースを利用してください

お願いいたします。

292デフォルトの名無しさん:2007/06/18(月) 22:34:27
>>291
参考ソースはそれで合ってるのか?
ただコピーするだけのソースな気が
293デフォルトの名無しさん:2007/06/18(月) 22:48:27
[1] 授業単元:C言語
[2] 問題文(含コード&リンク):
「在庫問題」
ある倉庫を考える。この倉庫は営業開始時において、毎日Sトンの初期在庫量を有する。1日の注文量rが確率的に発生するとき、営業終了時間の最終在庫量(S>rの場合)、不足量(S<rの場合)とする。
注文量rが正規分布N(100,20^2);すなわち平均100、標準偏差20の正規分布に従う乱数と仮定する。

平均100、標準偏差20の正規分布に従う乱数は以下で求められる。
0以上、1以下の一様実数乱数をUiとする。それを次式に代入することによって、標準正規乱数Xとなる。
X=U1+U2+……U12-6
Xを次式に代入することによってY(標準偏差20の正規分布に従う乱数)となる。
Y=20X+100

維持費:1トンにつき200円(最終在庫量に対して)
品切損失:1トンにつき100円(不足量に対して)
総経費:維持費と品切損失の和

(1)初期在庫量S=100のとき、注文量を乱数により発生させ、25日間の維持費、品切損失、総経費を報告せよ。
(2)1000日間の維持費、品切損失、総経費について、1日あたりの平均値を求めよ。また、注文量の平均と標準偏差を求めよ。
(3)S=60,70,80,90,110について、同様に1000日間の1日あたりの総経費の平均値を求めよ。
(4)この倉庫における最適な初期在庫量S0を求めよ。

[3] 環境
 [3.1] OS: Windows XP
 [3.2] コンパイラ名とバージョン: borland
 [3.3] 言語: どちらでも可
[4] 期限: 2007年06月19日17:00まで
[5] その他の制限: なし

全然わかりません。よろしくお願いします
294デフォルトの名無しさん:2007/06/18(月) 23:08:18
>>292
すいません 間違ってますね。
参考うんぬんは無視していてだいてかまいません。
宜しくお願いします。
295デフォルトの名無しさん:2007/06/18(月) 23:27:00
int stk0[100]; int stkp=0;

void push(int i){
stk0[stkpft] = i;
}
int pop(){
return stk0[--stkp];
}
main(){
/*具体的な実行*/
}


↑のmain関数内にpush(),pop()を書いて、スタックに組んだ順番と、出てきた順番を見比べよ。
また、実際に足りないことがあるがそれは何か?


って問題なのですが、全く説明を受けていない状態で課題を出されたので殆ど理解できていませんorz
とりあえず、printf("d\n",push());のようにpush()とpop()を表示できるようにしてみましたが、エラーが出ます。
それと、4行目のstk0[stkpft] = i;の所もエラーが出ます・・・。

とりあえず何処から手を付けていけばいいのでしょうか?
296デフォルトの名無しさん:2007/06/18(月) 23:31:22
>>295
> printf("d\n",push());
printf("%d\n",push());
と書いたのかな。push()の戻り値はvoid, つまり
何も返さないからこれは誤りで、表示のしようもない。
> stk0[stkpft] = i;
stk0[stkp] = i;
だろうね。
つーか>>256ではまずいの?同じ課題のようだが。
297デフォルトの名無しさん:2007/06/18(月) 23:32:57
>>295
配列の最後まで参照したら配列の先頭にポインタを戻す必要性があるけど
これが「実際に足りないこと」じゃないかな?
298デフォルトの名無しさん:2007/06/18(月) 23:39:21
stk0[stkp++] = i;
これじゃねーの?
299296:2007/06/18(月) 23:40:25
ああ++いるよな。変数名が間違ってるとこばかりに頭がいってたわw
300295:2007/06/18(月) 23:45:04
>>296
レスどうもです。
[]内が間違っていたようですね。どうもです。
というか、同じ学校の人間がいることに驚きましたw

ですが>>256では、main関数以外もいじくっているようですが・・・。
main関数内に実行文を書けとしか言われていないので・・・。

>>297
レスどうもです。
なるほど。ちょっと考えてみます
301デフォルトの名無しさん:2007/06/18(月) 23:45:38
変数名間違いというより、プリントかなんかが汚くて++がftに見えたんだべ。きっと。
あとpushに引数無いな。
302デフォルトの名無しさん:2007/06/19(火) 00:02:08
>>300
C言語なら俺に聞け(入門篇) Part 14
http://pc11.2ch.net/test/read.cgi/tech/1181735298/237
以降も参照してください

>>297
>配列の最後まで参照したら配列の先頭にポインタを戻す
スタックなのにまずいだろ
それはキューのことじゃないのか?
俺の勘違いだったら申し訳ないが
303デフォルトの名無しさん:2007/06/19(火) 00:04:18
>>269
#include <Stdio.h>
void main(){
int i,tokuten=0,kazu,random,end;
srand(time(NULL));
do{
random = rand() % 8999 + 1000;
/*printf("%d\n",random);*/
for(i=0;i<10;i++){
printf("数を入力:");
scanf("%d",&kazu);
if(random==kazu){
printf("正解");
break;
}else if(random<kazu){
printf("選んだ数字が大きいです\n");
}else{
printf("選んだ数字が小さいです\n");
}
}
if(i==10){
printf("乱数は%dでした\n",random);
}
printf("現在の得点は%dです\n",tokuten+=10-i);
printf("繰り返しますか?\n繰り返すなら1を入力してください:");
scanf("%d",&end);
}while(end==1);
}
304デフォルトの名無しさん:2007/06/19(火) 00:06:10
>>269
提出期限は過ぎてるし適当に書いただけでまともにデバッグしてないし
繰り返しはこれでよかったのか謎だけどとりあえず書いてみた
コメントはデバッグ用に書いてみた
305デフォルトの名無しさん:2007/06/19(火) 00:06:57
>>295
足りないこと? だからこうだって。
int stk0[100000000000000000000]; int stkp=0;
306デフォルトの名無しさん:2007/06/19(火) 00:10:03

  ( ゚д゚ )
_(__つ/ ̄ ̄ ̄/_
  \/    ./
     ̄ ̄ ̄
307デフォルトの名無しさん:2007/06/19(火) 00:16:46
>>295
200回くらい連続でpushしてみよう
308デフォルトの名無しさん:2007/06/19(火) 00:17:24
309デフォルトの名無しさん:2007/06/19(火) 00:19:25
PS3はバーチャルボーイの軌道を辿っているような気がしてならない
310デフォルトの名無しさん:2007/06/19(火) 00:20:15
>>309 は誤爆じゃ、気にすることなかれ。
311デフォルトの名無しさん:2007/06/19(火) 00:22:32
PS3と比べるなんてバーチャルボーイをなめすぎだろ・・・
312デフォルトの名無しさん:2007/06/19(火) 00:23:22
PS3はピピン@に似ている。
313デフォルトの名無しさん:2007/06/19(火) 00:35:23
だぁ〜〜〜おまいら、誤爆は気にするなってw ↓誘導
米レンタル最大手がBlu-rayの全米展開を発表、HD DVDの取り扱いは中止
http://news22.2ch.net/test/read.cgi/newsplus/1182176071/
314デフォルトの名無しさん:2007/06/19(火) 00:38:19
誤爆なんて恥ずかしい子とするお前が悪い
315デフォルトの名無しさん:2007/06/19(火) 00:42:18
>>314
> 恥ずかしい子とするお
あぁ、恥ずかしい。恥ずかしい子とするなんて、エッチだな、おまえ・・・
316デフォルトの名無しさん:2007/06/19(火) 00:43:05
他のC言語のスレで宿題聞いてるやつもいるし、どこがなにスレだったかたまに迷うな
317デフォルトの名無しさん:2007/06/19(火) 00:58:41
HD DVDとBlu-rayのスレスレな接線。見えそうで見えないスレスレなチラリズム。
人間は何を求めて生きていき、何を求めてこういった科学技術を発展させていくのだろう?
できそうでできない、そういうチラリズムもまた興奮する・・・。モロ出しよりギリギリな
見えそうで丸見えじゃないモザイク、その方が興奮する。AV見たことある人なら分かるだろ?
あっこれ、誤爆じゃないから。ん〜〜SK2。
318デフォルトの名無しさん:2007/06/19(火) 01:04:45
class あの娘{
public:
int xxx;
};
なんてこった!あの娘のxxxがいじり放題だ!

あと、思い出したけどここは宿題スレです
319デフォルトの名無しさん:2007/06/19(火) 01:13:01
例え隠蔽されててもフレンドになればいじり放題・・・ 馬鹿なこと考えてないでもう寝よう
320デフォルトの名無しさん:2007/06/19(火) 01:22:41
>>308
ありがとうございました
助かりました
321デフォルトの名無しさん:2007/06/19(火) 01:31:10
1] 授業単元: グラフ理論
[2] 問題文(含コード&リンク):

課題@
グラフがオイラーグラフであるかどうかを判定するプログラムを作成し,
graph2.txt とgraph3.txtにて表現されるグラフに対して実行せよ。

課題A
フラーリーのアルゴリズムによりオイラー閉路を求めるプログラムを作成し,
graph2.txt とgraph3.txt にて表現されるグラフに対して実行せよ.
オイラーグラフの場合には求められたオイラー閉路を表示し,
オイラーグラフでない場合にはその旨表示してプログラムを終了すること。

[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc 3.4
 [3.3] 言語: C
[4] 期限: ([2007年06月23日00:00まで]


322321:2007/06/19(火) 01:36:39
323デフォルトの名無しさん:2007/06/19(火) 03:46:08
>>321
C/C++の宿題というより、グラフ理論の宿題だろ。
アルゴリズム位書け。授業でやってんだろ

課題1: 各点の次数が偶数であれば、オイラーと判定
課題2:
Fleury
------------------------------------------------------------
適当な頂点から出発する.現在いる頂点に接続している辺で,それを消す
ことによってグラフが連結でなくならないものを選択し,その辺のもう一方
の端の頂点に行き,その辺をグラフから除く.この操作を,全ての辺がグラ
フから除かれるまで続ける
------------------------------------------------------------

辺削除の選択の際の、孤立成分判定はどう実装すれば綺麗か
考えているうちに、眠くなったからやめた。
力業で攻めなくても良い、何かよい方法があるような気がする。。
324321:2007/06/19(火) 03:58:22
>>323

すいません。グラフ定義はわかるのですが、
これをプログラムで書くとどうなるのかはまったく分らないものでして。
アルゴリズムはこんな感じですか?

オイラーグラフに関する重要な定理として,以下の二つが挙げられる.
(1) G がオイラーグラフ ⇔ すべての点の次数が偶数
(2) フラーリーのアルゴリズムを用いることで,オイラー閉路を探索可能

フラーリーのアルゴリズムは,以下のとおりである.
(i) 任意の点v0 から閉路の探索を始める.W0=v0 とする.
(ii) Wi=v0e1v1e2v2…eivi まで選択されたとする.次の辺ei+1 は次のように求める.
(a) ei+1 ∈ E - {e1,e2…ei} かつei+1 はvi に接続.
(b) 選択の余地がある限り,橋を避ける.
(iii) (ii) が実行できなくなるまで繰り返す.
325デフォルトの名無しさん:2007/06/19(火) 04:00:38
>>324 今書いてるからちょっと待ってろ
326デフォルトの名無しさん:2007/06/19(火) 04:03:41
もう寝ます。起きてから見ます。
327デフォルトの名無しさん:2007/06/19(火) 04:09:31
328デフォルトの名無しさん:2007/06/19(火) 05:19:50
>>321 そしてA.我ながら醜いソースだ。
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4288.c
329308:2007/06/19(火) 08:46:53
>>293>>320
いろいろと改善する余地があったから改訂版のURL張っとく。

ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4289.zip
330デフォルトの名無しさん:2007/06/19(火) 18:07:52
[1] 授業単元: C言語 基礎と応用
[2] 問題文(含コード&リンク): http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4292.txt
文字列、数値だけではなく文字も大きい順からバブルソートで並べ替えできるようにする。

[3] 環境
 [3.1] OS:windowsXP
 [3.2] コンパイラ名とバージョン:Visual studio.2005
 [3.3] 言語:C言語
[4] 期限:明日の朝まで
[5] その他の制限:特になし

「5個の整数を並べ替える」という問題から作っていったソースで
コメントはそのままで見づらいかもしれませんが、よろしくお願いいたします。
331デフォルトの名無しさん:2007/06/19(火) 18:11:09
>>330
大きさの比較を文字列(辞書順)で扱うということでよろしいか?
332デフォルトの名無しさん:2007/06/19(火) 18:25:47
>>251 どうかよろしくおねがいします
333デフォルトの名無しさん:2007/06/19(火) 18:57:36
>>331
あ、はい。辞書順でよろしいです。
334デフォルトの名無しさん:2007/06/19(火) 18:59:40
[1] 授業単元: プログラミング言語
[2] 問題文(含コード&リンク):
数値の列を入力し,それをリスト構造にデータを格納せよ.
その際,数値が大きさの順に並ぶようにせよ.
- 入力する数値の数を限定してもよい
- たとえば5個
・リストの内容を先頭から出力せよ.
- 結果として入力された数値の列が,大きさ順
に並び替えられて表示されることになる.
・リスト構成する要素(セル)はmalloc関数でヒープ領域から確保するものとする.

ファイルのほうに指定された手順など書いてあります。
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4293.txt

[3] 環境
 [3.1] OS:windowsXP
 [3.2] コンパイラ名とバージョン:Visual Studio 2005
 [3.3] 言語:C++
[4] 期限:2007/6/22
[5] その他の制限: ファイルのほうにある手順に則ってやっていただければ大丈夫です。
335デフォルトの名無しさん:2007/06/19(火) 19:36:56
336デフォルトの名無しさん:2007/06/19(火) 19:49:03
>>335
ありがとうございます!

しかし、ポインタのポインタまだ習ってなかったです。
でもこれでなんとなくですが流れが分かったのでちょっといじってみます。
ありがとうございました。
337デフォルトの名無しさん:2007/06/19(火) 19:52:37
338デフォルトの名無しさん:2007/06/19(火) 20:28:00
[1] 授業単元: ニュートン法
[2] 問題文:
次の三次方程式の実数解を求めよ。
      x^3 - 4.400x^2 - 2.503x + 2.730 = 0
計算結果を印刷したものでは解を赤線で囲むこと。また、データファイルから読み込んだ3つの係数の値は、
解を書き出すファイルの最初に書き出すようなプログラムにすること。
ニュートン法で必要な、解の最初の予測値 x0 は、各自自由に決めてよいが、収束しないと不合格とする。
 
[3] 環境 
 [3.1] OS: XP 
 [3.2] コンパイラ名とバージョン: UNIXから作る
 [3.3] 言語: C
[4] 期限: 明日の午前10時
[5] その他の制限:短すぎると評価が少しさがります。
よろしくお願いします。
339デフォルトの名無しさん:2007/06/19(火) 20:28:43
340デフォルトの名無しさん:2007/06/19(火) 20:48:14
>>338 3つの解を求めるにはどうすればいいんだろ
#include <stdio.h>
#include <math.h>

#define f(x) (pow(x, 3) - 4.400*pow(x, 2) - 2.503*x + 2.730)
#define f1(x) (3*pow(x, 2) - 2*4.400*x - 2.503)
#define Newton(x) (x - f(x)/f1(x))

int main(void){
    double x, prev = 1;

    while(1){
        x = Newton(prev);
        printf("x : %f\tprev : %f\t x - prev : %f\n", x, prev, x - prev);
        if(fabs(x - prev) < 10e-10)
            break;
        prev = x;
    }

    printf("x = %f\n", x);

    return 0;
}
341デフォルトの名無しさん:2007/06/19(火) 20:50:11
>>328
エッジ切断の時、橋かどうかの判断してる?
先に見つかったエッジをたどってバシバシ切っているように見えるんだが。
ぱっと見ただけなので、間違っていたらスマソ
342デフォルトの名無しさん:2007/06/19(火) 21:08:23
野球は任せた
343デフォルトの名無しさん:2007/06/19(火) 21:27:52
マルチは任せた
344デフォルトの名無しさん:2007/06/19(火) 21:31:28
>>340
回答ありがとうございます。
3つの解ですが、もし、プログラムがそうなっているのであれば、そのままでよい。とのコトです。
たぶん最初の予測値のx0と、その後の計算で出す2つだと思うのですが、
その計算のやり方をあまり覚えてなくて・・すいません分かる限りでよろしいので、お願いします。
345デフォルトの名無しさん:2007/06/19(火) 22:04:57
今更だけど>>17は、あまりいいコーディングじゃないよな。
トリッキーさは面白いけど、(i % 15 == 0) は、
ちょっと本質的に外れてる気がする。

個人的には (i % 3 == 0 && i % 5 == 0) がよろしいかと思う
346デフォルトの名無しさん:2007/06/19(火) 22:16:37
うん。どうでもいい。
347デフォルトの名無しさん:2007/06/19(火) 22:31:34
((i % 3 || i % 5) == 0)だろ
348デフォルトの名無しさん:2007/06/19(火) 22:38:51
どうでもいい。
349デフォルトの名無しさん:2007/06/19(火) 22:41:22

350デフォルトの名無しさん:2007/06/19(火) 23:26:56
351350:2007/06/19(火) 23:27:45
int point は無視で……
352デフォルトの名無しさん:2007/06/19(火) 23:47:54
[1] 授業単元: C言語演習
[2] 問題文(含コード&リンク): テキスト形式のファイル(ファイルの一行の長さは、100字まで)を読み込む。読み込んだ英子文字で書かれた文章で、
母音を'*'に置き換えて表示するプログラムを作成しなさい。
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限:20日のPM5:00まで
[5] その他の制限: ファイルまで
お願いします!
353デフォルトの名無しさん:2007/06/19(火) 23:55:44
>>352
#include <stdio.h>
#include <ctype.h>

int main(int argc, char *argv[]){
    FILE *fp;
    int ch;

    if(argc < 2) return 1;
    if((fp = fopen(argv[1], "r")) == NULL) return 2;

    while((ch = fgetc(fp)) != EOF){
        switch(tolower(ch)){
        case 'a':
        case 'i':
        case 'u':
        case 'e':
        case 'o': putchar('*'); break;
        default: putchar(ch);
        }
    }

    fclose(fp);
    return 0;
}
354デフォルトの名無しさん:2007/06/19(火) 23:56:05
>>352
'*'は'*'であると解釈した。
#include<stdio.h>
int main( void ){
int iChar;
FILE * fIn;
FILE * fOut;
fIn = fopen( "in.txt", "r" );
fOut = fopen( "out.txt", "w" );

if ( fIn != NULL && fOut != NULL ) {
while ( ( iChar = fgetc( fIn ) ) != EOF ) {
switch ( iChar ) {
case 'a':
case 'i':
case 'u':
case 'e':
case 'o':
iChar = '*';

default:
break;
}
fputc( iChar, fOut );
}
}
if ( fIn != NULL ) fclose( fIn );
if ( fOut != NULL ) fclose( fOut );
return 0;
}
355デフォルトの名無しさん:2007/06/19(火) 23:57:05
ぐはぁ、ちょい遅れ・・・しかも>>353のほうが正しいorz
356デフォルトの名無しさん:2007/06/20(水) 00:15:14
どんマイケル!
357デフォルトの名無しさん:2007/06/20(水) 00:20:51
すみません!353で#include <ctype.h>を使わないでやるとどうなるんですか?
あとファイル名を打ち込めるようにしたいのですが
358デフォルトの名無しさん:2007/06/20(水) 00:22:36
>>357
tolower関数は大文字を小文字にする関数。
case 'a';とかの部分にcase 'A':を追加すればOK。もち、aiueo全部ね。
359デフォルトの名無しさん:2007/06/20(水) 00:23:11
入力した整数の数字(数値でないのに注意)の各桁を一桁の数値とみなし加算していく
360デフォルトの名無しさん:2007/06/20(水) 00:26:24
誤爆った。C言語です。

入力した整数の数字(数値でないのに注意)の各桁を一桁の数値とみなし加算していく
digit_add関数を作成しなさい。整数の数字は複数行に対応し、終了条件は改行後に
[Ctrl+z]キーが押されたときとします。また、あわせてdigit_add関数をテストするための
プログラムを作成しなさい。
※数字をint型の数値に変換するための関数としてatoi関数を利用しても、自作してもおk。
361デフォルトの名無しさん:2007/06/20(水) 00:26:50
>>357
ファイル名を入力する場合。
char sFile[ 256 ];
scanf("%s", sFile);
fp = fopen( sFile, "r" );

入力関数はscanfなんだよな?きっと。
362デフォルトの名無しさん:2007/06/20(水) 00:27:00
>>357
#include <stdio.h>

int main(void){
    FILE *fp;
    int ch;
    char filename[128];

    printf("Input file name : ");
    scanf("%s", filename);

    if((fp = fopen(filename, "r")) == NULL){
        fprintf(stderr, "cannot open \"%s\".\n", filename);
        return 1;
    }

    while((ch = fgetc(fp)) != EOF){
        switch(ch){
        case 'a': case 'A':
        case 'i': case 'I':
        case 'u': case 'U':
        case 'e': case 'E':
        case 'o': case 'O': putchar('*'); break;
        default: putchar(ch);
        }
    }

    fclose(fp);
    return 0;
}
363デフォルトの名無しさん:2007/06/20(水) 00:40:23
ハンガリアン...
364デフォルトの名無しさん:2007/06/20(水) 00:46:48
>>360
#include <stdio.h>
#include <string.h>
#include <string.h>

int digit_add(void){
    int total = 0;
    char buf[2] = {0}, *p = buf;
    while((*p = getch()) != 26) if(isdigit(*p)) putchar(*p), total += atoi(p);
    return total;
}

int main(void){
    printf("\ntotal : %d\n", digit_add());
    return 0;
}
365364:2007/06/20(水) 00:48:35
>>364 ……
#include <stdio.h>
#include <string.h>
#include <ctype.h> // ×<string.h>
366デフォルトの名無しさん:2007/06/20(水) 00:52:42
>>364
>char buf[2] = {0}, *p = buf;
なんか、ここら辺みてすげぇなと思ってしまった。
俺だったらまず、char1コで[ p - '0' ]って処理が浮かぶ。
でも、>>364みたいな処理はまず浮かばんと思う
367デフォルトの名無しさん:2007/06/20(水) 00:54:00
>>364
あれ?getch関数ってconio.hじゃないっけ?
368デフォルトの名無しさん:2007/06/20(水) 00:57:26
[1] 授業単元:IT入門B1
[2] 問題文(含コード&リンク):
半径1の円に外接する正2^n角形(n>=2)の周囲長と内接する正2^n角形(n>=2)
の周囲長との差がε(マクロで1E-4に設定)未満となる最小のnを求め、
そのときの周囲長から円周率πを算出するプログラムを作れ。このとき円に
内接する正2^n角形(n>=2)の一辺の長さの1/2を入力し円に内接する正2^(n+1)
角形の一辺の長さの1/2を算出する関数と円に外接する正2^n角形(n>=2)の
一辺の長さの1/2を入力し円に外接する正2^(n+1)角形の一辺の長さの1/2を
算出する関数を使用せよ.
[3] 環境
 [3.1] OS:Linux
 [3.2] gccの最新版
 [3.3] 言語:C
[4] 期限:2007年6月17日23:00
[5] ヒント
@単位円に内接する正n角形の周囲長は,2n sin(π/n), 単位円に外接する正n角形
の周囲長は,2n tan(π/n)であるが,このnを2^nに置き換えて求めてはいけない.
高校時代の数学の知識を使えばπを使わずに求めることができる
A(1-Sqrt(1-s^2))/2は,s^2/(2(1+Sqrt(1-s^2)))として計算せよ.
(数値計算の精度が良くなる.各自実験してみよ.)
Bhttp://www-it.sci.waseda.ac.jp/ITB1/class1/hint.pdf
 ↑これを参照
369364:2007/06/20(水) 00:58:57
>>367
しまった……

Cygwinのgccが警告出さないんだよ。俺は悪くない。
370デフォルトの名無しさん:2007/06/20(水) 01:01:34
371デフォルトの名無しさん:2007/06/20(水) 01:09:18
>>364
ありがとう。
こんな短く書けるものなんだな…。尊敬します。
372デフォルトの名無しさん:2007/06/20(水) 02:10:21
>368
ヒントあれば前スレで図形描く必要なかったじゃねーか。
三角関数自体使っちゃいけないのかと思って、三平方の定理と相似使って計算したのに。
373デフォルトの名無しさん:2007/06/20(水) 02:17:44
>>372
           /   /\   __   /\   \
           |          .|   |          | __o
      i⌒ヽ  |          |   |          .|    | 二|二''  _
 |⌒ |⌒ | ヽ_ノ|  .|         ノ__ヽ          |   ノ   |  ヤ   ッ
 |  |   | ヽ_ノ  .\      .  l    l         /
374デフォルトの名無しさん:2007/06/20(水) 02:32:23
>>61
まちがってね?
375デフォルトの名無しさん:2007/06/20(水) 03:04:20
[1] 授業単元: グラフ理論とネットワーク
[2] 問題文(含コード&リンク):

グラフG の点連結度κ(G) は,「G=(V, E) のすべての分離集合X に対する要素数|X|の最小値」として定義される.また,「κ(G)≦δ(G)」であることから,点連結度の最大値は最小次数となる.

(1) グラフG の最小次数を算出し,δとする.
(2) 変数x を定義し,x=1 とする.
(3) 要素数がx となる点の部分集合Vx⊆V をすべて作成する.
(4) Vx のひとつでも分離集合となるならば,x が点連結度である.プログラム終了.
(5) Vx のいずれも分離集合でないならば,x を1 増加させる.
(6) x = δならば点連結度はδとなり,プログラム終了.そうでなければ(3)に戻る.

課題
上記のアルゴリズム実現する点連結度算出プログラムを作成し,a.txt とb.txt にて表現されるグラフに対して実行せよ.点連結度と,それがわかるときの分離集合を表示すること.ただし,x = δ の場合にはその旨を表示すること.

課題作成のポイント:
(1) 辺の情報は,隣接行列adjacent[ ][ ] として記憶すること.また,第1 回演習で作成した2 次元ポインタとして定義すること(そうしないと,以下で述べるconnect_check() 関数が利用できない).
(2) 点連結度を算出するアルゴリズムは複雑であり,任意の点数に対して算出を行うプログラムの作成は困難である.そこで,本課題ではN=8 の場合のみ算出できれば十分である.

第1回課題プログラム
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4291.txt

connect_check() 関数
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4290.txt

[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc 3.4
 [3.3] 言語: C
[4] 期限: ([2007年06月22日00:00まで]
376デフォルトの名無しさん:2007/06/20(水) 03:26:47
[1] 授業単元:情報基礎演習(c言語)
[2] 問題文:
@利率r及び元金を入力し、3年後の元利合計を求めよ。
  複利計算の式:元金×(1+r)3

A仕入れ価格と利益率をキーボードから入力して、
  顧客に売る際の値段を求めよ。

B商品の単価および売り上げ個数をキーボードから入力し、
  消費税を5%として代金を求めよ。

C動物園で鶴と亀の居る檻を見た。観察したところ、頭の数が合計83個、
  足の合計が268本であることが分かった。それぞれ何匹であるかを求めよ。

C1の2乗、11の2乗、111の2乗、1111の2乗、11111の2乗、
  の各値を計算しなさい。

※処理内容などを明示すること

[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン: Microsoft Visual C++ 6.0
 [3.3] 言語: C++
[4] 期限: BCDの問題は来週の今日まで
[5] その他の制限:授業内容(習ったと思う)VC++の基本操作法、整数型、実数型データ、データの入出力法、演算式(単純な複雑な)
どうかよろしくおねがいいたします。
377デフォルトの名無しさん:2007/06/20(水) 04:22:06
課題:実非対称行列で固有値が実数をとるような行列の固有ベクトルを求めたい

固有値は求めることができました。
縮退していない固有値に対応する固有ベクトルは逆反復法で求めることができました。
しかし、固有値が二重縮退している場合があり、
それに対応する固有ベクトルを求めることができません。(逆反復法で
原理的に求めることができるが時間がかかりすぎる)
どなたかいい方法をしりませんか?
378デフォルトの名無しさん:2007/06/20(水) 04:37:06
市ね
379デフォルトの名無しさん:2007/06/20(水) 07:23:41
授業単元:C言語
問題文(含コード&リンク):
環境:switch〜case・do〜while・while・fro・if文
OS:Windows
コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
言語:C
テーマ:数値配列の操作
問題:要素数10の配列にデータを入力し,平均+-50を超えるデータの要素番号をエラー配列に
格納し、エラー件数、要素番号とデータを出力しなさい
実行画面
データ[0]入力==>90
データ[1]入力==>100
データ[2]入力==>-1
データ[3]入力==>80
データ[4]入力==>101
データ[5]入力==>10
データ[6]入力==>32
データ[7]入力==>99
データ[8]入力==>0
データ[9]入力==>110
エラー件数:3
2:-1
5:10
8:0
380デフォルトの名無しさん:2007/06/20(水) 08:22:03
エラーの条件は?
381380:2007/06/20(水) 08:33:06
ごめんなんか寝起きで寝ぼけてる…。
382デフォルトの名無しさん:2007/06/20(水) 08:46:33
[1] 授業単元: C言語
[2] 問題文(含コード&リンク): 次の処理を行うプログラムを作成せよ。

まず、キーボードから整数を50個入力し、配列に格納する。
次に、格納されたデータについて以下の情報を画面に出力する。
最大の要素の値と、その要素番号
最小の要素の値と、その要素番号
全要素の平均値
配列の大きさは以下のマクロを使って定義し、
プログラム中で適宜利用すること。

#define SIZE 50
【ヒント】
使用する変数の例‥
配列 a[SIZE]
最大値 max
最大値の要素番号(添字)i_max
最小値 min
最小値の要素番号(添字)i_min
全要素の合計 sum
全要素の平均 ave
反復の制御変数 i
‥などが考えられる
50個の配列でテストするのが大変な場合は、
SIZEを5などに減らしてテストを行うとよい。

[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン: visual Studio 2005
 [3.3] 言語: C
[4] 期限: いつでも
[5] その他の制限: 特になし
383デフォルトの名無しさん:2007/06/20(水) 08:52:31
>>379
#include <stdio.h>
#define N 10
int main(void)
{
int error[N]={0};
int array[N];
int i,ave,sum=0,en=0;
for(i=0;i<N;i++){
printf("データ[%d]入力==>",i);
scanf("%d",&array[i]);
sum+=array[i];}
ave=sum/N;
for(i=0;i<N;i++)
if(array[i]>ave+50||array[i]<ave-50){
error[i]=i;
en++; }
printf("エラー件数:%d\n",en);
if(array[0]>ave+50||array[0]<ave-50)
printf("%d:%d\n",error[0],array[0]);
for(i=1;i<N;i++)
if(error[i])
printf("%d:%d\n",error[i],array[i]);
return 0;}

要素番号を格納するってのがめんどくさいな。
条件がerrorならまとめて1を格納したい…。
384デフォルトの名無しさん:2007/06/20(水) 09:09:31
エラーの条件は?
385380:2007/06/20(水) 09:17:22
ごめんなんか寝起きで冴えてきてる…。
386デフォルトの名無しさん:2007/06/20(水) 09:23:03
課題で「1〜nまでの偶数の和を表示しなさい」というのがあるのですが
入力した数までがすべてたされてしまいます。どうすればいいのでしょうか?
387デフォルトの名無しさん:2007/06/20(水) 09:25:44
{1}C言語
[2]
ブザー(ビープ音)を仮引数noで指定された回数鳴らした後に、画面に「警告です!」と表示して改行を行う関数alertを作成しなさい。関数alertを用いて、5回ブザーを鳴らして「警告です!」と画面に表示するプログラムを作成しなさい
*ブザーはprintf("\a");またはputchar('\a');で1回鳴る
*ブザー回数を関数alertの仮引数にする

3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン: VS2005
 [3.3] 言語: C
実行結果例
(ブザーが5回鳴って)
警告です!

よろしくお願いします
388デフォルトの名無しさん:2007/06/20(水) 09:35:03
>>386です。
[1]C言語
[2]1〜nまでの偶数の和をdefin文を使って表示しなさい
 [3.1] OS:WindowsXP
 [3.2] VS2005
 [3.3]C++

これで作成しています。よろしくお願いします。
389デフォルトの名無しさん:2007/06/20(水) 09:43:46
>>388
俺Cしか知らんが、ループの中で足される時に奇数をはじけばいいだけだろ。
もしくはもとからループで
for(i=0;i<n;i+=2)で最初から偶数しかカウントしないとか。
390デフォルトの名無しさん:2007/06/20(水) 09:50:04
>>386
#include<stdio.h>
int main(void){
int n,sum=0;
scanf("%d",&n);
if(n%2==0) n++;
while(--n>0)sum+=n--;
printf("%d\n",sum);
return 0;
}
391デフォルトの名無しさん:2007/06/20(水) 09:56:23
>379
#include <stdio.h>

#define N 10

int main(void)
{
int i, cnt, array[N], error[N];
double ave;

for(i=0; i<10; i++) {
printf("データ[%d]入力==>", i);
scanf("%d", array+i);
ave += array[i];
}

ave /= N;

for(i=0, cnt=0; i<N; i++) {
if(array[i]+50 < ave || array[i]-50 > ave) error[cnt++] = i;
}

printf("エラー件数:%d\n", cnt);
for(i=0; i<cnt; i++) printf("%d:%d\n", error[i], array[error[i]]);

return 0;
}
392デフォルトの名無しさん:2007/06/20(水) 10:17:47
授業単元:C言語
環境:if文・for文・while文・do〜while文・switch〜case文
OS:Windows
コンパイラ名とバージョン:borland
言語:C
テーマ:数値配列の操作
配列[8]に整数を入力し、以下のような表示をしなさい
実行画面
整数入力[0]==>4
整数入力[1]==>3
整数入力[2]==>8
整数入力[3]==>6
整数入力[4]==>1
整数入力[5]==>5
整数入力[6]==>2
整数入力[7]==>7
*

393デフォルトの名無しさん:2007/06/20(水) 10:55:42
*
394デフォルトの名無しさん:2007/06/20(水) 11:09:07
[1] 授業単元: C言語
[2] 問題文(含コード&リンク): キーボードから何度か数字を入力して当てるゲームを作成しなさい。

あらかじめ正解を1つ用意しておく
入力のチャンスは5回までとする
正解したら、「正解!」と出力して終了する
不正解の場合は、大小関係や「惜しい!」などヒントを出力する
5回とも不正解の場合は、正解と「残念!」などのメッセージを出力して終了する
【発展】
乱数生成の関数を使い、プログラムを実行するたびに
コンピュータが自動的に正解を用意するように改良しなさい。


[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン:visual studio 2005
 [3.3] 言語: C
395デフォルトの名無しさん:2007/06/20(水) 11:09:20
>>389
やってみたらできました。どうもありがとう!
396デフォルトの名無しさん:2007/06/20(水) 11:10:31
>>394
発展までやってみました。

#include<stdio.h>
#include<stdlib.h>

void kadai17()
{
unsigned int seed;
int dt, i, r;

printf("乱数の種を入力 ");
scanf("%d", &seed);

srand(seed);
r = (int)(((double)(rand()) / (RAND_MAX + 1.0)) * 10);

for(i = 4; i >= 0; i--){
printf("数字を当てて下さい ");
scanf("%d", &dt);
if(r == dt){
printf("正解 ");
break;
}
else{
printf("後%d回です\n ",i);
}
}
return;
}

しかし、乱数が絶対 0 になってしまうんですが、わかる方教えてください
397デフォルトの名無しさん:2007/06/20(水) 11:18:09
392>タイプミスで*入ってました
398デフォルトの名無しさん:2007/06/20(水) 11:27:28
>396
別に絶対0にはなってないと思うけど。
399デフォルトの名無しさん:2007/06/20(水) 12:14:15
キタ━━━━(゚∀゚)━━━━ッ!!!!
400デフォルトの名無しさん:2007/06/20(水) 12:16:07
授業単元:C言語
環境:if文・for文・while文・do〜while文・switch〜case文
OS:Windows
コンパイラ名とバージョン:borland
言語:C
テーマ:数値配列の操作
要素数8の配列に数値を入力し、平均に一番近い値の要素番号とデータを出力しなさい
実行画面
数値[0]==>50
数値[1]==>85
数値[2]==>72
数値[3]==>93
数値[4]==>65
数値[5]==>49
数値[6]==>55
数値[7]==>32
結果 要素番号:4
データ:65
401デフォルトの名無しさん:2007/06/20(水) 12:41:13
1] 授業単元: c言語
[2] 問題文:単価(TANKA)と個数(KOSUU)を入力して合計金額(GOUKEI)を計算するため
のプログラムを作成せよ。ただし値引きで単価が100円以上であれば2割引きとし、
単価が100円未満の時は1割引きとする

[3] 環境
 [3.1] OS:XP
 [3.2] :visual studio 2005
 [3.3] 言語:C
[4] 期限:07年6月21日:24時まで
[5] その他の制限:if文でお願いします

402デフォルトの名無しさん:2007/06/20(水) 13:22:51
{1}C言語
[2]
*をno個連続して表示する関数put_starsを作成し、この関数を利用して、キーボードから読み込まれた横幅と高さをもつ長方形を表示するプログラムを作成しなさい(長方形の形状は実行結果例参照)

3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン: VS2005
 [3.3] 言語: C
実行結果例
横幅;5
高さ意;3
-----------------
*****
*****
*****
403デフォルトの名無しさん:2007/06/20(水) 13:49:53
>>400
#include<stdio.h>
int main(void)
{
    int i,v[8],sum,min;
    double ave,d,dmin;
    sum=0;
    for(i=0;i<8;i++){
        printf("数値[%d]==>",i);scanf("%d",&v[i]);
        sum+=v[i];
    }
    ave=sum/8;
    min=0;
    if(v[0]>ave){dmin=v[0]-ave;}
    else{dmin=ave-v[0];
    }
    for(i=1;i<8;i++){
        if(v[i]>ave){d=v[i]-ave;}
        else{d=ave-v[i];}
        if(dmin>d){min=i;dmin=d;}
    }
    printf("結果 要素番号:%d \nデータ:%d",min,v[min]);
    return 0;
}
404デフォルトの名無しさん:2007/06/20(水) 14:01:15
>>401
int main(void)
{
    int TANKA,KOSUU,GOUKEI;
    printf("単価:");scanf("%d",&TANKA);
    printf("個数:");scanf("%d",&KOSUU);
    GOUKEI=TANKA*KOSUU;
    if(TANKA<100){
        GOUKEI=(int)(GOUKEI*0.9);
        printf("単価が100円未満なので1割引になります。\n合計金額=%d円",GOUKEI);
    }
    if(TANKA>=100){
        GOUKEI=(int)(GOUKEI*0.8);
        printf("単価が100円以上なので2割引になります。\n合計金額=%d円",GOUKEI);
    }
    return 0;
}
405デフォルトの名無しさん:2007/06/20(水) 14:10:09
>>402
#include<stdio.h>

void put_stars(int w, int h)
{
    int i,j;
    for(i=0;i<h;i++){
        for(j=0;j<w;j++) printf("*");
        printf("\n");
    }
}

int main(void)
{
    int h,w;
    printf("横幅;");scanf("%d",&w);
    printf("高さ意;");scanf("%d",&h);
    put_stars(w, h);
    return 0;
}
406デフォルトの名無しさん:2007/06/20(水) 14:55:21
{1}C言語
[2]
実数3つの平均値を返す関数meanを作成し、この関数meanを利用して、キーボードから3つの実数を読み込み、その平均値を画面に表示するプログラムを作成しなさい。結果表示は少なくとも8桁、小数点以下3桁とする
3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン: VS2005
 [3.3] 言語: C
実行結果
実数1;1.23
実数2;4,32
実数3;3,42
------------------------
平均値=     2,990

よろしくお願いします
407デフォルトの名無しさん:2007/06/20(水) 15:15:06
>>406

#include <stdio.h>

double mean(double a,double b,double c)
{
return (a+b+c)/3;
}

int main()
{
double array[3];
int i;
for(i=0;i<3;i++){
printf("実数%d:",i+1);
scanf("%lf",&array[i]);
}
printf("-------------------\n");
printf("平均値=%8.3f\n",mean(array[0],array[1],array[2]));
return 0;
}

まさか結果の小数点を,で表示する仕様とか言わないよね…?
408デフォルトの名無しさん:2007/06/20(水) 15:27:44
言うよ?
409デフォルトの名無しさん:2007/06/20(水) 15:31:10
ていうか文字全部全角じゃね
410デフォルトの名無しさん:2007/06/20(水) 15:37:16
>>387
#include <stdio.h>

void alert(int no){
for(; no != 0; no--)
putchar('\a');
printf("警告です!\n");
}

int main(){
alert(5);
return 0;
}
411デフォルトの名無しさん:2007/06/20(水) 15:47:02
[1] 授業単元:C言語解析
[2] 問題文:
「直列共振回路の周波数特性」 抵抗R、自己インダクタンスL、静電容量Cの直列回路に
起電力Eを加える時、電流I(正確にはIドット)が流れる。Eの周波数fを変化させて、
Iの大きさと位相の変化を調べよ
(注) 共進周波数をはさんで適当な範囲で周波数を変化させる。また、周波数の刻み幅も適切に選ぶこと。

http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.cgi?mode=thr&no=4251
の7レス目(ミスってしまった・・)は複素数の演算を行うプログラムである
ここの下のほうのint main(void)からを変化させてとくようにするといい。
[3] 環境
 [3.1] OS:Windows xp
 [3.2] コンパイラ名とバージョン:Visual studio.2005
 [3.3] 言語: C
[4] 期限: 6月22日
[5] その他の制限: 特になし
こっちでお願いしよう・・・
412デフォルトの名無しさん:2007/06/20(水) 15:56:38
{1}C言語
[2]
1から順番に整数を足して、整数numを超えた時(等しい場合含む)の、最後に足した整数値を返す関数funeを作成なさい。
この関数funeを利用して、1からの整数の和が、キーボードから読み込まれた制限値(整数)を超えるためには、どこまで足せばよいか表示するプログラムを作成しなさい
3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン: VS2005
 [3.3] 言語: C
実行結果
制限値=10000
142まで足すと10000を超える

お願いします
413デフォルトの名無しさん:2007/06/20(水) 16:08:13
>>406 力尽きた。最後の表示が半角のまま。
#include <stdio.h>
double input()
{
    unsigned char s[2];
    int c;
    double v = 0.0, div;
    while (scanf("%*[\x82]%1[\x4f-\x58]", s) == 1)
        v *= 10, v += s[0] - 0x4f;
    if (scanf("%*[\x81]%1[\x43-\x44]", s) == 0)
        return v;
    for (div = 10.0; scanf("%*[\x82]%1[\x4f-\x58]", s) == 1; div *= 10)
        v += s[0] / div;
    return v;
}
double mean(double a, double b, double c) { return (a + b + c) / 3; }
int main(void)
{
    int i, c;
    double v[3], m;
    for (i = 0; i < 3; ++i) {
        printf("実数%.2s;", &("123"[2 * i]));
        v[i] = input();
        while ((c = getchar()) != EOF && c != '\n') {}
    }
    m = mean(v[0], v[1], v[2]);
    printf("平均値=%f\n", m);
    return 0;
}
414デフォルトの名無しさん:2007/06/20(水) 16:13:10
>>413
おまwwwww
415413:2007/06/20(水) 16:18:42
あー
- v += s[0] / div;
+ v += (s[0] - 0x4f) / div;
かな。
適当に書いたから多分ほかにもアレな箇所があるかも。
416デフォルトの名無しさん:2007/06/20(水) 16:30:51
>>412
それ実行結果間違ってない?
417413:2007/06/20(水) 16:45:28
超手抜きだが出力も付け加えた。確認は自分でやってね。
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4299.txt
418デフォルトの名無しさん:2007/06/20(水) 16:48:58
ちょっと他の宿題と異質かもしれませんが、よろしくお願いします。

.cpp
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4300.txt

.h
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4301.txt

言語はCで、画像のフーリエ変換を行うプログラムです。
これを逆フーリエ変換を行えるように変更しろという課題です。
環境はWinXP、コンパイラVisual Studio 2005、言語Cで、期限は明日までです。
式が多くてちんぷんかんぷんです・・・。少しテンプレからずれていますが、よろしくお願いします。
4191/2:2007/06/20(水) 16:51:22
[1] 授業単元: C言語
[2] 問題文(含コード&リンク):
バグを取り除きなさい。
#include
int main(){
FILE sfp;
char sfn[FILENAME_MAX];
int c, count;
//printf("*** Sample program ***\n");
printf("filename:\n");
scanf("%s",sfn);
if((sfp=fopen(sfn,"r"))=NULL){
printf("File Not Found!!\n");
return (-1);
}
while((c=getc(sfp))!=eof){
if (c = 'e')
count++;
}
fclose(sfp);
printf("Number of 'e's in file: %d\n", count);
return (0);
}
[3] 環境  [3.1] OS:Windows [3.2] gcc [3.3] C
[4] 期限: 金曜日
[5]
420デフォルトの名無しさん:2007/06/20(水) 16:52:25
>>419
- int c, count;
+ int c, count = 0;
4212/2:2007/06/20(水) 16:52:52
実行結果
cat etest1.in
the course of true love never did run smooth.
./count_e
filename:
etest1.in
Number of 'e's in file: 6
cat etest2.in
Oh no! It costs much to put this data into Nihongo.
./count_e
filename:
etest2.in
Number of 'e's in file: 0
./count_e
filename:
non-existent-file
File Not Found!!

よろしくおねがいしますm・・m
422デフォルトの名無しさん:2007/06/20(水) 18:19:25
{1}C言語
[2]
2つの実数a、bに対して、
・a>bなら1
・a=bなら0
・a<bなら1
を返す関数compを作成し、この関数compを利用して、キーボードから読み込まれた2つの実数(実数1、実数2)のどちらが大きいか(または等しいか)を表示するプログラムを作成しなさい
3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン: VS2005
 [3.3] 言語: C
実行結果
実行結果例
実数1;1,23
実数2;1,22
実数1の方が大きい

実行結果例
実数1;3,33
実数2;3,330
実数1と2は等しい

よろしくお願いします
423デフォルトの名無しさん:2007/06/20(水) 18:40:39
>>422
#include<stdio.h>
int main(void){
printf("その関数compでは判別不可能です。\n");
return 1;
}
424デフォルトの名無しさん:2007/06/20(水) 18:46:28
どなたか>>376←これおねがいします
425デフォルトの名無しさん:2007/06/20(水) 19:02:19
>>424
@

#include<iostream>

using namespace std;

int main()
{
double r;
int motokin;

cout<<"利率を入力してください。:";
cin>>r;
cout<<"元金を入力してください。:";
cin>>motokin;
cout<<"3年後の元利合計は"<<motokin*(1+r)*(1+r)*(1+r)<<endl;
return 0;
}
426デフォルトの名無しさん:2007/06/20(水) 19:07:07
>412
10000を超えるのは141まで足したとき
#include <stdio.h>

int fune(int num)
{
int i = 0, sum = 0;
while(sum<num) sum += ++i;
return i;
}

int main(void)
{
int n;
printf("制限値=");
scanf("%d", &n);
printf("%dまで足すと%dを超える\n", fune(n), n);
return 0;
}
427>>376:2007/06/20(水) 19:14:17
>>425
早速ありがとうございます

ABCできる方よろしくお願いします
428デフォルトの名無しさん:2007/06/20(水) 19:22:21
>>376
(4-2)
#include <iostream>
template <int M, int N>
struct Power { enum { Value = Power<M, N - 1>::Value * M }; };
template <int M>
struct Power<M, 1> { enum { Value = M }; };
int main()
{
    std::cout << Power<1,2>::Value << std::endl;
    std::cout << Power<11,2>::Value << std::endl;
    std::cout << Power<111,2>::Value << std::endl;
    std::cout << Power<1111,2>::Value << std::endl;
    std::cout << Power<11111,2>::Value << std::endl;
}
429425:2007/06/20(水) 19:29:23
>>424
一応C書いたけど、それ以外って書いた方が良いか?
ただ四則演算するだけじゃない?

#include<iostream>
using namespace std;
void GJ(int n,int *a,int *b)
{
int p,i,j,l;
double pivot,c;
for(p=0;p<n;p++){
pivot=a[p*n+p];
for(i=p;i<n;i++)
a[p*n+i]/=pivot;
b[p]/=pivot;
for(l=0;l<n;l++)
if(l!=p){
c=a[l*n+p];
for(j=p;j<n;j++)
a[l*n+j]-=c*a[p*n+j];
b[l]-=c*b[p];}}}
int main()
{
int A[2][2]={{2,4},{1,1}};
int B[2]={268,83};
GJ(2,(int *)A,(int *)B);
cout <<"鶴の数="<<B[0]<<endl;
cout<<"亀の数="<<B[1]<<endl;
return 0;
}
430デフォルトの名無しさん:2007/06/20(水) 19:36:09
>>376
(4-1)
#include <iostream>
int main()
{
    int t = 83, k = 0, f;
    // 全部鶴と見なし、足数が合うまで鶴を一羽ずつ減らす
    while ((f = t * 2 + k * 4) < 268) --t, ++k;
    std::cout << "鶴:" << t << std::endl;
    std::cout << "亀:" << k << std::endl;
}
431>>376:2007/06/20(水) 19:43:57
>>429
書いてください
四則演算わかりません><
432デフォルトの名無しさん:2007/06/20(水) 19:48:25
>>431
四則演算分からないって小学生低学年レベルの学力もないってことですか?
433デフォルトの名無しさん:2007/06/20(水) 19:50:01
>376
4じゃなくて5?
#include <iostream>

int main()
{
for(int i=0, n = 1; i<5; i++) {
std::cout << n << "^2=" << n * n << std::endl;
n = n*10 + 1;
}
}
434デフォルトの名無しさん:2007/06/20(水) 19:52:40
以下の数列を初項から10項計算するプログラムをつくれ

Q.1

1 2
X_n+1 = --- ( X_n + ----- ) , X_0 = 1
2 X_n

Q.2

X_n+1 = X_n + X_n-1 , X_0 = 1, X_1 = 1

わかりません>< 教えてくださいorz
435デフォルトの名無しさん:2007/06/20(水) 19:54:52
>>434
問題の意味がわからん。
特にQ1
436デフォルトの名無しさん:2007/06/20(水) 19:55:13
>>434スミマセン 上がずれてしまいました

  X_n+1 = 1/2 (X_n + 2/X_n) , X_0=1

です
   Cお願いしますorz
437>>376:2007/06/20(水) 19:56:01
>>428
>>430
エラーがいぱいでます

>>432
ないってことだたと思います。ほんと終わってます。orz

>>433
はいCじゃなくてDです間違いました。すみません

訂正
C動物園で鶴と亀の居る檻を見た。観察したところ、頭の数が合計83個、
  足の合計が268本であることが分かった。それぞれ何匹であるかを求めよ。

D1の2乗、11の2乗、111の2乗、1111の2乗、11111の2乗、
  の各値を計算しなさい。

438デフォルトの名無しさん:2007/06/20(水) 20:01:32
>>434
Q2
#include <iostream>
template <int N> struct Q2 { enum { v = Q2<N-1>::v + Q2<N-2>::v }; };
template <> struct Q2<0> { enum { v = 1 }; };
template <> struct Q2<1> { enum { v = 1 }; };
int main()
{
    std::cout << Q2<0>::v << std::endl;
    std::cout << Q2<1>::v << std::endl;
    std::cout << Q2<2>::v << std::endl;
    std::cout << Q2<3>::v << std::endl;
    std::cout << Q2<4>::v << std::endl;
    std::cout << Q2<5>::v << std::endl;
    std::cout << Q2<6>::v << std::endl;
    std::cout << Q2<7>::v << std::endl;
    std::cout << Q2<8>::v << std::endl;
    std::cout << Q2<9>::v << std::endl;
}
439デフォルトの名無しさん:2007/06/20(水) 20:04:39
>>376
> Microsoft Visual C++ 6.0
すまん、これを見逃していたようだ。
しかし>>430すら通らないほど酷かったっけ?
VC++6.0って
440デフォルトの名無しさん:2007/06/20(水) 20:05:43
どうせC++じゃなくてCだったとかいうオチだろ
441デフォルトの名無しさん:2007/06/20(水) 20:06:25
>>434
言語は何だよ
C++でいいのかCなのか
442デフォルトの名無しさん:2007/06/20(水) 20:06:38
>>441 すみません  C言語です
443デフォルトの名無しさん:2007/06/20(水) 20:08:01
>>376はC言語の演習なのに
使用する言語をC++とか書いてるからマジでややこしいんだよ
ちゃんと書けよ
444デフォルトの名無しさん:2007/06/20(水) 20:08:44
嫌がらせでも何でもなく素でC++で考えてた
445>>376:2007/06/20(水) 20:19:29
>>443
教科書に第9章c言語によるプログラミングって書いてあったんで( ;´D`;)
言語はC++使用です。

ABの問題神様おねがいします。


446デフォルトの名無しさん:2007/06/20(水) 20:19:32
>>434
Q1

#include <stdio.h>

int main(void){
int i;
double ans[11];

ans[0] = 1.0;
printf("X_ 1 = 0.000000\n");

for(i=1; i<10; i++){
ans[i] = (ans[i-1] + (2/ans[i-1])) / 2;
printf("X_%2d = %lf\n", i, ans[i]);
}

return 0;
}
447デフォルトの名無しさん:2007/06/20(水) 20:20:13
スマン最初のX_ 1はX_ 0だな
448デフォルトの名無しさん:2007/06/20(水) 20:21:11
このウルトラ簡単な問題が書けない人がC++やってんのか
びっくりした
449デフォルトの名無しさん:2007/06/20(水) 20:21:18
>>447 有難うございますorz
450デフォルトの名無しさん:2007/06/20(水) 20:27:01
#include <stdio.h>

int main(void){
int i;
int ans[10];
ans[0] = ans[1] = 1;
puts("X_ 0 = 1");
puts("X_ 1 = 1");

for(i=2; i<10; i++){
ans[i] = ans[i-1] + ans[i-2];
printf("X_%2d = %d\n", i, ans[i]);
}

return 0;
}


>>446はなんか無駄に11になってたなすまん
451デフォルトの名無しさん:2007/06/20(水) 20:31:12
>>450 本当にたすかりました><
   有難うございましたorz
452デフォルトの名無しさん:2007/06/20(水) 20:32:01
去年は俺がそう言ってたよ
453デフォルトの名無しさん:2007/06/20(水) 20:50:53
>>445
B
#include<iostream>
#define TAX 0.05
using namespace std;

int main()
{
int tanka,kosu;
cout<<"単価:";
cin>>tanka;
cout<<"個数:";
cin>>kosu;
cout<<"代金:"<<tanka*kosu*(1+TAX)<<endl;
return 0;
}

なんだこれ…。
454デフォルトの名無しさん:2007/06/20(水) 20:56:34
[1] 授業単元:プログラミング演習
[2] 問題文(含コード&リンク):
注釈文に従って、空白の部分にコマンドを追加して、ハフマン符号化のプログラムを完成させよ。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4303.txt
[3] 環境
 [3.1] OS: XP
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 明日
[5] その他の制限: なし


お願いします
455>>376:2007/06/20(水) 21:10:30
>>453
( ;´D`;) <ありがとうございます。

( ;´D⊂ <どなたか問題Aおねがいします。



456デフォルトの名無しさん:2007/06/20(水) 21:10:39
>>453
$ ./a.out
単価:101
個数:3
代金:318.15
457デフォルトの名無しさん:2007/06/20(水) 21:18:36
どなたか>>418をお願いします m(_ _)m
ちょっとフーリエ変換とか式がややこしくて分かる方は少ないとは思いますが・・・;;
458デフォルトの名無しさん:2007/06/20(水) 21:19:54
>>456
むぅ。
(int)(tanka*kosu*(1+TAX))
てか消費税の概念がよく考えると分からないな…。
小数点は切り上げ、切り下げ、四捨五入?
459デフォルトの名無しさん:2007/06/20(水) 21:20:03
よくみる、_strとかって一体なんなんでしょうか?あと、C言語を入門書程度にやり終えて、C++の入門書も終わるんですが、ファイル操作程度までしかやってない超初心者が、C言語による組み込みソフトウェアを勉強するのは、ずっころりんだと思われますか?
460デフォルトの名無しさん:2007/06/20(水) 21:21:42
>>458
品物単位で消費税計算→切捨てじゃないか?
(int)(tanka * (1 + TAX)) * kosu
だと思う
461デフォルトの名無しさん:2007/06/20(水) 21:25:51
>>460
たとえばチロルチョコ10個買ったら消費税って付かないんだっけ?
2ch的にはうまい棒って書いた方が良いかw
462デフォルトの名無しさん:2007/06/20(水) 21:27:11
>>461
あー切り捨てじゃなくて切り上げか?
微妙にわからんw
463デフォルトの名無しさん:2007/06/20(水) 21:30:32
今は総額表示だからそんなこと考えなくてもいいんだよ。
464デフォルトの名無しさん:2007/06/20(水) 21:30:43
>>454
http://www.nurs.or.jp/~lionfan/ironna_21.html
///////課題ここから/////////////////////////////////////////////////////////////////
// 符号を割り当てる
htnode[d1].code = 0;
htnode[d2].code = 1;
// 親ノードへのポインタを設定する
htnode[d1].parent = &htnode[j];
htnode[d2].parent = &htnode[j];
// 親ノードの出現頻度を設定する
htnode[j].freq = htnode[d1].freq + htnode[d2].freq;
// 左ノード, 右ノードへのポインタを設定する
htnode[j].lnode = &htnode[d1];
htnode[j].rnode = &htnode[d2];
//////////////////////////////////////////////////////////////////////////////////////
465デフォルトの名無しさん:2007/06/20(水) 21:36:26
どなたか419をやっていただけませんか。エラーが沢山でます。
466>>376:2007/06/20(水) 21:37:23
計算は後に授業でやるのでプログラムだけ教えてほしんです。
エラーなしで実行して黒い画面を出すだけで良いんです。

A仕入れ価格と利益率をキーボードから入力して、
  顧客に売る際の値段を求めよ。

ラストお願いします。
467デフォルトの名無しさん:2007/06/20(水) 21:38:45
>>464
どうも
468デフォルトの名無しさん:2007/06/20(水) 21:49:08
どなたか>>411お願いします。
469デフォルトの名無しさん:2007/06/20(水) 22:03:57
>>419
#include <stdio.h>
int main()
{
FILE *sfp;
char sfn[FILENAME_MAX];
int c, count;
//printf("*** Sample program ***\n");
printf("filename:\n");
scanf("%s",sfn);
if((sfp = fopen(sfn,"r")) == NULL)
{
printf("File Not Found!!\n");
return -1;
}
while((c=getc(sfp)) != EOF)
{
if(c == 'e')
count++;
}
fclose(sfp);
printf("Number of 'e's in file: %d\n", count);
return 0;
}
470デフォルトの名無しさん:2007/06/20(水) 22:26:56
>>469さん 通りましたありがとうございます!
またなにかありましたらよろしくお願いします。
471デフォルトの名無しさん:2007/06/20(水) 22:32:54
FILENAME_MAX
472デフォルトの名無しさん:2007/06/20(水) 22:45:51
1] 授業単元: c言語
[2] 問題文:機械1と機械2で加工される製品A・B・Cがある。機械1・機械2でかかる加工時間は、それぞれ異なる。
     製品A・B・Cについて機械1・機械2でかかる加工時間をそれぞれ入力し、その合計が小さいものから順に並べよ。
[3] 環境
 [3.1] OS:XP
 [3.2] :visual studio 2005
 [3.3] 言語:C
[4] 期限:07年6月23日:24時まで

よろしくお願いします
473デフォルトの名無しさん:2007/06/20(水) 22:53:51
>>472
それは何の課題?
構造体を使って書くとか、配列でとかおおよそ習ったところを教えてほしい。
474デフォルトの名無しさん:2007/06/20(水) 22:56:06
っていうか、合計ってなんの合計よ。
問題文それ全部か?
475デフォルトの名無しさん:2007/06/20(水) 22:57:11
多分1,2での加工時間のことだろうが
その設定が意味わからん
ただ単にソートするプログラム書けでええやん
476デフォルトの名無しさん:2007/06/20(水) 22:58:20
ただ単にソートするプログラムすら分からないんじゃね?
477デフォルトの名無しさん:2007/06/20(水) 23:03:37
配列習いましたね。
ソート??わからないんで教えてください。
478デフォルトの名無しさん:2007/06/20(水) 23:03:47
[1] 授業単元:情報処理
[2] 問題文(含コード&リンク):
問1:標準入力よりdouble型の値を2つ、変数a,bに読み、2次方程式x2乗+ax+b=0の
根を求めるプログラムを作成する。
2つの異なる実根なら、x1=3.732051 x2=0.267949のように
重根(等しい根)なら、x=-1.000000のように
複素根なら、r=-0.500000 i=1.322876のように表示する。r=以下が実数部 i=以下が虚数部を表す。
平方根を求める数学関数はsqrt、関数のプロトタイプはdouble sprt(double x);である。
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: Visual Studio.net 2003
 [3.3] 言語: C
[4] 期限: 2007年6月21日6時
[5] その他の制限: 特になし。
479478:2007/06/20(水) 23:05:19
お願いします!
480デフォルトの名無しさん:2007/06/20(水) 23:06:36
>>458
総額表示義務化のときに散々言われたが、店によってまちまち
義務化以前は小計に税率を掛けて小数点以下切捨てにするところがほとんどだったのだが
481デフォルトの名無しさん:2007/06/20(水) 23:13:11
[1] 授業単元:C言語
[2] 問題文:10個のデータを大きい順に並び換えるプログラム
ttp://www.vipper.org/vip536740.c
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:Borland
 [3.3] 言語:C
[4] 期限:6/26 16:00

自分でやってみたんですが答えがうまくでません。どこを直したらいいか指導お願いします。
482デフォルトの名無しさん:2007/06/20(水) 23:14:33
>>478
#include <stdio.h>
#include <math.h>

int main(void)
{
double a, b, c, D;

scanf("%lf", &a);
scanf("%lf", &b);
scanf("%lf", &c);

D = b*b - 4*a*c;
if(D == 0)
{
printf("x = %g", -b /(2 * a));
}
else if(D > 0)
{
D = sqrt(D);
printf("x1 = %g , x2 = %g", (-b+D) /(2 * a), (-b-D) /(2 * a));
}
else
{
D = sqrt(-D);
printf("r = %g , i = ±%g",-b /(2 * a), D /(2 * a));
}

return 0;
}

適当に作ったから合ってるか知らん
483デフォルトの名無しさん:2007/06/20(水) 23:16:45
>>480
義務化以前は小数点以下切り下げ
というか確か決まってたはずだが
484デフォルトの名無しさん:2007/06/20(水) 23:16:49
>>481
aがintだから
485デフォルトの名無しさん:2007/06/20(水) 23:19:10
>>481
double型の値を入れるaがint型になってるぞ。
486デフォルトの名無しさん:2007/06/20(水) 23:21:08
[1] 授業単元:情報処理
[2] 問題文(含コード&リンク):
sin(x)の値はxの絶対値が小さいところではf(x)=x-1/6x3乗+1/120x5乗-1/5070x7乗で近似できる。
x=0.0からxの値を0.01ずつ増加させ、|sin(x)-f(x)|がε=0.0001以下であるxの最大値を求めるプログラム。
なお、xのy乗はpow(x,y)により計算できる。関数powのプロトタイプは、
double pow(double x,double y);であり、数学関数のグループに属している。
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: Visual Studio.net 2003
 [3.3] 言語: C
[4] 期限: 2007年6月21日6時
[5] その他の制限: 特になし。
おねがいします><
487481:2007/06/20(水) 23:21:27
>>484>>485
変えたらうまくいきました。どうもありがとうございました。
488デフォルトの名無しさん:2007/06/20(水) 23:21:38
>>472
小さい順に並べてどうすんの?
製品〜の作業時間が一番小さく、○です。みたいな感じで表示すりゃいいの?
それとも、小さい順に合計値を表示するだけでいいの?
489デフォルトの名無しさん:2007/06/20(水) 23:26:54
1] 授業単元:情報処理
[2] 問題文(含コード&リンク): シフト前後のビット・パターンを用いて
このような結果になる理由を具体的に説明せよ
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4306.txt
[3] 環境
 [3.1] OS: Windows
 [3.3] 言語: C
[4] 期限: 6月21日〜6月22日の朝1時まで
時間がないんですがよろしくおねがいします
490デフォルトの名無しさん :2007/06/20(水) 23:30:58
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):
 次に示す関数a,bの値を入力してxの値を0.00から3.14まで0.01間隔で計算して出力するプログラムを作成せよ。
 ただし以下に示した関数として定義すること。f(x)=exp(ax)×sinbx
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン:VC 6.0
 [3.3] 言語: C++
[4] 期限: 2007年7月6日AM8:30まで

お願いしますm(__)m
491472:2007/06/20(水) 23:31:13
>>488
小さい順に並べて、三つの合計値を表示させたいです。

A=10,B=5,C=8だったとしたら
B⇒C⇒A 23

みたいな感じにしたいです。
よろしくお願いします
492489:2007/06/20(水) 23:31:43
入力ミスしました
期限は6月20〜21日朝1時までです
すいませんでした
493デフォルトの名無しさん:2007/06/20(水) 23:33:14
>>490
関数a,bってどこ?
494デフォルトの名無しさん:2007/06/20(水) 23:34:00
朝1時っていつだよwwwwwwwww
495デフォルトの名無しさん:2007/06/20(水) 23:34:42
>>489
0101 0011 0x53

↓左2シフト(2ビット左にずらし、0で埋める)
0100 1100 0x4C

↓右2シフト(2ビット右にずらし、0で埋める)
0001 0100 0x14
496デフォルトの名無しさん:2007/06/20(水) 23:37:49
>>482
動きました!完璧です。
ありがとうございました!!
497デフォルトの名無しさん:2007/06/20(水) 23:37:56
>>491
リストって習った?
というかポインタ習った?
498デフォルトの名無しさん:2007/06/20(水) 23:40:17
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):

文字s,pを与え、文字列sの中を先頭から順々に調べて、pに一致している部分文字列
を見つけるとその部分文字列の先頭を指しているポインタを返し、見つからないと0を返す
関数searchを作成せよ。関数searchの頭はchar *search(char* s, char* p)とする。

例えば
x = search("nekodaisuki", "dai"); ではxは"daisuki"となる。

一応テスト用のmain関数を作ったのでよければ使ってください
int main(void) {
char* x;
search("nekodaisuki", "dai");
printf("%s\n", x);
}

[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 2007年6月21日12:00
[5] その他の制限: ライブラリ関数の使用禁止。必ず再帰関数を使う。
499デフォルトの名無しさん:2007/06/20(水) 23:45:10
>>492
期限なのに範囲指定?
1時は朝か?
500デフォルトの名無しさん:2007/06/20(水) 23:45:13
>>497
聴いたことないんで習ってないと思います。。。
501デフォルトの名無しさん:2007/06/20(水) 23:51:42
1] 授業単元:情報処理
[2] 問題文(含コード&リンク): なぜこのような結果になるかその理由を含め具体的に説明しなさい
(結果データ(d_result)については、何を計算しているかを説明せよ)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4307.txt
[3] 環境
 [3.1] OS: Windows
 [3.3] 言語: C
[4] 期限: 3時間以内
502デフォルトの名無しさん:2007/06/20(水) 23:57:01
>>498
#include <stdio.h>
char *search(char* s, char* p){
if(*p=='\0') return s;
if(*s=='\0') return (char*)0;
if(*p == *s && search(s+1, p+1)) return s;
return search(s+1,p);
}
int main(void) {
char* x;
x = search("nekodaisuki", "dai");
printf("%s\n", x);
}

もうすこし綺麗に書けそうだが。
503デフォルトの名無しさん:2007/06/21(木) 00:01:19
>>501
理由も何も、格演算子の性質を理解してりゃ出せる答えっしょ?
16進数で入力を受け付けているけど、0と1の2進数で説明しちゃられら?
504デフォルトの名無しさん:2007/06/21(木) 00:01:51
[1] 授業単元:プログラミング 序論
[2] 問題文(含コード&リンク): 何を行っているプログラムか説明し、
その理由も詳しく示しなさい
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4308.txt
[3] 環境
  OS: Windows
 言語: C言語
[4] 期限:6月21日4時まで
プログラムについて説明できなくて困ってます
誰か教えてください
505デフォルトの名無しさん:2007/06/21(木) 00:05:27
綺麗ではない。
char *search(char* s, char* p){return *p=='\0' || (*s && *p==*s && search(s+1, p+1)) ? s : search(s+1,p);}
506デフォルトの名無しさん:2007/06/21(木) 00:07:46
>>504
http://ja.wikipedia.org/wiki/%E8%A3%9C%E6%95%B0
http://www.bohyoh.com/CandCPP/C/operator.html
~演算子(補数演算子)
要するにそれは1の補数で+−の符号を変えているってこと
507デフォルトの名無しさん:2007/06/21(木) 00:08:17
>>506
2の補数では?
508デフォルトの名無しさん:2007/06/21(木) 00:11:45
509デフォルトの名無しさん:2007/06/21(木) 00:13:22
>>507
>>504
> ~number + 1;
1の補数だろ
510502:2007/06/21(木) 00:16:46
エラーケースを考えると、入り口と再帰部は分けたほうがいいな。
つーわけで、

>>489
#include <stdio.h>
static char *search_r(char* s, char* p){
  if(*p=='\0') return s;
  if(*s=='\0') return (char*)0;
  if(*p == *s && search_r(s+1, p+1)) return s;
  return search_r(s+1,p);
}
char *search(char* s, char* p){
  if(!s || !p || *p=='\0') return (char*)0;
  return search_r(s, p);
}
int main(void) {
  char* x;
  x = search("nekodaisuki", "dai");
  printf("%s\n", x);
}
511デフォルトの名無しさん:2007/06/21(木) 00:19:42
staticにするわけをデレデレしながら教えて
512デフォルトの名無しさん:2007/06/21(木) 00:21:50
ローカルな関数は全て静的にするべきだ。
513デフォルトの名無しさん:2007/06/21(木) 00:22:27
うむ
514502:2007/06/21(木) 00:24:23
>>512
この場合必要ないんだけど、これをライブラリ化した場合、
再帰関数は公開したくないなーという迷いがあったんですw
515デフォルトの名無しさん:2007/06/21(木) 00:25:26
>>512
なるほど……thx
516デフォルトの名無しさん:2007/06/21(木) 01:08:22
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):
テキスト形式のファイルを読み込み, 読み込んだアルファベットで書かれた文章のうちa,i,u,e,o(母音)を'*'に置き換えて出力するプログラムを作成しなさい.
出力はファイル名test.outにすること.

[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限: 21日正午まで
[5] その他の制限: 特になし

実行結果
[home@*** ~/h1]% cat test.in
Mr.X is a gentleman.
[home@*** ~/h1]% ./test
filename:
test.in
[home@*** ~/h1]% cat test.out
Mr.X -s - g-ntl-m-n.
[home@*** ~/h1]%

よろしくお願いします。

517デフォルトの名無しさん:2007/06/21(木) 01:09:21
*に置き換えてないじゃん。
518デフォルトの名無しさん:2007/06/21(木) 01:22:37
>>517 すみません。こうです↓

実行結果
[home@*** ~/h1]% cat test.in
Mr.X is a gentleman.
[home@*** ~/h1]% ./test
filename:
test.in
[home@*** ~/h1]% cat test.out
Mr.X *s * g*ntl*m*n.
[home@*** ~/h1]%

よろしくお願いします。

519デフォルトの名無しさん:2007/06/21(木) 02:13:25
>>498じゃないんですが
>>502
if(!s || !p || *p=='\0')
ってどういう意味でしょうか??
520デフォルトの名無しさん:2007/06/21(木) 02:26:14
[1] C言語
[2]
#include <stdio.h>

int main (void)
{
int a[3];
int *ptr;
ptr=&a[0];

printf("配列a[]の要素を順に3つ入力してください.\n");

int j;
for(j=0; j<3; j++){
scanf("%d", &a[j]);
}
int h;
for(h=0; h<3; h++){
printf("%d,%d\n",ptr+h,*(ptr+h));
}
return 0;
}

[3] VB6.0
 [3.1] windows
[4] 明後日まで

[2]のコードをエラーなしで動くようにしてください。
配列a[3]にscanf関数でキーボードから入力し、それをptrで呼びだして表示するプログラムです。
521デフォルトの名無しさん:2007/06/21(木) 02:30:03
522デフォルトの名無しさん:2007/06/21(木) 02:34:49

523デフォルトの名無しさん:2007/06/21(木) 02:55:15
     ∧___∧
    /.(●),、(●)\
    |  ,,ノ(、_, )ヽ、,  | 
  /|   `-=ニ=- '  .|
 /  .ヽ、_ `ニニ´__ノ
 |    _____ ノ
 ∪⌒∪     ∪
524デフォルトの名無しさん:2007/06/21(木) 02:55:27
>>516
gccでコンパイルしたら、gets関数でworningが出たので直しました。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4311.txt

でもなんでgetsでworning出るんでしょうか?
warning: the `gets' function is dangerous and should not be used.
525デフォルトの名無しさん:2007/06/21(木) 03:00:39
そんなんもしらんのか・・・
526デフォルトの名無しさん:2007/06/21(木) 03:06:16
>>524 なんかコンパイルしたら、case ラベルを整数定数に還元できません
   って表示がでたのですが、これは何なんですか?
527デフォルトの名無しさん:2007/06/21(木) 03:08:39
>>524 すみません。わかりました^^

ありがとうございました。。。OTL
528デフォルトの名無しさん:2007/06/21(木) 03:16:14
だれかマジで>>411お願いします………
529デフォルトの名無しさん:2007/06/21(木) 03:16:22
>>526
横からだが
エラーメッセージっていうやつ
530デフォルトの名無しさん:2007/06/21(木) 03:50:15
>>528
問題文に詳しい人間がいないんジャマイカ?
求める答えの公式みたいなのある?
531デフォルトの名無しさん:2007/06/21(木) 03:53:10
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):
テキスト形式のファイルを読み込み, 読み込んだ文章を最後から逆順に出力するプログラムを作成しなさい

[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限: 21日正午まで
[5] その他の制限: 特になし

実行結果

]% cat reverse.in
We are the champion.
]% ./reverse
filename: reverse.in
]% cat reverse.out
.noipmahc eht era eW
]%

よろしくおねがいします><
532デフォルトの名無しさん:2007/06/21(木) 05:55:08
>>531 きんもぉ〜☆なソースだけど我慢せい

#include <stdio.h>

int main(void) {
FILE *fp;
char buf[32];
long i,j,c;
printf("開くファイル名を入力 > ");
scanf("%s",buf);
fp=fopen(buf,"r");
if(fp==NULL) {
printf("%sが開けません\n",buf);
return 0;
}
fseek(fp,0L,SEEK_END);
for( i=1,j=ftell(fp); i<=j; i++ ) {
fseek(fp,-i,SEEK_END);
c=fgetc(fp);
printf("%c",c);
}
fclose(fp);
return 0;
}
533デフォルトの名無しさん:2007/06/21(木) 06:01:54
[1] 授業単元:プログラミング技術V
[2] 問題文(含コード&リンク):
n個の文字列を読み込んだあと、その文字列を反転させて表示するプログラムを作成せよ。
ここで"反転"とは、例えば、"pro3"という文字列を入力した場合、"3orp"と出力されるものである。
(実行例)
nを入力せよ : 2
1個目の文字列を入力せよ : pro3
反転した文字列は : 3orp
2個目の文字列を入力せよ : kadai
反転した文字列は : iadak

[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: cygwin gcc
 [3.3] 言語: C言語
[4] 期限: 本日午後2時までによろしくお願いします。
[5] その他の制限: 単純な配列のデータの並べ替え、また関数strlenを使ってもよい。
534デフォルトの名無しさん:2007/06/21(木) 06:16:01
[1] 授業単元:C言語入門(〜ファイルの入力と出力〜)
[2] 問題文(含コード&リンク):
テキストファイルに出てくる特定の文字の数をカウントするプログラムを作成する。
特殊な例では、テキストファイルの各行の最後には、「復帰・改行」を示すASCIIコードが付加されているので、ファイルの行数は「復帰・改行」の数をカウントすることによって計算できる。
「復帰・改行」に対応するASCIIコードは10である。
なお、テキストファイルの与え方はリダイレクト「<」を用いる。
(実行例に./a.out < "text_file")
[3] 環境
 [3.1] OS: Linux Vine
 [3.2] コンパイラ名とバージョン: gcc バージョン?
 [3.3] 言語: C言語
[4] 期限: 今日12時まで
[5] その他の制限: テキストファイルの読み込みはgetchar()を用いる。
(ヒントプログラム)
#include <stdio.h>
int main(void){
char c;
while((c=getchar()) != EOF)
{
printf("%c" ,c);
}
return 0;
}
535デフォルトの名無しさん:2007/06/21(木) 06:16:54
おまいら、ぎりぎりに質問って・・・
536デフォルトの名無しさん:2007/06/21(木) 06:20:29
ぎりぎりですいません。(;^^)
出来る限り自分でやりたかったけど、結局はわからなかったっす。
537デフォルトの名無しさん:2007/06/21(木) 06:24:24
>>533
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(void) {
char buf[1024];
int i,j,n,buf_sz=sizeof(buf)/sizeof(buf[0]);
printf("nを入力せよ : ");
fgets(buf,buf_sz,stdin);
n=atoi(buf);
for(i=0; i<n; i++) {
printf("%d個目の文字列を入力せよ : ",i+1);
fgets(buf,buf_sz,stdin);
printf("反転した文字列は : ");
for(j=strlen(buf)-2; j>=0; j--)
putchar(buf[j]);
puts("");
}
return 0;
}
538デフォルトの名無しさん:2007/06/21(木) 06:57:57
>>537
早いですね。自分はさんざん試行錯誤して出来なかったのに...orz
とにかくありがとうございます。
できたらもう1つお願いします。
[1] 授業単元: プログラミング技術V
[2] 問題文(含コード&リンク):
任意の文字列を配列に読み込み、その中に出てくる特定の文字列を指定した文字列に置き換えるプログラムを作成せよ。
(実行例)
文字列を入力せよ : kadai no teisyutukigen ha mamore
置き換え元を入力せよ : kadai
置き換え後を入力せよ : report
結果 : report no teisyutukigen ha mamore

[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: cygwin gcc
 [3.3] 言語: C言語
[4] 期限: これも本日午後2時までにお願いします。
[5] その他の制限: 空白ごと読み込む方法はgetchar命令、もしくはfgets命令を用いるとよい。
539デフォルトの名無しさん:2007/06/21(木) 07:50:23
>>538
もはやきんもぉ〜☆なソースです。置換にしても、俺はこんなソースは書かず
string.hにあるライブラリを使うけど、とりあえずstrchrとかstrstrとか使わずにやってみた。

http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4312.c
540デフォルトの名無しさん:2007/06/21(木) 08:07:08
>>539
ありがとうございます。
自分今は二次元配列やってて、作ってもらったソースコードも丁度先週習った部分なのでよく理解できました。
これで課題が出せます。
541デフォルトの名無しさん:2007/06/21(木) 08:15:43
>>540 っつか、ちとまちごうとった・・・
for(j=1,flg=1; j<strlen(str1)-1; j++) を
for(j=1,flg=1; j<strlen(str1); j++) にしといて
542デフォルトの名無しさん:2007/06/21(木) 08:17:58
>>540
いや、もっとおかしなことになってた。ちと書き直してくる orz
543デフォルトの名無しさん:2007/06/21(木) 08:36:06
>>540 >>538
今度こそ。なんとなくきんもぉ〜☆な感じだが、前のよりは大丈夫そう。

http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4313.c
544デフォルトの名無しさん:2007/06/21(木) 08:39:55
って、まだだめぽだった orz
考えが不十分だったっす。仮に、置き換える文字列と最後まで一致しなくても
途中まで一致したときの対処が。また書き直してくるっす。すまそ orz
545デフォルトの名無しさん:2007/06/21(木) 08:41:38
ん?いや、やっぱ大丈夫だったみたいっす。スレ汚しすまそ。
徹夜明けだから寝るっす。失礼 ノシ
546デフォルトの名無しさん:2007/06/21(木) 08:44:49
ご丁寧のどうも、参考になります。
最初に「#define STR_MAX」で入力する文字列の最大長を書いてたのをまとめたんですね。
見やすくて、すっきりしていいと思います。
徹夜明けご苦労様です。
おやすみ〜
547デフォルトの名無しさん:2007/06/21(木) 08:46:15
ちなみにコンパイルしてちゃんと動いてるし、課題で細かい指示は無いので最初のソースコードでも大丈夫です。
ありがとうございました。
548デフォルトの名無しさん:2007/06/21(木) 08:46:49
表示のとき置き換えるだけでいいの?
549デフォルトの名無しさん:2007/06/21(木) 08:57:37
はい、課題の内容としては置き換えるだけです。
空白を含む文字列を文字配列変数に読み込み、その中から指定の文字の並び箇所を検索。
文字の並びが見つかったら、その部分を抜き出して用意された文字列と差し替える。
の手順に処理されていれば問題ないです。
550デフォルトの名無しさん:2007/06/21(木) 09:00:25
>>547
最初のだと条件が不十分で kadaio としたときでも kadai までしか
比較しないから置き換えてしまったり、最初の一文字が一致したら
2文字目以降が一致しなかった場合、最初の文字が削られてしまったりと
だめぽだったさ。
551デフォルトの名無しさん:2007/06/21(木) 09:06:09
ああ、なるほど。実行してみたらそうなりますね。
たぶん教授の目はごまかせないので指摘されていたかもしれません。
ではソースコードは2つ目の方を使わせていただきます。
552デフォルトの名無しさん:2007/06/21(木) 09:31:16
>>411
抵抗Rについて V=I・R
インダクタンスLについて V=(dI/dt)・L
静電容量Cについて V=(∫I dt)/C
こんなんだっけ
553デフォルトの名無しさん:2007/06/21(木) 09:43:43
>>534
誰か頼む〜
なんか538が盛り上がってたから、ちと仮眠とって待ったけど
自分のターンが回ってきた!?って思ったから誰かよろしくノシ
554デフォルトの名無しさん:2007/06/21(木) 09:45:39
ttp://www.bohyoh.com/CandCPP/C/Library/getchar.html
どうあがいてもテキストファイルから読み込むことは不可能です
ありがとうございました
555デフォルトの名無しさん:2007/06/21(木) 09:48:59
リダイレクト前提だとか。
556デフォルトの名無しさん:2007/06/21(木) 09:49:27
>>534
#include <stdio.h>
int main(void)
{
    int count[256]={0};
    int c;

    while((c=getchar())!=EOF)
    {
        count[c]++;
    }
    printf("%d\n", count['\n']);
    printf("%d\n", count['(']);

    return 0;
}
557デフォルトの名無しさん:2007/06/21(木) 11:03:01
{1}C言語
[2]
2つの実数a、bに対して、
・a>bなら1
・a=bなら0
・a<bなら1
を返す関数compを作成し、この関数compを利用して、キーボードから読み込まれた2つの実数(実数1、実数2)のどちらが大きいか(または等しいか)を表示するプログラムを作成しなさい
3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン: VS2005
 [3.3] 言語: C
実行結果
実行結果例
実数1:1.23
実数2:1.22
実数1の方が大きい

実行結果例
実数1:3.33
実数2:3.330
実数1と2は等しい

よろしくお願いします
558デフォルトの名無しさん:2007/06/21(木) 11:15:23
>>557
>・a>bなら1
>・a=bなら0
>・a<bなら1
これじゃだめだろ。問題をもう一度確認して出直しといで。
559デフォルトの名無しさん:2007/06/21(木) 11:19:32
>>557
#include <stdio.h>

static int CompResult;

int comp(double a, double b)
{
    if(a==b) CompResult=0;
    if(a>b) CompResult=1;
    if(a<b) CompResult=-1;

    return (CompResult!=0);
}

int main(void)
{
    char *name[]={"実数1", "実数2"};
    double value[2];
    int i;

    for(i=0;i<2;i++)
    {
        printf("%s:", name[i]);
        scanf("%lf", &value[i]);
    }

    comp(value[0], value[1]);
    if(CompResult==0) printf("%sと%sは等しい\n", name[0], name[1]);
    else printf("%sの方が大きい\n", name[(CompResult<0)]);

    return 0;
}
560デフォルトの名無しさん:2007/06/21(木) 12:23:42
授業単元:C言語
環境:if文・for文・while文・do〜while文・switch〜case文
OS:Windows
コンパイラ名とバージョン:borland
言語:C
テーマ:数値配列の操作
整数配列 array[10]に値を入力後、昇順にソースして表示しなさい
実行画面
整数入力[0]==>8
整数入力[1]==>22
整数入力[2]==>10
整数入力[3]==>37
整数入力[4]==>16
整数入力[5]==>3
整数入力[6]==>25
整数入力[7]==>33
整数入力[8]==>8
整数入力[9]==>19

* * *ソート後 * * *
配列[0]:3
配列[1]:8
配列[2]:10
配列[3]:37
配列[4]:16
配列[5]:3
配列[6]:22
配列[7]:25
配列[8]:33
配列[9]:37
561560の文章訂正:2007/06/21(木) 12:29:06
整数配列 array[10]に値を入力後、昇順にソートして表示しなさい

562デフォルトの名無しさん:2007/06/21(木) 12:35:28
授業単元:C言語
環境:if文・for文・while文・do〜while文・switch〜case文・
OS:Windows
コンパイラ名とバージョン:borland
言語:C
テーマ:文字配列の操作
問題1
文字型の配列変数mojiに設定されている文字数を答えなさい
char moji[] = "ABCDEFG";
実行画面
文字数:7

問題2:文字列を入力して偶数番目の要素数と奇数番目の要素を別の配列に格納し、文字列として表示しなさい
実行画面
文字列入力==>ABC123def
偶数要素:AC2df
奇数要素:B13e

以上の2問宜しくお願いします


563デフォルトの名無しさん :2007/06/21(木) 12:43:50
[1] 授業単元: C言語
[2] 問題文(含コード&リンク):
  3d^2x/dt^2+dx/dt+2x=4
x(t=0)=0
dx/dt(t=0)=0

上記の微分方程式をルンゲークッタ法を用いて解け
[3] 環境
 [3.1] OS: windowsXP
 [3.2] コンパイラ名とバージョン: bcc32
 [3.3] 言語: C言語
[4] 期限: ([2007年6月25日まで
[5] その他の制限: なし

お願いします
564デフォルトの名無しさん:2007/06/21(木) 13:33:30
>>562
問題1
#include <stdio.h>
int length(const char *s)
{
    return s[0] ? length(s + 1) + 1 : 0;
}
int main(void)
{
    char moji[] = "ABCDEFG";
    printf("文字数:%d\n", length(moji));
    return 0;
}
565デフォルトの名無しさん:2007/06/21(木) 13:39:44
[1]関数
[2]実行するごとに違う小文字を20個表示させるプログラム
 [3.1] WindowsXP
 [3.2] BorlandC++
 [3.3] C++
566デフォルトの名無しさん:2007/06/21(木) 13:45:57
>>562
問題2
#include <stdio.h>
int main(void)
{
    char odd[256], even[256];
    int i, c;
    printf("文字列入力==>");
    for (i = 0; i < 510 && (c = getchar()) != EOF && c != '\n'; i++)
        if (i%2) odd[i/2] = c;
        else even[i/2] = c;
    even[i%2 ? i/2+1 : i/2] = '\0';
    odd[i/2] = '\0';
    printf("偶数要素:%s\n奇数要素:%s\n", even, odd);
    return 0;
}
567デフォルトの名無しさん:2007/06/21(木) 14:01:59
>>565
#include <cstdlib>
#include <ctime>
#include <iostream>
#include <iterator>
#include <algorithm>
using namespace std;
char gen() { return 'a' + rand() % 26; }
int main()
{
    srand(time(0));
    generate_n(ostreambuf_iterator<char>(cout), 20, gen);
    cout << endl;
    return 0;
}
568デフォルトの名無しさん:2007/06/21(木) 14:07:32
[3.1] OS: WindowsXP
[3.2] コンパイラ名とバージョン: VS2005
[3.3] 言語:C++

次の定数を用意してその値を出力し、値を確認しなさい。
1.8進定数
2.10進定数
3.16進定数
4.指数指定の実数
5.小数点使用の実数
6.指数指定、小数点使用の実数
7.文字 「%d」で出力
8.文字列 「%s」で出力
という問題です。よろしくお願いします。
569デフォルトの名無しさん:2007/06/21(木) 14:39:41
[1] 授業単元:C言語
[2] 問題文(含コード&リンク):
 N 人の人がいて,それらは番号 0, 1, 2, ..., N-1 で表されているとする。
この N 人の人間関係(知り合いかどうか)を表した配列 a[N][N] がある。
ただし, i 番目の人と j 番目の人とが知り合いであるとき a[i][j] == a[j][i] == 1 であり,知り合いでないとき a[i][j] == a[j][i] == 0 である。
このとき, x 番目の人から,知り合いの知り合いの知り合い.... という繋がりで, y 番目の人まで辿り着くには,最小で何回の知り合いという関係が必要か,を返す関数 int acquaintDistance(int a[N][N], int x, int y) を作れ。
なお,x 番目の人から y 番目の人に辿り着けない場合には,acquaintDistance は -1 を返すこととする。
関数名の acquaint は知り合いにさせる, distance は距離という意味である。
ヒント:待ち行列を利用する。最初に x を待ち行列に入れ,
後は,「待ち列から一つ dequeue して,その人の知り合いを待ち行列に enqueue する」
ということを繰り返す。ただし,一度 enqueue した人は二度と enqueue しないようにし, y を enqueue する時点あるいは enqueue する一がいなくなった時点で,終了する。
x から各人までの知り合い距離を入れる配列も用意しておき,新しい人を enqueue する度に,その人までの距離をその配列に入れる。
[3] 環境
 [3.1] OS:Vine LINUX
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限:2007年6月26日10時45分まで
[5] その他の制限:どうかよろしくお願いします。
570デフォルトの名無しさん:2007/06/21(木) 15:55:10
566>コンパイルしたんですが答えがでませんでした
571デフォルトの名無しさん:2007/06/21(木) 15:57:24
566>コンパイルしたんですが答えがでました
572デフォルトの名無しさん:2007/06/21(木) 16:08:17
>>562  >>566 をパクッって 問題2

#include <stdio.h>
int main(void)
{
char odd[256], even[256];
int i,c,e,o;
printf("文字列入力==>");
for (i=1,e=0,o=0 ; i <= 510; i++) {
if( (c=getchar())==EOF || c=='\n' ) break;
if(i%2) odd[o++]=c;
else even[e++]=c;
}
even[e]='\0';
odd[o]='\0';
printf("偶数要素:%s\n奇数要素:%s\n", even, odd);
return 0;
}
573デフォルトの名無しさん:2007/06/21(木) 16:10:25
あれ?要素番号が偶数か奇数か、か。だとしたら
for (i=1,e=0,o=0 ; i <= 510; i++) {  の部分を
for (i=0,e=0,o=0 ; i < 510; i++) {  にしちくり
574デフォルトの名無しさん:2007/06/21(木) 16:12:04
えーこっちでも質問してたのかよ
575デフォルトの名無しさん:2007/06/21(木) 16:16:49
i番目のフィボナッチ数を返す関数
long fibonacci(long n){/* */}を再帰を用いて定義せよ
という問題なんですが

実行例
整数を入力してください:0
Fibonacci(0)=1
整数を入力してください:1
Fibonacci(1)=1
整数を入力してください:2
Fibonacci(2)=2
整数を入力してください:6
Fibonacci(6)=13

となるようにしたいんですがお手上げ状態ですorz
よろしくお願いします

576デフォルトの名無しさん:2007/06/21(木) 16:18:45
>>575
int fibo(int x) {
if(x<=2) return 1;
else return fibo(x-1) + fibo(x-2);
}
577デフォルトの名無しさん:2007/06/21(木) 16:23:41
>>576
なんねーっすorz
578デフォルトの名無しさん:2007/06/21(木) 16:26:33
i番目のフィボナッチ数を返す関数
long fibonacci(long n){/* */}を再帰を用いて定義せよ
という問題なんですが

実行例
整数を入力してください:0
Fibonacci(0)=1
整数を入力してください:1
Fibonacci(1)=1
整数を入力してください:2
Fibonacci(2)=2
整数を入力してください:6
Fibonacci(6)=13

となるようにしたいんですがお手上げ状態ですorz
よろしくお願いします
579デフォルトの名無しさん:2007/06/21(木) 16:26:35
580デフォルトの名無しさん:2007/06/21(木) 16:29:57
>>579
間違えました8ですしかも何度もかきこんでしまってすんませんorz
581デフォルトの名無しさん:2007/06/21(木) 16:30:17
( ´,_ゝ`)プッ
582デフォルトの名無しさん:2007/06/21(木) 16:34:04
>>581
屁ぇ〜〜〜こきましたねあなたぁ〜〜♪
583デフォルトの名無しさん:2007/06/21(木) 16:36:06
584デフォルトの名無しさん:2007/06/21(木) 16:36:45
  (((;;;:: ;: ;;          ;; ;:;::)) ::)
   ( ::: (;;   ∧_,∧   );:;;;)) )::: :; :))
    ((:: :;;  (´・ω・)っ ;;;; ; :))
     ((;;;  (っ ,r どどどどど・・・・・
          i_ノ┘

 ((;;;;゜;;:::(;;:  ∧__,∧ '';:;;;):;:::))゜))  ::)))
 (((; ;;:: ;:::;;⊂(´・ω・`)  ;:;;;,,))...)))))) ::::)
  ((;;;:;;;:,,,." ヽ ⊂ ) ;:;;))):...,),)):;:::::))))
   ("((;:;;;  (⌒) |どどどどど・・・・・
         三 `J

         .∧__,,∧
       ⊂(´・ω・`)⊃
    ☆   ノ   丿 キキーッ
      ヽ .ノ  (⌒) 彡
       と_丿=.⌒






            (⌒⌒)
     ∧_ ∧ ( ブッ )
     ( ・ω・` ) ノノ〜′
       (⊃⌒*⌒⊂)
       /__ノωヽ__)
585デフォルトの名無しさん:2007/06/21(木) 16:37:08
>>584
ちょっwwwwwwおまっwwwwwww何しに来とんねん?w
586デフォルトの名無しさん:2007/06/21(木) 16:44:44
>>575です
よろしくおねがいしますprz
587デフォルトの名無しさん:2007/06/21(木) 16:47:05
>>586 だから
>>576 の int を long にして使いなはれ。
まさか、値を受け継ぐところまで他人に作れと?
588デフォルトの名無しさん:2007/06/21(木) 16:51:13
[1] 授業単元: 再帰関数
[2] 問題文:
文字列s、pを与えられ、文字列sの中を戦闘から順に調べ、pに一致する部分
文字列が見つかった場合はその部分文字列の先頭を指すポインタを、見つからない場合
は0を返す関数searchを書け。 
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン:gcc 3.4
 [3.3] 言語:C
[4] 期限: 2007年06月22日08:00まで
[5] その他の制限:
searchは必ず再帰関数として作ること。関数searchの頭書きはchar *search(char* s, char* p){...
とすること。例えばx=sercha("international", "nat");ではx=nationalになる。
なお、ライブラリ関数を利用してはいけない。関数を使いたいときは自分で定義する事。

急ぎで申し訳ありません。あと1問あります・・・。
589デフォルトの名無しさん:2007/06/21(木) 16:54:41
>>588
それすぐ上にあったぞ。>>510かな。
590デフォルトの名無しさん:2007/06/21(木) 16:54:58
ライブラリ関数を利用しちゃいけないのに関数を定義して使えと?
標準ライブラリを使っちゃあかんってことやね?どこの学校の
どこの講師の問題じゃ〜〜ゴルァ〜〜〜ってトーマスさんがクレームつけてきまつよぉ〜ん♪
591588:2007/06/21(木) 17:01:19
[1] 授業単元: ポインタ
[2] 問題文:
文字列sを区切り文字sepによって3分割して、前半部と後半部を返す関数separateを書け。 
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン:gcc 3.4
 [3.3] 言語:C
[4] 期限: 2007年06月22日08:00まで
[5] その他の制限:
関数separateの頭書きはchar *separate(char* s, char sep, char **remain){...とせよ。文字
列sを先頭から順に調べ最初に見つかった文字sepの1回以上の繰り返しによって, sを前半部と後半部に
分裂し、前半部分を返り値として返し、後半部分を第3引数(remain)として返せ。前半部分は複製を作っ
て返すことになる(mallocを使う)。後半部分は複製を作る必要はない。区切り部分sepがみつからなった
場合はsを返し、第3引数(remain)として0を返せ。

たとえばx=separate("my...book", '.', &p);ではxは"my"にpは"book"になる。
なおライブラリ関数として使ってよいのはmallocだけである。


2問もあげてしまってすみません。どうぞよろしく御願いいたします。
592デフォルトの名無しさん:2007/06/21(木) 17:02:27
>>587さん
すみませんど素人なもんでどうすればいいのかわからんのです
long fibonacci(int x) {
if(x<=2) return 1;
else return fibo(x-1) + fibo(x-2);
}
てすればいいんでしょうか?
ごめんなさい教えてください
593588:2007/06/21(木) 17:04:17
>>589
本当ですね。焦っていて見逃していました。
ありがとうございます。
594デフォルトの名無しさん:2007/06/21(木) 17:08:40
>>592 括弧の中も long x
595588:2007/06/21(木) 17:09:23
>>589
本当ですね。焦っていて先走っちやいました。
ピュッピュッ逝くぅ〜〜〜〜ん♪
596デフォルトの名無しさん:2007/06/21(木) 17:14:03
>>594さん
long fibonacci(long x) {
if(x<=2) return 1;
else return fibo(x-1) + fibo(x-2);
}
でなるんどえしょうか?nじゃなくてxにしなきゃなんですかね?
日本語文章はどこにいれればいいのでしょうか?
597デフォルトの名無しさん:2007/06/21(木) 17:14:16
x = search("nekodaisuki", "kk");
こうした場合はkodaisukiになるけど、ええんか?
598デフォルトの名無しさん:2007/06/21(木) 17:15:49
>>596
いや、別に long n にするんだったら中の x を n にすりゃええがな・・・
あとそれ、再起を使ったライブラリの部分だから、あとはそれを
main の中で適当に引数を入れる仕組みにして用いたらええがな。
599デフォルトの名無しさん:2007/06/21(木) 17:20:54
>>575 >>596 はいはいクマクマ。

#include <stdio.h>

long fibo(long x) {
if(x<=2) return 1;
else return fibo(x-1) + fibo(x-2);
}

int main(void) {
int n;
printf("整数を入力してください:");
scanf("%ld",&n);
printf("Fibonacci(%ld)=%ld",n,fibo(n));
return 0;
}
600デフォルトの名無しさん:2007/06/21(木) 17:21:14
>>591
#include <stdio.h>
char *separate(char *s, char sep, char **remain)
{
    char *p;
    for (p = s; *p && *p != sep; ++p) {}
    if (!*p) *remain = 0;
    else {
        ++p;
        p[-1] = '\0';
        while (*p == sep) p++;
        *remain = p;
    }
    return s;
}
int main(void)
{
    char s[] = "my...book", *p, *ss;
    ss = separate(s, '.', &p);
    printf("%s\n%s\n", ss, p);
    return 0;
}
601デフォルトの名無しさん:2007/06/21(木) 17:31:02
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):15パズルを作る。細かい条件はhttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4315.txt
[3] 環境
 [3.1] OS: Windows XP
 [3.2] コンパイラ名とバージョン: Microsoft.NET Framework SDK
 [3.3] 言語:C
[4] 期限: 6月23日(土)
[5] その他の制限:C言語については情報系の高校卒業+α程度の知識くらいしかないので、
なるべく基本的な命令(printf・scanf・if・while等)を多めでお願いします。
コメントで簡単な注釈をつけていただけると助かります。
602454:2007/06/21(木) 17:33:31

[1] 授業単元:プログラミング演習
[2] 問題文(含コード&リンク):
注釈文に従って、空白の部分にコマンドを追加して、ハフマン符号化のプログラムを完成させよ。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4316.txt
[3] 環境
 [3.1] OS: XP
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 明日

464さんにやってもらったんですが、うまく動作しませんでした。
課題部分をお願いします
603デフォルトの名無しさん:2007/06/21(木) 17:38:47
>>598さん
すみませんホントにわかんないんですorz
>>599さん
お手数おかけしましたやってみます
604デフォルトの名無しさん:2007/06/21(木) 17:40:22
>583
ありがとうございます〜

もう一問ありました(汗)
問題は一緒なのですが・・
[1] 授業単元:待ち行列
[2] 問題文(含コード&リンク):
 N 人の人がいて,それらは番号 0, 1, 2, ..., N-1 で表されているとする。
この N 人の人間関係(知り合いかどうか)を表した配列 a[N][N] がある。
ただし, i 番目の人と j 番目の人とが知り合いであるとき a[i][j] == a[j][i] == 1 であり,知り合いでないとき a[i][j] == a[j][i] == 0 である。
このとき, x 番目の人から,知り合いの知り合いの知り合い.... という繋がりで, y 番目の人まで辿り着くには,最小で何回の知り合いという関係が必要か,を返す関数 int acquaintDistance(int a[N][N], int x, int y) を作れ。
なお,x 番目の人から y 番目の人に辿り着けない場合には,acquaintDistance は -1 を返すこととする。
関数名の acquaint は知り合いにさせる, distance は距離という意味である。
ヒント:待ち行列を利用する。最初に x を待ち行列に入れ,
後は,「待ち列から一つ dequeue して,その人の知り合いを待ち行列に enqueue する」
ということを繰り返す。ただし,一度 enqueue した人は二度と enqueue しないようにし, y を enqueue する時点あるいは enqueue する一がいなくなった時点で,終了する。
x から各人までの知り合い距離を入れる配列も用意しておき,新しい人を enqueue する度に,その人までの距離をその配列に入れる。
[3] 環境
 [3.1] OS:Vine LINUX
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限:2007年6月28日10時45分まで
[5] その他の制限:こちらも、どうかよろしくお願いします。


605デフォルトの名無しさん:2007/06/21(木) 17:40:53
>>599
> int n;
こんなところに罠が
606デフォルトの名無しさん:2007/06/21(木) 17:42:09
>>604
すまん、どこがさっきの問題と違うんだ?
607デフォルトの名無しさん:2007/06/21(木) 17:45:12
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
float 型の大きさ 2 x 2 の行列 A の各要素を実行時に受け取り、
サブルーチンで A の逆行列を求めて表示せよ。
但し、逆行列がない時は、その旨を表示して強制終了せよ。
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語:C
[4] 期限:22日のPM5:00まで
[5] その他の制限:
特にありません
よろしくお願いします
608デフォルトの名無しさん:2007/06/21(木) 17:47:28
>>605
突っ込んじゃいや〜〜〜〜 ><;
609デフォルトの名無しさん:2007/06/21(木) 17:52:30
610デフォルトの名無しさん:2007/06/21(木) 17:53:51
>606
すみません、

・int enqueue(data_t enq_data) の仕様
data_t 型の enq_data を引数にとり,それを待ち行列に追加し,戻り値として SUCCESS を返す。
ただし,待ち行列が満杯であるときには追加せずに,戻り値として FAILURE を返す。

・int dequeue(data_t *deq_data) の仕様
待ち行列が空でなければ、それからデータを一つ取り出し,
その値を *deq_data に代入し、queue_num は1減じ, queue_head は1つ進めて、SUCCESS を戻り値として返す。
ただし,待ち行列が空のときは,戻り値として FAILURE を返す他は、何もしない。

・void queuePrint()


これらの関数を使わないといけないみたいです(汗)
611デフォルトの名無しさん:2007/06/21(木) 18:27:42
612デフォルトの名無しさん:2007/06/21(木) 18:30:10
[1] 授業単元:プログラミング基礎
[2] 問題文(含コード&リンク):
以前角谷予想プログラムの「偶数なら2で割る,奇数なら3倍して1を足す」という部分を関数化した.
さらにその関数に,奇数処理,偶数処理を実行した回数をカウントする部分と,その処理回数を表示させる部分を追加し,実行結果の様に表示させるようプログラムを変更せよ.

まず,関数の機能に次の2つを追加し,入力される数値 x によって関数の機能を切り換えるようにする

* x > 0 ならば,今までと同じ処理と処理回数のカウントを奇数偶数それぞれ行う
* x = 0 ならば,実行結果の様に奇数処理,偶数処理をした回数を表示する

このようにすれば,main関数の最後の方で kakutani(0); で呼び出し,処理回数を表示させる事が出来る.
[3] 環境
 [3.1] OS: マッキン
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 2007年06月22日10:00まで

期限があれですがお願いしますm∀`)シ
613デフォルトの名無しさん:2007/06/21(木) 18:43:43
>>520お願いします
614デフォルトの名無しさん:2007/06/21(木) 18:47:26
>>613
> [3] VB6.0
これが気になる。
615デフォルトの名無しさん:2007/06/21(木) 18:51:20
Virtual Boy ?
616デフォルトの名無しさん:2007/06/21(木) 18:55:10
#include <stdio.h>

int main (void)
{
int j, h;
int a[3];
int *ptr;
ptr=&a[0];

printf("配列a[]の要素を順に3つ入力してください.\n");

for(j=0; j<3; j++){
scanf("%d", &a[j]);
}
for(h=0; h<3; h++){
printf("%d,%d\n",ptr+h,*(ptr+h));
}
return 0;
}
617デフォルトの名無しさん:2007/06/21(木) 18:55:48
>>599さん
>>575です。
#include <stdio.h>

long fibo(long x) {
if(x<=2) return 1;
else return fibo(x-1) + fibo(x-2);
}

int main(void) {
int n;
printf("整数を入力してください:");
scanf("%ld",&n);
printf("Fibonacci(%ld)=%ld",n,fibo(n));
return 0;
}

でやってみたんですが、整数6を入力すると8がでてきてしまいます
あと、連続してでてくるようにするにはどうすればいいのでしょうか
618デフォルトの名無しさん:2007/06/21(木) 18:59:09
>>617
>>579
っつか、前に出てた奴と同じ学校?連続してやるなら
main の中に for 分を使って fibo(i) とでもして連続して値をやったら?
っつか、順に求めるならなおさら再帰なんて効率の悪いやり方だな・・・
619588:2007/06/21(木) 19:24:18
>>588
510のプログラムを試してみたのですがx=search("international","nat")にすると
"nternational"が返ってきてしまいます。この場合はどうしたらいいでしょうか。

>>591
>>600
詳細が細かくて申し訳ないのですがmallocを使った関数で御願いします。

注文が多くてすみません。
620デフォルトの名無しさん:2007/06/21(木) 19:57:37
621デフォルトの名無しさん:2007/06/21(木) 20:00:07
[1] 授業単元:人工知能
[2] 問題文(含コード&リンク):反復深化探索で8パズルを解くツリーを作る
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc 3.4
 [3.3] 言語: C言語
[4] 期限: 2007年06月22日10:00まで
[5] その他の制限: 特になし
622デフォルトの名無しさん:2007/06/21(木) 20:11:51
>>619
#include <stdio.h>
int startwith(char *s, char *t)
{
    if (!t[0]) return 1;
    if (s[0] != t[0]) return 0;
    return startwith(s + 1, t + 1);
}
char *search(char* s, char* p)
{
    if (!s[0]) return 0;
    if (startwith(s, p)) return s;
    return search(s + 1, p);
}

int main(void)
{
    char s1[256], s2[256], *s;
    while (scanf("%s %s", s1, s2) == 2)
        printf("%s\n", (s = search(s1, s2)) ? s : "NULL");
    return 0;
}
623みまつや:2007/06/21(木) 20:38:58
[1] 授業単元:C言語
[2] 問題文(含コード&リンク):二点間の描写(配列ではなくポインタを使うこと)
[3] 環境
 [3.1] OS: windows 
[3.2] コンパイラ名とバージョン: visual C++
 [3.3] 言語: C言語
[4] 期限 6月25日
[5] その他の制限: 特になし

※問題の詳しい内容は下記の通りです。
与えられた二点をつなげて線を引く

入力 X画素: x_size
X画素: y_size
X始点: x1
Y始点: y1
X終点: x2
Y終点: y2

出力 画素分のデータベース *img



624みまつや:2007/06/21(木) 20:39:38
続き<例> x_size = 10
y_size = 10
x1 = 0
y1 = 0
x2 = 9
y2 = 9

実行結果(img)
1 0 0 0 0 0 0 0 0
0 1 0 0 0 0 0 0 0
0 0 1 0 0 0 0 0 0
0 0 0 1 0 0 0 0 0
0 0 0 0 1 0 0 0 0
0 0 0 0 0 1 0 0 0
0 0 0 0 0 0 1 0 0
0 0 0 0 0 0 0 1 0
0 0 0 0 0 0 0 0 1
625602:2007/06/21(木) 20:46:29
602をお願いします
626デフォルトの名無しさん:2007/06/21(木) 20:46:34
>>624
9*9なのはタイプミス?
627デフォルトの名無しさん:2007/06/21(木) 21:08:36
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
文字列配列 *a[10] を 10 個の英単語で最初に初期化し、サブルーチンで、
10 個の中で辞書的に一番遅く現れる文字列を表示せよ.
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語:C
[4] 期限:22日のPM6:00まで
[5] その他の制限:
文字列の比較 strcmpという関数を使うこと.
よろしくお願いします
628みまつや:2007/06/21(木) 21:09:07
>>626

失礼しました(汗)ご指摘の通り10*10でお願いします。


1 0 0 0 0 0 0 0 0 0
0 1 0 0 0 0 0 0 0 0
0 0 1 0 0 0 0 0 0 0
0 0 0 1 0 0 0 0 0 0
0 0 0 0 1 0 0 0 0 0
0 0 0 0 0 1 0 0 0 0
0 0 0 0 0 0 1 0 0 0
0 0 0 0 0 0 0 1 0 0
0 0 0 0 0 0 0 0 1 0
0 0 0 0 0 0 0 0 0 1
629デフォルトの名無しさん:2007/06/21(木) 22:15:02
630デフォルトの名無しさん:2007/06/21(木) 22:18:08
>>337
遅れてすみません。
助かりました。
ありがとうございます。
631デフォルトの名無しさん:2007/06/21(木) 22:32:56
>>627
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
int compare(const char *s, const char *t)
{
    char *ss, *tt, *p, *q;;
    int n;
    ss = p = malloc(strlen(s)+1);
    tt = q = malloc(strlen(t)+1);
    while (*p++ = tolower(*(unsigned char*)s++)) {}
    while (*q++ = tolower(*(unsigned char*)t++)) {}
    n = strcmp(ss, tt);
    free(ss);
    free(tt);
    return n;
}
int main(void)
{
    char *a[10] = {
        "banana", "aPple", "pEach", "orAnge", "lemOn",
        "meloN", "mango", "STrawberry", "raSpberry", "peaR"
    };
    char *last = a[0];
    int i;
    for (i = 1; i < sizeof(a)/sizeof(a[0]); ++i)
        if (compare(last, a[i]) < 0)
            last = a[i];
    puts(last);
    return 0;
}
632デフォルトの名無しさん:2007/06/21(木) 22:43:38
[1] 授業単元: C
[2] 問題文(含コード&リンク): http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4324.txt
[3] 環境
 [3.1] OS: (Windows)
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語:C
[4] 期限: 6月22日まで
[5] その他の制限:ダブルポインタまで習っています。
633デフォルトの名無しさん:2007/06/21(木) 23:01:58
>>632
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
int cmp(const void *a, const void *b) {
    return strcmp(*(char**)a, *(char**)b);
}
int main(int argc, char **argv) {
    int i;
    char **av, *s, *t;
    if (argc < 3) {
        fprintf(stderr, "usage : %s string1 string2 [string3....]\n", argv[0]);
        return 1;
    }
    av = malloc(sizeof(char*) * (argc - 1));
    for (i = 0; i < argc - 1; ++i) {
        av[i] = malloc(strlen(argv[i + 1]));
        s = av[i], t = argv[i + 1];
        while (*s++ = toupper(*(unsigned char*)t++)) {}
    }
    qsort(av, argc - 1, sizeof(char*), cmp);
    puts("** before **");
    for (i = 1; i < argc; ++i)
        puts(argv[i]);
    for (i = 0; i < argc - 1; ++i)
        puts(av[i]);
    return 0;
}
634デフォルトの名無しさん:2007/06/21(木) 23:04:11
↓すまん、この1行追加
    puts("** after **");
for (i = 0; i < argc - 1; ++i)
puts(av[i]);
return 0;
}
635みまつや:2007/06/21(木) 23:05:58
>>629

ありがとうございます。助かりました。
一点質問があるのですが、例のような10*10で表示するには
#define X 80
#define Y 24
の部分の値を変えてあげればいいんでしょうか?
636デフォルトの名無しさん:2007/06/21(木) 23:06:33
>>635
うん
637デフォルトの名無しさん:2007/06/21(木) 23:08:04
>>632
#include <stdio.h>
#include <ctype.h>
#include <stdlib.h>
int cmp(const void *a, const void *b){
  return *(unsigned char*)a - *(unsigned char*)b;
}
int main(int argc, char **argv){
  if(argc<2){
    printf("usage : program string1 string2 [string3....]\n");
    return 1;
  }else{
    int i;
    for(i=1; i<argc; i++){
      unsigned char *p,*q;
      p = q  = argv[i];
      for(; *p; p++) if(islower(*p)) *p = toupper(*p);
      qsort(q, p-q, sizeof(*p), cmp);
      for(;*q;q++) putchar(*q);
      putchar('\n');
    }
  }
  return 0;
}

しーらないっと
638デフォルトの名無しさん:2007/06/21(木) 23:10:11
>>631
ありがとうございました。
ただ申し訳ないのですが、内容があまりにも高度過ぎてわかりませんでした・・・。
上5行のうち習ったのは#include<stdio.h>だけですのでこれのみ使用した場合の
解答方をお願いします。
639デフォルトの名無しさん:2007/06/21(木) 23:12:33
開発者が一目置くのはハッカーだが、顧客が信頼するのはエスパー
640602:2007/06/21(木) 23:13:16
締め切りが近いのでお願いします・・・・
641デフォルトの名無しさん:2007/06/21(木) 23:13:28
>>639
>>627では strcmp() を使えとあるが、
strcmp()は stdio.h ではなく string.h の関数だよ。
642637:2007/06/21(木) 23:14:54
ごめん、題意まちがってた
643641:2007/06/21(木) 23:15:56
安価間違えた
>>639 ではなく >>638 へのレスね。
644デフォルトの名無しさん:2007/06/21(木) 23:21:25
申し訳ないです。
それでは#include <stdio.h>と#include <string.h>のふたつを使った場合の解答法
を教えてください。
645641:2007/06/21(木) 23:28:56
>>644
おれはめんどうくさいからやだ。他の人に期待して。

一応説明しとくと、辞書順比較を行えという問題なのに
strcmp()で文字コード順比較させるのがこの問題のいやなところ。
>>631があんなに子汚いのはそのため。
646デフォルトの名無しさん:2007/06/21(木) 23:32:29
>>64
御迷惑をおかけしました
647633:2007/06/21(木) 23:36:32
すまん別のバグ発見したんで貼りなおし。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
int cmp(const void *a, const void *b) {
    return strcmp(*(char**)a, *(char**)b);
}
int main(int argc, char **argv) {
    int i;
    char **av, *s, *t;
    if (argc < 3) {
        fprintf(stderr, "usage : %s string1 string2 [string3....]\n", argv[0]);
        return 1;
    }
    av = malloc(sizeof(char*) * (argc - 1));
    for (i = 0; i < argc - 1; ++i) {
        av[i] = malloc(strlen(argv[i + 1]) + 1); /* modified */
        s = av[i], t = argv[i + 1];
        while (*s++ = toupper(*(unsigned char*)t++)) {}
    }
    qsort(av, argc - 1, sizeof(char*), cmp);
    puts("** before **");
    for (i = 1; i < argc; ++i)   
        puts(argv[i]);
    puts("** after **"); /* modified */
    for (i = 0; i < argc - 1; ++i)
        puts(av[i]);
    return 0;
}
648641:2007/06/21(木) 23:37:30
>>646
ドンマイ
649デフォルトの名無しさん:2007/06/21(木) 23:44:28
>>644
#include <stdio.h>
#include <string.h>
void insert(char **start, char **end, char **data){
  char **p = start;
  *end = *data;
  while(start<end && 0<strcmp(*(end-1), *end)){
    char *tmp=*end; *end=*(end-1);*(end-1)=tmp; end--;
  }
}
void to_up_str(char *s){
  while(*s){
    if(*s>='a'&&*s<='z') *s+='A'-'a';
    s++;
  }
}
int main(int argc, char **argv){
  if(argc<3){ printf("usage : program string1 string2 [string3....]\n"); return 1;}
  else{
    int i;
    char *buf[30000] ={argv[1], }, **end = buf+1;
    to_up_str(argv[1]);
    for(i=2; i<argc; i++){
      to_up_str(argv[i]);
      insert(buf, end, &argv[i]); end++;
    }
    for(i=0; buf[i]; i++) puts(buf[i]);
  }
  return 0;
}
cygwinなら平気。
650sage:2007/06/21(木) 23:48:55
>>649
ありがとうございます。助かりました。
651デフォルトの名無しさん:2007/06/21(木) 23:55:08
ある意味 >>649 のほうが高度なんだがなw
652デフォルトの名無しさん:2007/06/21(木) 23:56:26
標準ライブラリにあるならそれを使ったほうが高度じゃね?
653デフォルトの名無しさん:2007/06/21(木) 23:57:14
>>645
strcmp って辞書順比較じゃなかったっけ?
654デフォルトの名無しさん:2007/06/22(金) 00:00:02
ttp://www.bohyoh.com/CandCPP/C/Library/strcmp.html
大文字小文字の違いはもちろん別物とされる
655641:2007/06/22(金) 00:00:03
>>653
strcmp()で比較すると、Zがaより前になっちゃうよ。
656デフォルトの名無しさん:2007/06/22(金) 00:00:58
>>651
高度というかdirty hackだよな。
良い子は真似しちゃいけないコード。
657デフォルトの名無しさん:2007/06/22(金) 00:02:26
>>654-655
あー、そーゆうことか。

>>632 は小文字を大文字にしてから比較なんで、'A'-'Z'という限定条件で考えてた。
658シャノン:2007/06/22(金) 00:03:39

[1] 授業単元:情報論
[2] 問題文(含コード&リンク):• 起動させると,同じディレクトリにある圧縮前のファイル「srcdata.txt」を読み込み,
Shannon符号を用いて圧縮を行い,符号化結果を「encoded.txt」
というファイル名で書き出す.
• 次に,この「encoded.txt」ファイルを読み込んで,解凍処理を行い,復号結果を
「decoded.txt」というファイル名で書き出し,終了する.
• 圧縮対象のファイルはテキストファイルとし,出現する可能性のある文字は,a, b, c, d,
e, f, g, h, i, j, k, l, m, n, o, p の16文字の内の何れかである.ファイルの長さはまちまち
で,一行だけである.
• 圧縮されたファイルもテキストファイルとし,先頭の16行は,各文字に対する符号を
「0」,「1」を使って一行に一つずつ書く(符号を割り当てない場合は「-」を書く).
17行目に符号化された0,1系列を一行で書く.
• 解凍されたファイルは,元の圧縮対象ファイルと同じになるように作る.
なお、途中まで完成している。そのプログラムは次に書き込みます。
以下のプログラムの関数void Encodeとvoid Decodeを完成かさせていただきたいです(><)
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名gcc 3.4
 [3.3] 言語: C、C++,C#いずれでも可
[4] 期限: ([2007年6月23日23:59まで]
[5] その他の制限:標準ライブラリは使ってはいけない.
手法を考えてもその部分だけは実現には到りませんでした。。。
よろしくお願いします。


659デフォルトの名無しさん:2007/06/22(金) 00:05:11
ところで>>627>>632はとても類似した問題だが、
>>627 = >>632だったの?
>>649って>>632の別解だけど、別解ほしがってたのは>>627じゃなかった?
660649:2007/06/22(金) 00:10:19
すまん、俺が間違えた。
これは、644の回答じゃない。
661デフォルトの名無しさん:2007/06/22(金) 00:29:34
>>658
標準ライブラリを使うなってwwww
662デフォルトの名無しさん:2007/06/22(金) 00:30:24
>>658
C#でやったら泣きそうだなw
663デフォルトの名無しさん:2007/06/22(金) 00:33:48
突っ込みどころ満載だなw
Linux & gccでC#はねぇだろうし、そもそもスレチだから
そのオプションは見なかったことにして

まぁ例によって標準ライブラリ「以外」を使えばいいんじゃね
664デフォルトの名無しさん:2007/06/22(金) 01:00:59
[1] 授業単元:C言語
[2] 問題文:以下のプログラムを書き換え、ファイル名をコマンドラインか
ら指定できるようにせよ。ソースプログラムを書き込んで提出せよ。

#include<stdio.h>
#include<stdlib.h>
int main(void){
char c;
char filenaime[]="data.txt";
FILE *fp;
if((fp=fopen(filenaime,"r"))==NULL){
printf("File does not exist.\n");
exit(1);
}
while((c=getc(fp)) !=EOF){
printf("%c\n",c);
}
fclose(fp);
}


[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限: 2007年06月23日まで
[5] その他の制限:特にないと思います。

タイプミスしていたら教えてください
665デフォルトの名無しさん:2007/06/22(金) 01:05:11
>>664 変更部分だけ

int main(int argc, char *argv[]) {
char c;
FILE *fp;
if(argc<2) {
printf("ファイル名の指定がねぇ〜ぞゴルァ!\nよって終了、二度と実行すんなよ\n");
return 1;
}
if((fp=fopen(argv[1],"r"))==NULL){
666デフォルトの名無しさん:2007/06/22(金) 01:11:57
C#でもコンソール出力なら楽じゃね?
GUIもエディタ備えているからDelphi並み(ヘジたん作だしな)の楽さだし
667658シャノン:2007/06/22(金) 01:12:34
http://www.eb.waseda.ac.jp/m_inoue/info/compress.c
↑ここに途中完成プログラムがあります。よろしくお願いしますm(..)m
668デフォルトの名無しさん:2007/06/22(金) 01:15:16
ここであえてC++で書いてやるのも一興かもな
669デフォルトの名無しさん:2007/06/22(金) 02:01:57
[1] 授業単元:繰り返し
[2] 問題文(含コード&リンク):(´・ω・`)
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン: Borland
 [3.3] 言語: C
[4] 期限: 無期限
670デフォルトの名無しさん:2007/06/22(金) 02:04:18
(´・ω・`)(´・ω・`)
671デフォルトの名無しさん:2007/06/22(金) 02:08:03
>>669
#include <stdio.h>
int main(void) { for(;;) puts("(´・ω・`)"); return 0; }
672デフォルトの名無しさん:2007/06/22(金) 02:46:15
[1] 授業単元: プログラミング基礎
[2] 問題文(含コード&リンク):
n乗の数を求める関数を、作成しなさい。
・n乗値を求める関数
n乗値
数字iのn乗値を返す関数
関数定義 double myPow(double i, int n)
例1:i=1.2,n=3の場合,1.728になる
例2:i=1.2,n=-3の場合,0.5787[037]になる
例3:i=1.2,n=0の場合,1.0になる

正,0,負の3つの場合があることに注意

[3]
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:Microsoft Visual Studio .NET 2003
 [3.3] 言語:C++
[4] 期限:2007年6月22日14時
[5] その他の制限:出来るだけ簡単(初歩的)にすること。

よろしくおねがいします。
673デフォルトの名無しさん:2007/06/22(金) 02:50:59
[1] 授業単元:C言語
[2] 問題文以下のプログラムから
名前を5個入力して一番長い名前を出力するプログラムを作れ。
#define NAME_NUMBER 5
#define NAME_LENGTH 10

int main(void){
int i,j;
char name_list[NAME_NUMBER][NAME_LENGTH];

for(i=0;i<NAME_NUMBER;i++){
printf("名前[%d]=",i);
scanf("%s",name_list[i]);
}

for(i=0;i<NAME_NUMBER;i++){
printf("%s\n",name_list[i]);
}
for(i=0;i<=4;i++){
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン: C++
 [3.3] 言語:C
[4] 期限:22日のPM4:30まで
[5] その他の制限: for文で作れとのこと

宜しくお願いします。
674デフォルトの名無しさん:2007/06/22(金) 03:32:37
>>672
桁精度とかまったく考慮してないけども。

double hoge(double d, int n){
  double ret = 1.0;
  int i;

  if(n == 0)
    return ret;

  if(n < 0){
    for(i = 0; i < -n; i++)
      ret /= d;
    return ret;
  } else {
   for(i = 0; i < n; i++)
     ret *= d;
   return ret;
  }
}

int main(){
  printf("%f\n", hoge(1.2, 3));
  printf("%f\n", hoge(1.2, -3));
  printf("%f\n", hoge(1.2, 0));

  return 0;
}
675デフォルトの名無しさん:2007/06/22(金) 03:38:29
[1] 授業単元:プログラミング言語
[2] 問題文
個人データを格納する表を作成し,入力された学生番号に該当する個人データを表示するプログラムを作成せよ
個人データは次のフィールドからなる構造体として定義する
- 学生番号(文字列(数字列))
- 姓(文字列)
- 名前(文字列)
- 性別(数字) 0 男 1 女
(個人データは構造体変数の初期設定を用いる)
(データの人数は3人程度でいいらしいです)

• 表は配列として定義する
• 入力した学生番号に該当したデータが無い場合は、not found と表示する
• 学生番号の入力を繰り返して行うようにする.
• 入力の終了はEOFの検出,あるいは学生番号が0を入力した時とする

[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン: Microsoft Visual Studio 2005
 [3.3] 言語:C++
[4] 期限:22日のAM9:00まで
[5] その他の制限:

期限まで時間が無さすぎるので無理だとは思っていますが、出来る方いたらお願いします
676デフォルトの名無しさん:2007/06/22(金) 04:05:38
>>673
「一番長い名前」の説明が不十分(同じ長さがあった場合とか)なんで
同じ長さのがあった場合は、前に入力された方を優先する感じで。

int main(){
  int i;
  char name_list[NAME_NUMBER][NAME_LENGTH];

  int maxLen = -1;
  int maxIdx = 0;

  for(i = 0; i < NAME_NUMBER; i++){
    printf("名前[%d]=", i);
    scanf("%s", name_list[i]);
  }

  for(i = 0; i < NAME_NUMBER; i++){
    int len = strlen(name_list[i]);
    if(maxLen < len){
      maxLen = len;
      maxIdx = i;
    }
  }

  printf("最長 --> %d番目 : %s\n", maxIdx, name_list[maxIdx]);

  return 0;
}
677デフォルトの名無しさん:2007/06/22(金) 04:06:35
改行多すぎでエラー出たんで切り分けた
>>676の頭にコレ↓追加で

#include <stdio.h>
#include <string.h>

#define NAME_NUMBER 5
#define NAME_LENGTH 10
678デフォルトの名無しさん:2007/06/22(金) 04:29:21
>>675
間に合うかわからんが今gccで作ってる
ちっと待っとれ
679675:2007/06/22(金) 04:45:53
>>678
間に合うか否かは関係なく感謝です
gccですか、初めて聞いたので調べてみましたが
C++用に作ればC++で動作するらしいですね
では待ってます
680678-1:2007/06/22(金) 05:08:55
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

// マクロ
#define MAX_SIZE 32
#define DATA_MAX 4
#ifndef EOF
#define EOF -1
#endif

//===================================================================================
// 定数・構造体定義
//===================================================================================
typedef enum {
male,
female,
unknown
} SEX;

typedef struct _tagPerson {
char id[MAX_SIZE]; // 学籍番号
char lastName[MAX_SIZE]; // 苗字
char firstName[MAX_SIZE]; // 名前
SEX sex; // 性別
} Person;
//===================================================================================
681678-2:2007/06/22(金) 05:10:56
//===================================================================================
// 広域変数
//===================================================================================
// 個人データ初期化
Person students[DATA_MAX] = {
{"00000001", "lastname1", "firstname1", 0},
{"00000002", "lastname2", "firstname2", 1},
{"00000003", "lastname3", "firstname3", 1},
{"00000004", "lastname4", "firstname4", 0},
};
//===================================================================================


/**
* idからデータを検索
* @return -1 該当データなし
* [else] 該当データのインデックス
*/
int SearchData(char *id){
int i;
for(i = 0; i < DATA_MAX; i++){
printf("%s %s\n", id, students[i].id);
if(!strcmp(students[i].id, id))
return i;
}

return -1;
}
682678-3:2007/06/22(金) 05:12:59
int main(){
char buf[MAX_SIZE];

// EOF(-1)入力まで繰り返し
while(1){
int idx = -1;
char* p = NULL;

// 標準入力からID読み込み
printf("Input ID? ");
fgets(buf, MAX_SIZE, stdin);
p = strchr(buf, '\n'); // 末尾の改行文字検索
if (p != NULL) {
*p = '\0'; // 改行文字を終端文字に置き換え
}

if(atoi(buf) == EOF) // EOF(-1)チェック
break;
683678-4:2007/06/22(金) 05:14:09
// ID探索
idx = SearchData(buf);
if(idx == -1){
printf("data not found\n");
} else {
printf("ID : %s\n姓 : %s\n名 : %s\n性別 : %s\n",
students[idx].id,
students[idx].lastName,
students[idx].firstName,
(students[idx].sex == male) ? "男" : ((students[idx].sex == female) ? "女" : "不明"));
}
printf("\n");
}

return 0;
}
684678:2007/06/22(金) 05:19:25
インデントがひどいことに…
とりあえず1〜4まで一つにつなげればいけると思う
一応手元のVS2005で動作確認

急いで作ったんでかなり雑ですげぇ適当だけどこれで勘弁してくだしあ

というか、データテーブルの規定がなかったんで
思いっきりグローバル変数でやっちまったけどこれでいいのだろうか

ついでに結果の性別表示のところかなり強引だけど、まぁその辺はご愛嬌ってコトでひとつ
685678:2007/06/22(金) 05:32:47
あ、SearchData()の中のコレ↓削っといて
printf("%s %s\n", id, students[i].id);
デバッグ表示消し忘れた

あと純粋に0が入力された時の処理入れ忘れた
atoi()で数字以外が渡されると0が返ってきちゃうんで
今のままだと0入れても終わらないから気をつけて
686675:2007/06/22(金) 05:49:22
わざわざこんな時間にありがとうございました
コメントもあるし理解できるので大丈夫です
じっくりと吟味させていただきます
グローバル変数も性別も特に問題無いです

ここまでやってもらっただけでも十分なので
0入れても終わらないのは自分で改良しておきます

お疲れ様でした
687588:2007/06/22(金) 05:49:27
>>620
>>622

ありがとうございました。注文多かったのに…感謝ですm(_ _)m
688デフォルトの名無しさん:2007/06/22(金) 05:56:21
>>677
ありがとうございました。説明不足な点、申し訳ないです;
689602:2007/06/22(金) 08:54:57
602を御願いいたします。
690490:2007/06/22(金) 09:10:56
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):
 次に示す関数a,bの値を入力してxの値を0.00から3.14まで0.01間隔で計算して出力するプログラムを作成せよ。
 ただし以下に示した関数として定義すること。f(x)=exp(ax)×sinbx
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン:VC 6.0
 [3.3] 言語: C++
[4] 期限: 2007年7月6日AM8:30まで

>>493
関数a,bはf(x)に入っているa,bのことです。
お願いします。


691デフォルトの名無しさん:2007/06/22(金) 09:54:07
C++じゃなければ暇だからやってるのに…
692デフォルトの名無しさん:2007/06/22(金) 10:11:44
>>690
#include <cstdio>
#include <cmath>
struct F {
    F(double a_, double b_) : a(a_), b(b_) {}
    double operator()(double x) { return std::exp(a * x) * std::sin(b * x); }
    double a, b;
};
int main() {
    double a, b;
    if (std::scanf("%lf %lf", &a, &b) == 2) {
        F f(a, b);
        for (double x = 0; x <= 314; ++x)
            std::printf("f(%.2f) = %g\n", x/100, f(x/100));
    }
    return 0;
}
693デフォルトの名無しさん:2007/06/22(金) 10:51:37
[1] プログラミング
[2] 通常の数式(3*5-2/9等)を、逆ポーランド表記法へと変換するプログラムを作成せよ。
[3] 環境 
 [3.1] WindowsXP professional 
 [3.2] Borland C++Compiler 5.5
 [3.3] C言語 
[4] 期限: できれば土日
[5] その他の制限: 構造体はまだ習っていない。配列に格納せよとの事。
俺には難易度高すぎる・・・。
694デフォルトの名無しさん:2007/06/22(金) 10:53:37
695再帰:2007/06/22(金) 11:20:35
[1] 授業単元:C言語演習
[2] 問題文(含コード&リンク):
入力:8個の異なる値の整数データ
操作:集合Sのデータ数が2以上のときは、
データをデータ数が等しい二つの集合S1,S2に分割、集合S1について最大値M1と最小値m1を求める(再帰呼び出し)。
集合S2についても同様。
最大値M1,M2の大きい方を集合Sの最大値Mとし、
最小値m1,m2の小さい方を集合Sの最小値mとしてリターン(帰る)。
出力:8個の異なる値の整数データの最大値と最小値を出力。
696再帰:2007/06/22(金) 11:22:33
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限:できるだけ早くお願いします
[5] その他の制限:なるべく簡単な構造で構成してもらいたいです。
また標準ライブラリは使わないでお願いします。
携帯からすいません。
697デフォルトの名無しさん:2007/06/22(金) 11:31:02
>>695
>操作:集合Sのデータ数が2以上のときは、
「2より大きい」で良いんだよな?

>また標準ライブラリは使わないでお願いします
数値の入力と出力は何を使えばいいんだ?
698再帰:2007/06/22(金) 11:42:08
入出力はstdio.hです。
scanfで整数の入力を行ってください。
他にもstdlib.hやmath.hも必要であれば使ってください。
655、656は標準ライブラリが何かを知らずに書いてしまいました。
すいません。
699デフォルトの名無しさん:2007/06/22(金) 11:48:51
>>695
出来たけど、携帯でソース見るのつらくねぇ?

#include <stdio.h>
void func(int *s, int size, int *min, int *max)
{
int min1,min2,max1,max2;
if(size == 1){
*min = *max = s[0];
return;
}
func(s, size/2, &min1, &max1);
func(s+size/2, size - size/2, &min2, &max2);
if(min1 < min2) *min = min1;
else *min = min2;
if(max1 > max2) *max = max1;
else *max = max2;
}
int main()
{
int i,min, max, s[8];
for(i=0;i<8;i++){
printf("%d個目の数値を入力:",i);
if(scanf("%d", &s[i]) != 1){
printf("数値じゃないです\n");
return 0;
}
}
func(s,8,&min,&max);
printf("min = %d, max = %d\n", min, max);
return 1;
}
700デフォルトの名無しさん:2007/06/22(金) 11:53:51
あ、すまん。
>>699で、8個の数字全部出力するところ、書き忘れてるわ。
そこは自分で頑張って。
701デフォルトの名無しさん:2007/06/22(金) 12:03:18
>>693
#include <stdio.h>
#include <string.h>
int main(int argc, char **argv)
{
    int c, cc, sp = 0, stack[0x100];
    const char *op = "()+-*/^", *p;
    if (argc < 2)
        return fprintf(stderr, "usage: %s InfixExpression\n", argv[0]), 1;
    while (c = *(unsigned char*)argv[1]++) {
        if ((p = strchr(op, c)) == NULL) putchar(c);
        else if (c == '(') stack[sp++] = c;
        else if (c == ')') {
            while (sp > 0 && (cc = stack[--sp]) != '(')
                putchar(cc);
        }
        else {
            if (!sp || p > strchr(op, stack[sp-1])) stack[sp++] = c;
            else {
                do { putchar(stack[--sp]); }
                while (p <= strchr(op, stack[sp-1]));
                stack[sp++] = c;
            }
        }
    }
    while (sp > 0) putchar(stack[--sp]);
    putchar('\n');
    return 0;
}
702701:2007/06/22(金) 12:16:58
すまん。
do { putchar(stack[--sp]); }
- while (p <= strchr(op, stack[sp-1]));
stack[sp++] = c;
---↓のように修正------------------------------------------------
do { putchar(stack[--sp]); }
+ while (sp > 0 && p <= strchr(op, stack[sp-1]));
stack[sp++] = c;
703再帰:2007/06/22(金) 12:28:25
>>700

ご心配までかけてすいません。
ありがとうございます!
704デフォルトの名無しさん:2007/06/22(金) 13:25:23
>>625
>>464さんの回答で合っている。
動作しないとしたら、設問のバグじゃないのか?
705デフォルトの名無しさん:2007/06/22(金) 13:38:07
>>625
readfile()内の
 data[filelength++]=c;
 htnode[(int)c].freq++;

 data[filelength++]=(unsigned char)c;
 htnode[(unsigned char)c].freq++;
にしてみ。
706デフォルトの名無しさん:2007/06/22(金) 13:39:14
[1] 授業単元:プログラミング1
[2] 問題文(含コード&リンク):市販されている電卓のように、複数項の足し算、引き算、掛け算、割り算、さらにメモリ機能のある電卓プログラムを作成しなさい。
また作成した電卓プログラムの仕様についても明記すること。
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名:gcc
 [3.3] 言語: C
[4] 期限: 6月25日
[5] その他の制限:比較的簡単な構造で。

自分でやってみたもの
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4328.c
↑これに対するコメントも頂けたら幸いです。

お願いします。
707デフォルトの名無しさん:2007/06/22(金) 13:40:06
[1] プログラミング言語
[2] 多倍長数を用いて√2を2000桁まで求めるプログラムを作成せよ
[3] 環境
 [3.1] windows
 [3.2] コンパイラは問わない
 [3.3] C++
[4] 6/22 17時
[5] http://www.elc.ees.saitama-u.ac.jp/ProgrammingI/kadai/kadai1.pdf
上記URL内の公式を使う事

切羽つまっています、お願いします。
708デフォルトの名無しさん:2007/06/22(金) 13:56:08
>>706
とりあえず、変な入力したらエラー吐いてそこでとまるようにしたほうがいいんじゃないの?
あと、説明ないから今何を入力すればいいか戸惑うからプロンプトとかも。
709デフォルトの名無しさん:2007/06/22(金) 13:56:46
[1] 授業単元:プログラミングA

[2] 問題文(含コード&リンク):
  10個の数が与えられたとき、その最大値を与える関数saidaiを
  作成し、関数mainで、10個の変数をキーボードから入力し、saidai
  を呼び出して最大値を求め、その最大値を関数mainで表示させよ。
  プロトタイプ、return文を用いよ。

[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: CC
 [3.3] 言語: C++

[4] 期限: 6月22日16時まで

[5] その他の制限:

よろしくお願いします。
710デフォルトの名無しさん:2007/06/22(金) 14:16:27
>>709
#include<stdio.h>
#define N 10
int saidai(int *array);

int main(void)
{
int i,array[N];
for(i=0;i<N;i++){
if(scanf("%d",&array[i])==0){
getchar();
i--;
}
}
printf("最大値は%dです。\n",saidai(array));
return 0;
}

int saidai(int *array)
{
int i,max=array[0];
for(i=1;i<N;i++)
if(max<array[i])
max=array[i];
return max;
}
711デフォルトの名無しさん:2007/06/22(金) 14:25:45
>>710
ありがとうございました。
712 ◆UoNQqijD4I :2007/06/22(金) 14:27:12
[1] 授業単元:プログラミング実習
[2] 問題文(含コード&リンク):4行3列の行列Aと3行4列の行列Bの異なる行列式のファイルを読み込み、
読み込んだ行列と、Aの転置行列、及びAの転置行列とBの行列との和を出力するプログラムを作成し、
ソースコードを提出すること。

注意)読み込むファイルはこちら側で用意しておきますので、
行列Aのファイル名を[kadai1.dat]、行列Bのファイル名を[kadai2.dat]という名前で提出すること。


[3] 環境
 [3.1] OS Linux
 [3.2] コンパイラ名とバージョン: gcc 3.4
 [3.3] 言語:(C
[4] 期限: ([2007年06月22日17:00まで]
[5] その他の制限:バイナリファイル、ポインタまで習いました。よろしくお願いします
713デフォルトの名無しさん:2007/06/22(金) 14:30:52
お願いします。以下

キーボードから順次入力された正の整数を0 が入力されるまで,配列に順番に格納し,入力
された(0 を除く)値の平均値(実数として扱うこと)に最も近い値(平均との差が最小と
なる値)が何番目に入力されたどういう値であるかを表示するプログラムを作成せよ.例え
ば,次のような実行例を想定している(下線部はキーボードからの入力を表す).
数字(1)を入力してください 2
数字(2)を入力してください 5
数字(3)を入力してください 3
数字(4)を入力してください 1
数字(5)を入力してください 0
入力された数字の平均は2.75 です.
これは,3 番目に入力された3 に最も近いです
714706:2007/06/22(金) 14:32:11
>>708
多少いじってみました。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4329.c
もう少しプログラムが完成したらいじってみようと思います。

掛け算実行すると" 00.000000"と出続けたりとか、
二つ目のscanfが実行されないなどの問題は残ったままです。どうすればいいのでしょうか。
715デフォルトの名無しさん:2007/06/22(金) 14:33:26
[1] 授業単元: C言語
[2] 問題文(含コード&リンク):ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4330.txt
[3] 環境
 [3.1] OS: Windows
 [3.2] BCC5.5
 [3.3] 言語: C
[4] 期限: 6/28
[5] その他の制限: とくになしです

よろしくお願いします
716 ◆UoNQqijD4I :2007/06/22(金) 14:51:13
>712です
#include <stdio.h>
#include <stdlib.h>

#define ROW 4
#define COLUMN 3

int main(void)
{
FILE *fp;
double a[ROW][COLUMN];
int i, j;
if ( (fp = fopen( "kadai1.dat", "r")) == NULL )
{ printf("ファイルが見つかりません : kadai.dat \n");
exit(1); }
printf("行列は次の通りです\n");
for( i = 0 ; i < ROW ; i++)
{
for( j =0 ; j < COLUMN ; j++)
{ fscanf(fp, "%lf", &a[i][j]);
printf("%5.2f\t", a[i][j]); }
printf("\n"); }
printf("転置行列は次の通りです\n");
for( j = 0 ; j < COLUMN ; j++)
{ for( i = 0 ; i < ROW ; i++)
{fscanf(fp, "%lf", &a[i][j]);
printf("%5.2f\t",a[i][j]); }
printf("\n"); }
fclose( fp );
return 0;
}
ここまでできたのですが、A転置行列をBの行列の和がわかりません…
717デフォルトの名無しさん:2007/06/22(金) 14:59:39
>>714
とりあえず、一部テストしたけど

%[+-*/]→%[+-*/]c
char sig→int sig
にした方がいいと思う。

あと、改行が残っててそれを2つ目のscanfで食って終わっちゃうんだろうと思うから
scanfのあとに空のgetchar仕込めば何とかなると思う。
718デフォルトの名無しさん:2007/06/22(金) 15:02:57
charをintの件は撤回
719デフォルトの名無しさん:2007/06/22(金) 15:07:15
っていうか、全文コピーしてやると全然動かねwww
改造するのめんどくさくなってきた。
720デフォルトの名無しさん:2007/06/22(金) 15:20:19
>>707
多少遅れても提出点貰いたいんで時間ある方お願いします
721 ◆UoNQqijD4I :2007/06/22(金) 15:24:37
>716
A転置行列「と」Bの行列の和です
誤字ですみません。。
722デフォルトの名無しさん:2007/06/22(金) 15:29:14
723デフォルトの名無しさん:2007/06/22(金) 15:37:30
やっぱ適当に何回か試したけど、%[+-*/]も%[+-*/]cも無理というか使わないほうがいい。
OSだかコンパイラだかどっちなんだか分からんがさっきから怒られるばかりだ。
n2の値も狂うし。
724デフォルトの名無しさん:2007/06/22(金) 15:38:14
今考えたら関数マクロ使う意味ねwww
まぁいいや。
725デフォルトの名無しさん:2007/06/22(金) 15:48:11
>>717,722,723
返信ありがとうございます。
>>722
改造してくださりありがとうございます。
あとで見てみようと思います。
726701:2007/06/22(金) 15:59:29
>>693
見直してみたら怪しすぎるので直した。出力も空白を入れるように修正。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4332.txt
727デフォルトの名無しさん:2007/06/22(金) 16:24:58
>>712
読み込むファイルのフォーマットがわからんから
宿題そのものじゃなくて行列を扱うユーティリティーみたいなの作った
今上げるからちょっと待ってな
728デフォルトの名無しさん:2007/06/22(金) 16:28:50
>>712
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4333.txt
転置までは作ったから行列の和は気合で何とかせい
729デフォルトの名無しさん:2007/06/22(金) 16:29:33
>>725 RPN電卓。>>726とパイプラインで接続すると普通の電卓になる。
#include <stdio.h>
#include <string.h>
#include <ctype.h>
int main(void)
{
    int c, sp = 0;
    double stack[0x100], x, y;
    while ((c = getchar()) != EOF) {
        if (c == '\n') {
            printf("%g\n", sp > 0 ? stack[--sp] : 0);
            sp = 0;
        } else if (isdigit(c)) {
            ungetc(c, stdin);
            scanf("%lf", &x);
            stack[sp++] = x;
        } else if (strchr("+-*/^", c) && sp >= 2) {
            x = stack[--sp], y = stack[--sp];
            if (c == '+') stack[sp++] = x + y;
            else if (c == '-') stack[sp++] = x - y;
            else if (c == '*') stack[sp++] = x * y;
            else if (c == '/') {
                if (y != 0) stack[sp++] = x / y;
                else stack[sp++] = 0;
            }
        }
    }
    return 0;
}
730 ◆UoNQqijD4I :2007/06/22(金) 16:38:14
728さん!、>>712なんですけど、なんとかして716に続くようにしたいのですが…
731デフォルトの名無しさん:2007/06/22(金) 16:44:31
>>730
だからファイルのフォーマットがわからんと
>>716はファイルの読み込みと処理を一緒くたに扱ってるから、悪いけど手を入れる気が起きん

上げたソースをよく見てみ
行列データは構造体にまとめてあるし、座標指定で値をセット/ゲットできる
転置した後の行列の和を取りたいなら、単純に行と列の数だけループ回して足し合わせれば取れるだろ?
732デフォルトの名無しさん:2007/06/22(金) 17:04:57
>>706
1) scanf()で%[]を指定した場合はcharではなくchar[]で受けなければダメ。
 この場合、どうせ入れたものを後のswitchでチェックしてるので、
 たんに%cでいい。
2) %[]だの%cだのは、%s、%d、%fのようなものと違い空白文字を
 読み飛ばさないので、初心者がハマりやすい。今回無限ループに
 陥っていたのはそのため。
3) いずれにせよ誤入力をした場合は、scanf()は簡単に無限ループを引き起こすので
 戻り値はチェックすべし。
とりあえず↓のようにすればよいと思う。

#include <stdio.h>
int main(void)
{
    double ans = 0.0, x, y;
    char sig;
    printf(...);
    if (scanf("%lf %c %lf", &x, &sig, &y) != 3)
        return 1;
    switch (sig) {...}
    while (ans <= 1000) {
        printf(...);
        if (scanf(" %c %lf", &sig, &x) != 2)
            return 1;
        switch (sig) {...}
    }
    return 0;
}
733デフォルトの名無しさん:2007/06/22(金) 17:19:22
>>730
もう時間切れかな?

http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4334.txt
とりあえずCSVと仮定して付け焼刃だけど読み込みまで作った
行列の加算も作ったぞ
734デフォルトの名無しさん:2007/06/22(金) 18:48:24
>>715
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4335.txt
仕様のCommand->どうのこうのってのが何を意味してるのかよくわからなかったんで
とりあえずリストの中身とサンプルのmainだけ作った

動的に伸縮するってあるけどこの仕様だと伸はするけど縮がない
縮するときは登録データを全て破棄する時

サンプルとして非常に悪いので参考にしない方がいいと思う
735デフォルトの名無しさん:2007/06/22(金) 18:55:28
[1] 授業単元: 実プロC(コマンドライン引数)
[2] 問題文(含コード&リンク):
  (おまけ)午前四時から正午までは Good Morning! と、正午から午後八時までは Good Afternoon! と、
午後八時から午前四時までは Good Evening! と、表示するプログラムを書け。
ただし、境界の時刻は前の時間帯に含まれるものとする。

*環境変数を使用しなければなりません。

[3] 環境
 [3.1] OS:Vine Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語: C言語
[4] 期限:来週中
[5] その他の制限:よろしくお願いします。
736デフォルトの名無しさん:2007/06/22(金) 19:00:42

すみません
[1]は実プロC(コマンドライン引数)ではなく実プロC(環境変数)でした
737デフォルトの名無しさん:2007/06/22(金) 19:12:54
いやそれは別にどうだっていいんだが
<time.h>じゃなくて環境変数?
getenv()とか使うの?
738デフォルトの名無しさん:2007/06/22(金) 19:24:31
[1] 授業単元:プログラミング演習
[2] 問題文(含コード&リンク):
注釈文に従って、空白の部分にコマンドを追加して、ハフマン符号化のプログラムを完成させよ。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4316.txt
[3] 環境
 [3.1] OS: XP
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 今日

お願いします
739デフォルトの名無しさん:2007/06/22(金) 19:28:23
740デフォルトの名無しさん:2007/06/22(金) 19:29:50
>>735 こうですか?わかりません ><;

#include <stdio.h>
#include <time.h>

int main(void) {
time_t nowtime,hour;
struct tm *now;
time(&nowtime);
now = localtime(&nowtime);
hour = now->tm_hour;
if( hour>4&& hour<=12 ) printf("Good Morning!");
else if( hour>12 && hour<=20 ) printf("Good Afternoon!");
else printf("Good Evening!");

return 0;
}
741デフォルトの名無しさん:2007/06/22(金) 19:29:51
>>739
気づきませんでした。ありがとございます
742デフォルトの名無しさん:2007/06/22(金) 19:31:12
>>740 は環境変数は使ってへんかった orz
743デフォルトの名無しさん:2007/06/22(金) 19:37:47
>>737
<time.h>ではないです。
getenv()、abs()などを使わなければならないと思います。

>>740
答えて下さったことにはありがたいのですが
環境変数を使わなければならないのですorz
744デフォルトの名無しさん:2007/06/22(金) 19:38:47
>>705
>>739

705のように変更したんですが、動作しません。

ファイル名入力すると不正な処理みたいにWindowsが言います
745デフォルトの名無しさん:2007/06/22(金) 19:42:07
環境変数
http://ja.wikipedia.org/wiki/%E7%92%B0%E5%A2%83%E5%A4%89%E6%95%B0#UNIX.E3.81.AE.E7.92.B0.E5.A2.83.E5.A4.89.E6.95.B0
TZ
タイムゾーン情報を指定する。標準Cライブラリの日時関連の関数で参照される。例: JST-9

う〜〜む、わからん。これが関与しているのか?UNIX、Linux環境がないんでお手上げ
746デフォルトの名無しさん:2007/06/22(金) 20:14:57
>>744
設問に問題があるな。
renewtable()の
 while(htnode[table[s]].freq>htnode[table[s+1]].freq && s!=255)

 while(s!=255 && htnode[table[s]].freq>htnode[table[s+1]].freq)
にしないといけないだろ。(オレならs!=255はs<255にするが)
これで試せ
747715:2007/06/22(金) 20:15:24
>>734
ありがとうございます。メイン内を追記して、それに合わせて一部いじりました

やはりグローバル変数は必要ですか…?
教員がやたらと嫌っているので、なんとかしたいです…

とりあえず、いじったったものを↓にhttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4336.txt
748デフォルトの名無しさん:2007/06/22(金) 20:16:19
つーか設問のバグなら教官につっかえせよ。
749デフォルトの名無しさん:2007/06/22(金) 20:19:12
>>746
それだとできます
750デフォルトの名無しさん:2007/06/22(金) 20:23:07
>>746
二つの文章の記述ってなにがちがうんですか?
&&の前後を入れ替えてるみたいですが
751デフォルトの名無しさん:2007/06/22(金) 20:24:14
>>745
FedoraCore5、bashのデフォルトな環境だと、その環境変数は宣言されてなかった。
752デフォルトの名無しさん:2007/06/22(金) 20:25:19
>>750
石橋を渡る時に、石があることを確かめてから渡る
753デフォルトの名無しさん:2007/06/22(金) 20:27:53
>>752
??
754デフォルトの名無しさん:2007/06/22(金) 20:30:43
石橋に使われている素材に良い石があるか確かめてから
あったらちょっとそれだけ・・・人間の力じゃ無理ぽ
755デフォルトの名無しさん:2007/06/22(金) 20:33:29
a && b

はaかつbですよね

b&&aにしてもかわらないんじゃないんですか?

実際入れ替えてみてうまく動作してはいるんですが
756デフォルトの名無しさん:2007/06/22(金) 20:35:47
>>755
&&は左から順番に真偽を評価していく。
偽になればそれ以降は評価しない。
後者なら、sが255になるとtable[s+1]をアクセスしない。
757デフォルトの名無しさん:2007/06/22(金) 20:46:19
>>756
なるほど!
758デフォルトの名無しさん:2007/06/22(金) 21:02:38
>>729,732返信ありがとうございます。
>>729
難しいですね。。半分も理解できないです。わかる部分を使わせていただきます。

>>732
適切な指摘ありがとうございます。
理由が分からずに困っていたので、すっきりしました。
759デフォルトの名無しさん:2007/06/22(金) 21:11:39
[1] 授業単元:プログラミング実習T
[2] 数字・アルファベットを含むランダムな文字列を出力する親サーバからデータをボタンを押す事(送信)で受信し

|送受信年月日(yyyy/mm/dd)|送受信時刻(ミリ秒まで)|送信or受信|データ(サーバからの応答=文字列)|
|送受信年月日(yyyy/mm/dd)|送受信時刻(ミリ秒まで)|送信or受信|データ(サーバからの応答=文字列)|
|送受信年月日(yyyy/mm/dd)|送受信時刻(ミリ秒まで)|送信or受信|データ(サーバからの応答=文字列)|
|送受信年月日(yyyy/mm/dd)|送受信時刻(ミリ秒まで)|送信or受信|データ(サーバからの応答=文字列)|


・(これを500行)

↑の形で[500×4]のMS エクセルに表示可能なCSVファイルを出力するプログラムです。
[3] 環境
 [3.1] OS:Windows2000
 [3.2] コンパイラ名とバージョン:Borland C++ Builder Ver.5
 [3.3] 言語:C++
[4] 期限:[2007年06月23日12:00まで]
[5] その他の制限:サーバとクライアントは完成しています。

よろしくお願いします。
760デフォルトの名無しさん:2007/06/22(金) 21:34:53
[1] 授業単元: Cプログラミング
[2] 問題文(含コード&リンク):
キーボードから順次入力された正の整数を0が入力されるまで,
配列に順番に格納し,入力された(0 を除く)値の平均値(実数として扱うこと)に最も近い値(平均との差が最小となる値)
が何番目に入力されたどういう値であるかを表示するプログラムを作成せよ.
例えば,次のような実行例を想定している(下線部はキーボードからの入力を表す)

数字(1)を入力してください 2
数字(2)を入力してください 5
数字(3)を入力してください 3
数字(4)を入力してください 1
数字(5)を入力してください 0
入力された数字の平均は2.75 です.
これは,3 番目に入力された3 に最も近いです

[3] 環境
 [3.1] OS: Linux
 [3.2] gcc
 [3.3] 言語: C
[4] 期限:6/29
[5] その他の制限: できるだけ簡単なもので・・

よろしくお願いします
761デフォルトの名無しさん:2007/06/22(金) 21:35:00
?
762デフォルトの名無しさん:2007/06/22(金) 21:38:42
>>759
あのさ。これじゃエスパーしか作れないよ。

・作って欲しいのはサーバに接続してデータ受け取ってCSVを吐くプログラム
 じゃねぇの?そういうのを普通は「クライアント」って言うんだけど、
 「クライアントは完成しています」って何?
・プロトコルはどんな感じなの?いやRFCみたいにちゃんとしてなくてもいいけどさ。
 今のまだとTCPだかUDPだかCORBAだかRPCだか、という次元さえわかんないよ?
・「ボタン」ってことは、GUIで作って欲しいのね?
763759:2007/06/22(金) 21:51:07
>>762

>・作って欲しいのはサーバに接続してデータ受け取ってCSVを吐くプログラム
> じゃねぇの?そういうのを普通は「クライアント」って言うんだけど、
> 「クライアントは完成しています」って何?
クライアントはまだ完成していません。誤植です。

プロトコルはTCPです。
そうです。GUIです。

よろしくおねがいします。
764627:2007/06/22(金) 21:52:56
#include<stdio.h>

void sub(char *a[])
{
char *end = a[0];
int s;
for(s=0; s<10; s++){
if(strcmp(end,a[s])>0){
end = a[s];
}
}
printf("itibanosoinoha%s\n",end);
}

int main()
{
char *a[10];
int i;

for(i=0; i<10; i++){
scanf("%s",&a[i]);
}
sub(a);

return 0;
}
自分なりに解いてみたのですが最後がどうしてもセグメントエラーになってしまいます。
いったいどのようにしたらいいでしょうか?
765デフォルトの名無しさん:2007/06/22(金) 21:58:59
>>764
キーボードから入力じゃなくて初期化だから
char *a[10]={"a","i",}

って感じでいいんじゃね?
面倒だから2個しか初期化してないけど。
あと、メモリ確保してないポインタにいきなりscanfで値を入れるのは無理。
766デフォルトの名無しさん:2007/06/22(金) 22:03:03
ついでに*a[10]は&a[i]って書いちゃうとそれはただのchar型を表してしまう。
%sはchar型配列を欲しがるわけだからその記述方法じゃダメ。
767デフォルトの名無しさん:2007/06/22(金) 22:03:21
このスレってGUI作ってくれる人いたっけ・・・?
768デフォルトの名無しさん:2007/06/22(金) 22:09:13
GUI+ソケットってかなり敷居が高いと思うのだが、
授業で WinAPI とか Winsock(2) をさわりだけでもやっているのか?
769デフォルトの名無しさん:2007/06/22(金) 22:11:21
開発環境が整っていれば、GUIも大したことはない。枠組みをペタペタ貼り付けたり
メニュー項目をいじって、あとは中でどういう処理をするか、書いたコードを用いる程度だし。
770デフォルトの名無しさん:2007/06/22(金) 22:14:42
>>769
ASyncSock ってその枠組みにうまく収まるような代物なんかな?
771627:2007/06/22(金) 22:15:22
後から書き込んで申し訳ないのですが、条件に複数の実行例を添付すること。とあります。この場合scanfではなく、
初期化する値を変えるしかないのでしょうか?
772デフォルトの名無しさん:2007/06/22(金) 22:16:42
>>760
#include <stdio.h>
#include <float.h>
#include <math.h>

int iGetNearPos(int *iNumber, int iCount, float fAvg)
{
    float fMin=FLT_MAX;
    int iPos=0;
    int i;
    float fSubtract;
    
    for (i=0 ; i<iCount ; i++)
    {
        fSubtract = (float)fabs(iNumber[i]-fAvg);
        if (fSubtract < fMin)
        {
            fMin = fSubtract;
            iPos = i;
        }
    }

    return iPos;
}
773デフォルトの名無しさん:2007/06/22(金) 22:17:18
>>763
多分誰もやらないと思うが、組んでもらいたいんなら、サーバのソースを
うp汁。それが手っ取りはやい。
それが不可能なら、以下を示すこと。

・通信手順と電文の形式(クライアントは接続後にコマンドのようなものを送るのか、
 切断はどっちがいつ行うかなど)
・アドレスやポートはどうするか(テキストボックスにでも入力させる?)
774デフォルトの名無しさん:2007/06/22(金) 22:17:23
>>772
float fGetAvg(int *iNumber, int iCount)
{
    int i;
    float sum=0;

    if (iCount < 2)
        return 0;

    for (i=0 ; i<iCount ; i++)
    {
        sum += iNumber[i];
    }
    return sum / (iCount - 1);
}
775デフォルトの名無しさん:2007/06/22(金) 22:18:24
>>774
int main()
{
    int iNumber[100];
    int iInput=999;
    int iCount=0;
    float fAvg;
    int iPos;

    while (iInput!=0)
    {
        scanf("%d", &iInput);
        iNumber[iCount]=iInput;
        iCount++;
    }
    fAvg = fGetAvg(iNumber, iCount);
    printf("%f\n", fAvg);

    iPos = iGetNearPos(iNumber, iCount, fAvg);
    printf("%d番目の%d\n", iPos+1, iNumber[iPos]);

    return 0;
}
776デフォルトの名無しさん:2007/06/22(金) 22:20:31
>>771
それでいいだろ。
もし、キーボードから入力させる意図だったとかぬかすなら
ややこしい表現するなバーローとでも言っとけばおk。
777デフォルトの名無しさん:2007/06/22(金) 22:22:29
>>759ってポトペタで数行で終わる気がするよ
778デフォルトの名無しさん:2007/06/22(金) 22:23:09
さすがに複数レスにまたがるような長いのはロダにうp汁
779デフォルトの名無しさん:2007/06/22(金) 22:24:58
> Borland C++ Builder Ver.5
これをもってない俺がやるとするとAPIゴリゴリでやるしかないが
コイツが食えるリソーススクリプトってどんなだ
あ、ダイアログ使わなきゃいいって?w

マンドクサ杉
780デフォルトの名無しさん:2007/06/22(金) 22:26:22
>>779
同じこと考えてるなw
WinMain から始まって CreateWindow(Ex) で書いてやろうかと思ったよ
781デフォルトの名無しさん:2007/06/22(金) 22:27:19
>>776
わかりました。何か言われたらそう言っておきます!
ありがとうございました。
782デフォルトの名無しさん:2007/06/22(金) 22:30:47
>Borland C++ Builder Ver.5
これもラーニング版とエンタープライズ(?)だかがあったけどどっちだべ?
783デフォルトの名無しさん:2007/06/22(金) 22:36:23
>>759
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::TcpClient1Connect(TObject *Sender)
{
char *data="|送受信年月日(yyyy/mm/dd)|送受信時刻(ミリ秒まで)|送信or受信|データ(サーバからの応答=文字列)|";
for (int i=0; i < 500; i++) {
TcpClient1->SendBuf(data, sizeof(data), 0);

}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
TcpClient1->Open();
}
//---------------------------------------------------------------------------
784デフォルトの名無しさん:2007/06/22(金) 22:36:28
[1] 授業単元:C言語
[2] 問題文:以下のプログラムの実行結果の順が反対になるようにせよ。

main(int argc,char*argv[]){
int i;
printf("%d argument (s).\n",argc -1);
for (i=0;i<argc;i++){
printf("argv[%d]:\"%s\n",i,argv[i]);
}
}



[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限: 2007年06月23日
[5] その他の制限: 特になし
785デフォルトの名無しさん:2007/06/22(金) 22:39:05
786デフォルトの名無しさん:2007/06/22(金) 22:45:28
for (i=argc-1;i>=0;i--){
787デフォルトの名無しさん:2007/06/22(金) 22:47:45
>>784
#include <stdio.h>
#include <string.h>

void rev_print(char *buf)
{
    int i;
    for (i=(int)strlen(buf) ; i>=0 ; i--)
    {
        printf("%c", buf[i]);
    }
    puts("");
}

void main(int argc, char*argv[])
{
    int i;
    char buf[1942];
    
    printf("%d argument (s).\n",argc -1);

    for (i=argc ; i!=0 ; i--)
    {
        sprintf(buf, "argv[%d]:\"%s", i, argv[i]);
        rev_print(buf);
    }
}
788デフォルトの名無しさん:2007/06/22(金) 22:47:47
>>784
どうでもいいけど出力が美的でないな。
789デフォルトの名無しさん:2007/06/22(金) 22:51:36
[1] 授業単元:C言語
[2] 問題文: パスワードを解析するソフトを作れ
[3] 環境
 [3.1] OS: バインリナックス
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語: C
[4] 期限:来週の木曜
[5] その他の制限:特に無し

お願いします
790デフォルトの名無しさん:2007/06/22(金) 22:56:15
>>784です
出来るだけ問題文のプログラムを使いたいのですが
791デフォルトの名無しさん:2007/06/22(金) 22:58:44
>>789
#include <stdio.h>

int main()
{
    int pass;
    int key;

    scanf("%d", &pass);
    
    while (1)
    {
        key=rand();
        if (key==pass)
        {
            printf("パスワードは%dです\n", key);
            return 0;
        }
    }
}
792デフォルトの名無しさん:2007/06/22(金) 22:59:41
793デフォルトの名無しさん:2007/06/22(金) 23:06:00
>>735
題意にあってるかどうかわからんが
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <time.h>
int try_to_get_tzoffset(int *offset)
{
    char *tz;
    unsigned char *p;
    if (!(tz = getenv("TZ"))) return 0;
    for (p = tz; !isdigit(*p) && *p != '-'; ++p) {}
    return sscanf(p, "%d", offset) == 1;
}
int main(void)
{
    time_t now;
    int offset, hour;
    time(&now);
    if (!try_to_get_tzoffset(&offset))
        hour = localtime(&now)->tm_hour;
    else {
        hour = gmtime(&now)->tm_hour - offset;
    }
    if (hour > 4 && hour <= 12) puts("Good Morning!");
    else if (hour > 12 && hour <= 20) puts("Good Afternoon!");
    else puts("Good Evening!");
    return 0;
}
794デフォルトの名無しさん:2007/06/22(金) 23:12:11
[1] 授業単元:プログラム
[2] 問題文: PS3のエミュレーターを作れ
[3] 環境
 [3.1] OS: ウィンドウズ エックスピー
 [3.2] コンパイラ名とバージョン:Borland C++ Compiler 5.5
 [3.3] 言語: C
[4] 期限:明日
[5] その他の制限:特に無し

がんばって
795793:2007/06/22(金) 23:13:39
すまん
- hour = gmtime(&now)->tm_hour - offset;
+ hour = (gmtime(&now)->tm_hour - offset + 24) % 24;
796デフォルトの名無しさん:2007/06/22(金) 23:14:15
>>794
ほんとうに宿題なんか?どこの学校だ?文科省が認定していない妙ちくりんな
ぁゃιぃ学校なのか?
797デフォルトの名無しさん:2007/06/22(金) 23:19:50
>>789
#include <stdio.h>
#include <unistd.h>
void kaiseki(const char *s)
{
    fputs("かいせきちゅう", stderr);
    while (*s++) {
        sleep(1);
        putc('.', stderr);
    }
    fputs("\rかいせきかんりょうしますた!\n", stderr);
}
int main(void)
{
    char *pass = getpass("パスワードを入れろ:");
    kaiseki(pass);
    return 123;
}
798デフォルトの名無しさん:2007/06/22(金) 23:35:13
[1] 授業単元:プログラミング言語
[2] 問題文: パスワード入力を求め照合しパスがあっていれば予め指定していたフォルダ(例、D:\C-program)を開くプログラムを作れ
[3] 環境
 [3.1] OS: XP
 [3.2] コンパイラ名とバージョン:Borland C++ Compiler 5.5
 [3.3] 言語: C
[4] 期限:明日の朝まで
[5] その他の制限:特に無し

799デフォルトの名無しさん:2007/06/22(金) 23:39:08
>>796
ハーバード大学です
800デフォルトの名無しさん:2007/06/22(金) 23:42:03
>>798
フォルダを開くとはどういった動作なのか?
801デフォルトの名無しさん:2007/06/22(金) 23:44:11
>>800
ウィンドウズで言うとダブルクリックして窓が開いた状態です
802デフォルトの名無しさん:2007/06/22(金) 23:51:10
explorer "ディレクトリ名"
が一番簡単
803デフォルトの名無しさん:2007/06/23(土) 00:08:15
[1] 授業単元:プログラミング言語
[2] 問題文:プログラムを実行すると A:\>FORMAT C: と表示し、十秒置きに■を表示していき■が十個表示されたところで
        うそぴょ〜んw と表示するプログラムを作れ
[3] 環境
 [3.1] OS: XP
 [3.2] コンパイラ名とバージョン:Borland C++ Compiler 5.5
 [3.3] 言語: C
[4] 期限:明日の朝まで
[5] その他の制限:特に無し

例、
a.exe実行
A:\>FORMAT C:
■■■■■■■■■■

うそぴょ〜んw


804デフォルトの名無しさん:2007/06/23(土) 00:12:03
構ってちゃんが湧いてるな
805803:2007/06/23(土) 00:13:57
本当に学校の課題なんです
明日までに提出しないと・・・・
806760:2007/06/23(土) 00:47:04
>>785
説明不足ですいません。あなた様の書いてくださったプログラムはほとんど習ってないものが多いので、ちょっと例題に乗っていたプログラムを載せてみます。
これを参考に書いてもらいたいです。
正の整数をキーボードから順次入力し、入力が終わった時点で、それを逆順に出力するプログラム↓
/* reverse1.c */
#include <stdio.h>
#define MAXNUM 100
main()
{
int a{MAXNUM};
int num,i,j:

for(i=0;i<MAXNUM;i++){
printf("Enter number: ");
scanf("%d",&num);
if(num==-1) break;
a[i]=num;}
for(j=i-1;j>=0;j--)
printf("%d",a[j]);
printf("\n");}
こんな感じです。
#include <stdlib.h>
#define d_abs(x,y) (((x-y)>0)?(x-y):(y-x))
fgets(str_tmp,sizeof(str_tmp),stdin);
int count = 0;他←=0や=-1の意味がわからない・・。
char str_tmp[20];
fgets(str_tmp,sizeof(str_tmp),stdin);
num_array = realloc(num_array,sizeof(int) * count);
free(num_array);
return 0;
この辺がよくわかりません(多分習ってません)
よろしくお願いします。
807デフォルトの名無しさん:2007/06/23(土) 00:59:37
[1] 授業単元: C言語
[2] 問題文(含コード&リンク): http://www.nda.ac.jp/~yamada/programs/dijkstra.c

  このプログラムに最短経路で通過した経路を表示するプログラムを加える。
[3] 環境
 [3.1] OS:Linux
 [3.2] gcc
 [3.3] C言語
[4] 期限:6/25
[5]:特になし

よろしくお願いします。
808デフォルトの名無しさん:2007/06/23(土) 01:04:21
>>806
#include <stdio.h>
#include <math.h>

#define MAXNUM 128

int main(void){
    double ave, sum = 0;
    int a[MAXNUM], num, i, j, min_index = 0;

    for(i = 0; i < MAXNUM; i++){
        printf("数字(%d)を入力してください ", i + 1); scanf("%d", &num);
        if(num == 0) break;
        a[i] = num;
    }

    if(i == 0) return 1;

    for(j = 0; j < i; j++)
        sum += a[j];
    ave = sum/i;

    for(j = 0; j < i; j++)
        if(fabs(a[j] - ave) < fabs(a[min_index] - ave))
            min_index = j;

    printf("入力された数字の平均は%g です.\n", ave);
    printf("これは,%d 番目に入力された%d に最も近いです\n", min_index + 1, a[min_index]);

    return 0;
}
809760:2007/06/23(土) 01:18:30
>>808
returnっていうのがよくわからない(習ってない)のですが、それは使わないと不可能ですか?
810デフォルトの名無しさん:2007/06/23(土) 01:22:26
>>809
#include <stdio.h>
#include <math.h>

#define MAXNUM 128

int main(void){
    double ave, sum = 0;
    int a[MAXNUM], num, i, j, min_index = 0;

    for(i = 0; i < MAXNUM; i++){
        printf("数字(%d)を入力してください ", i + 1); scanf("%d", &num);
        if(num == 0) break;
        a[i] = num;
    }

    if(i != 0){
        for(j = 0; j < i; j++)
            sum += a[j];
        ave = sum/i;

        for(j = 0; j < i; j++)
            if(fabs(a[j] - ave) < fabs(a[min_index] - ave))
                min_index = j;

        printf("入力された数字の平均は%g です.\n", ave);
        printf("これは,%d 番目に入力された%d に最も近いです\n", min_index + 1, a[min_index]);
    }
}
811デフォルトの名無しさん:2007/06/23(土) 01:23:23
>>809
void main(void) にすれば
return はいらない
812デフォルトの名無しさん:2007/06/23(土) 01:24:23
>>810
void main(void) でないとコンパイル通らんっしょ
813デフォルトの名無しさん:2007/06/23(土) 01:26:06
>>812
コンパイルは通るが警告がでる
814760:2007/06/23(土) 01:26:14
>>810-811
ありがとうございました
815デフォルトの名無しさん:2007/06/23(土) 01:26:55
int main(void) {
return 0;
}
これはISO、ANSI準拠だからgdgd言わずにこういうスタイルを今後は使いなはれ。
816760:2007/06/23(土) 01:28:03
はい、でもよく考えたらvoidってのもならってないんですが、大丈夫かな・・
817デフォルトの名無しさん:2007/06/23(土) 01:32:11
>>816
main()
818デフォルトの名無しさん:2007/06/23(土) 01:32:23
[1] 授業単元: C言語
[2] 問題文(含コード&リンク):
複素数a+bi(iは虚数単位)のn乗を求めて出力するプログラムを作成せよ。
a,bはdouble型、nはint型でキーボードから入力するものとする。
[3] 環境
 [3.1] OS: Linux
 [3.2]
 [3.3] 言語: C
[4] 期限:来週の月曜まで
[5] その他の制限:

よろしくです
819デフォルトの名無しさん:2007/06/23(土) 01:33:03
習った習わないを基準にしてそれに応じてやってたらたまらん。もっと世の中で使われている
標準的なものを見て学ぶ姿勢を持ったほうが今後の人生のためだよ。
voidなんて習っていない?あま〜〜い、甘過ぎるよ小沢さ〜〜ん!
変数の型について学びなはれ。ちなみに、引数のないライブラリでは function(void); と
括弧の中を入れないとエラーメッセージが出る?と思われ。
820デフォルトの名無しさん:2007/06/23(土) 01:34:34
エラーじゃなくて警告やった。まぁええわ。
821デフォルトの名無しさん:2007/06/23(土) 01:35:04
[1] 授業単元: Cプログラミング基礎
[2] 問題文(含コード&リンク):
1から9までの数字を1回ずつ使った9桁の数字を小町数という。
自乗した数が小町数となるような自然数をすべて求めるプログラムを作成し、
その数と小町数の両方を出力せよ。たとえば24441の自乗は597362481であり、小町数となる。
[3] 環境
 [3.1] OS: Linux
 [3.2]
 [3.3] 言語: C
[4] 期限:1ヶ月後
[5] その他の制限:よくわからない
822デフォルトの名無しさん:2007/06/23(土) 01:53:45
>>818 a+biの形の公式を探してきて
// n <= 0 に未対応
#include <stdio.h>

int main(void){
    double a, b, prev_a, prev_b, const_a, const_b;
    int i, n;

    printf("a b n : "); scanf("%lf%lf%d", &a, &b, &n);

    const_a = a, const_b = b;
    for(i = 1, prev_a = a, prev_b = b; i < n; i++, prev_a = a, prev_b = b){
        a = prev_a*const_a - prev_b*const_b;
        b = prev_a*const_b + const_a*prev_b;
    }

    printf("%g + %gi\n", a, b);

    return 0;
}
823759:2007/06/23(土) 01:56:35
>>783

遅れまして申し訳ありません。
ありがとうございました。
824デフォルトの名無しさん:2007/06/23(土) 02:05:12
>>821
できた。

#include <stdio.h>
#include <math.h>
int iskomachi(int value)
{
    int exists[10] = { 0 };
    int i, x;
    for (i = 0; i <= 9; i++) {
        x = value % 10;
        exists[x] = 1;
        value /= 10;
    }
    for (i = 0; i <= 9; i++) {
        if (!exists[i]) return 0;
    }
    return 1;
}
int main(void)
{
    int i, j;
    for (i = 0;; i++) {
        j = pow(i, 2);
        if (j > 999999999) break;
        if (iskomachi(j)) printf("%d : %d\n", i, j);
    }
    return 0;
}
825デフォルトの名無しさん:2007/06/23(土) 02:06:14
826デフォルトの名無しさん:2007/06/23(土) 02:10:32
>>821 こんなのはどうだ
#include <stdio.h>
#include <math.h>
int main()
{
  char strbuf[10];
  int num[10];
  int i, j, check;
  int max = sqrt(987654321);
  for (i = 1; i < max; i++) {
    sprintf(strbuf, "%d", i * i);
    for (j = 0; j < 10; j++) {
      num[j] = 0;
    }
    for (j = 0; j < strlen(strbuf); j++) {
      num[strbuf[j] - '0']++;
    }
    check = 0;
    for (j = 1; j < 10; j++) {
      if (num[j] > 1 || num[j] == 0) {
        check = 1;
      }
    }
    if (check == 0) {
      printf("%d, %d\n", i, i * i);
    }
  }
  return 0;
}
827デフォルトの名無しさん:2007/06/23(土) 02:13:22
>>821
#include <stdio.h>
#include <math.h>
int check(long n){
  int cnt=0, a[9] = {0};
  for(;n; n/=10){
    int m = n % 10 -1;
    if(!a[m]) {cnt++; a[m]=1;}
  }
  return cnt == 9;
}
int main(){
  long n = (long)sqrt(123456789.0), n2;
  for(;;){
    int n2 = n * n;
    if(n2 > 987654321) break;
    if(check(n2)) printf("%ld x %ld = %ld\n", n,n,n2);
    n++;
  }
  return 0;
}
828デフォルトの名無しさん:2007/06/23(土) 02:13:41
>>821
ちょっと無駄なループが多いけど・・・
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4340.c

こういうちょっと面白い問題だと、やっぱ解答率高いよな。
829デフォルトの名無しさん:2007/06/23(土) 02:21:13
どれも違って面白いな。
830デフォルトの名無しさん:2007/06/23(土) 02:22:39
>>821 パクった上に削ってやんよ

#include <stdio.h>
int iskomachi(int value) {
int exists[10] = { 0 },i;
for (i = 0; i <= 9; i++) {
exists[value % 10] = 1;
value /= 10;
}
for (i = 0; i <= 9; i++) {
if (!exists[i]) return 0;
}
return 1;
}
int main(void) {
int i, j;
for (i = 11111; i <= 31426 ; i++) {
j=i*i;
if (iskomachi(j) )
printf("%d : %d\n", i, j);
}
return 0;
}
831デフォルトの名無しさん:2007/06/23(土) 02:28:30
>>830
11111と31246は何を根拠に?

上限、下限の設定は>827が一番わかりやすいよな。
でもcheck関数に「0」を含む数字が渡ったら配列外参照するよな?
832デフォルトの名無しさん:2007/06/23(土) 02:29:59
>>831
123456789と987654321の正の平方根。厳密には31247以下とすべきだったかな。
まぁ、影響はなかったが。
833デフォルトの名無しさん:2007/06/23(土) 02:33:16
っと、失礼。 31427 やね orz
834デフォルトの名無しさん:2007/06/23(土) 02:33:24
>>832
ぐは、123456789の平方根て11111...になるのか・・・失礼したorz
835デフォルトの名無しさん:2007/06/23(土) 02:36:52
>>831
あらほんとうだ。cygwin gcc じゃ実行時エラーでないから気づかんかった。
じゃ、配列サイズを増やすのもいいけど、あえてこうしてみる。

int check(long n){
  int cnt=0, a[9] = {0};
  for(;n; n/=10){
    int m = n % 10 -1;
    if(!m) break;
    if(!a[m]) {cnt++; a[m]=1;}
  }
  return cnt == 9;
}
836872:2007/06/23(土) 02:39:21
ちがった、こうだった
int check(long n){
  int cnt=0, a[9] = {0};
  for(;n; n/=10){
    int m = n % 10-1;
    if(m==-1) break;
    if(!a[m]) {cnt++; a[m]=1;}
  }
  return cnt == 9;
}
すれ汚し失礼。
837デフォルトの名無しさん:2007/06/23(土) 02:45:41
[1] 授業単元: 情報演習
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4342.txt
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語:C
[4] 期限:6月23日24:00
[5] その他の制限: 定義にあるライブラリ関数を除くライブラリ関数の使用禁止。

2問もあり恐縮ですが力をお貸し下さい。
838デフォルトの名無しさん:2007/06/23(土) 03:09:44
>>837
とりあえず、uniqueから
void unique( struct node * list )
{
struct node * now = list->next;
struct node * back = NULL;
int iCheck[ 256 ] = { 0 };

while ( now != NULL ) {
if ( iCheck[ now->element ] == 0 ) {// 初めての文字
iCheck[ now->element ] = 1;
back = now;
now = now->next;
}
else {// 2回目以降
struct node * bye = now;
now = now->next;
back->next = now;
free( bye );
}
}
}
839デフォルトの名無しさん:2007/06/23(土) 03:16:22
[1] 授業単元: 情報
[2] 問題文(含コード&リンク):
直角三角形の直角をはさむ辺の長さをa,b、斜辺の長さをcとするとき、
a、b、cがすべて整数となる組み合わせをすべて求めるプログラムを作成せよ。
ただし、a、bはともに1000以下とする。
結果の出力例は、その一部だけを示せばよい。
可能ならば平方根を求めるライブラリ関数sqrtを用いずに実現する効率的な方法を考えてみよ。
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語:C
[4] 期限:6月29日
[5] その他の制限:

お願いします。
840デフォルトの名無しさん:2007/06/23(土) 03:18:49
[1] 授業単元: 情報活用基礎
[2] 問題文(含コード&リンク):
123...9の間に+か-をいくつか入れて、計算結果が100になるものをすべて求めるプログラムを作成せよ。
たとえば、1+23-4+56+7+8+9はその解の一つである。
最初の1の前に-をつけることを許した場合と許さない場合についても求めよ。
また、余力のあるものは、+と-以外の演算を考慮した場合についても考えてみよ。
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語:C
[4] 期限:6月30日
[5] その他の制限:

よろしくお願いします
841デフォルトの名無しさん:2007/06/23(土) 03:55:02
[1] 授業単元:C言語
[2] 問題文:以下のプログラムを書き換え、ファイル名をコマンドラインか
ら指定できるようにせよ。ソースプログラムを書き込んで提出せよ。

#include<stdio.h>
#include<stdlib.h>
int main(void){
char c;
char filenaime[]="data.txt";
FILE *fp;
if((fp=fopen(filenaime,"r"))==NULL){
printf("File does not exist.\n");
exit(1);
}
while((c=getc(fp)) !=EOF){
printf("%c\n",c);
}
fclose(fp);
}


[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限: 2007年06月24日まで
[5] その他の制限:特にない。最大限問題のプログラムを使う
タイプミスしていたら教えてください
842デフォルトの名無しさん:2007/06/23(土) 03:55:34
>>837
mirror_imageは難しかった。単方向線形リストの勉強になった。
やたらと汚く効率も悪いが許してくれ。コメントはそれなりにふった。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4344.c
843デフォルトの名無しさん:2007/06/23(土) 04:08:25
844デフォルトの名無しさん:2007/06/23(土) 04:53:18
>>840
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4346.c

ぶっちゃけ、難しかった。特に、数式を作るあたりが。
ちょっと、異様な処理になってしまったが勘弁してくれ。
乗除機能追加はそれなりにやりやすいはず。
845844:2007/06/23(土) 04:58:27
>>840
途中のを上げてしまった、ソーリー。
正しくは↓で
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4347.c
846デフォルトの名無しさん:2007/06/23(土) 05:09:58
>>839
予想していたより、異常にヒットしたんだがこんなもんなのか?
sqrtを使わない手法として、cはa+bより小さくないと三角形が構成できないってのを利用した。
これが、sqrt使うより効率がいいのかはしらん。

#include <stdio.h>
int main( void )
{
int a,b,c;
for ( a = 1; a <= 1000; a++ ) {
for ( b = a; b <= 1000; b++ ) {
for ( c = 1; c < a + b; c++ ) {
if ( c * c == a * a + b * b ) {
printf ( "[%d][%d][%d]\n", a, b, c );
}
}
}
}
return 0;
}
847デフォルトの名無しさん:2007/06/23(土) 06:20:39
cは1からよりbからの方が効率よくね?
848デフォルトの名無しさん:2007/06/23(土) 06:28:41
int a,b,ab,c;

for ( c = b,ab=a * a + b * b; c < a + b; c++ ) {
if ( c * c == ab ) {

こんな感じで
849デフォルトの名無しさん:2007/06/23(土) 06:36:51
見つかった後にbreak;も入れたほうがいいんでない?
850デフォルトの名無しさん:2007/06/23(土) 09:15:47
[1] 授業単元: C言語
[2] 問題文(含コード&リンク):
  1.標準入力からテキストを入力し、指定があれば文字変換を行い、標準出力に出力することを、
入力が尽きるまで繰り返すプログラムを書け。
ただし、入力と出力にはシステムコールを直接使用すること。
文字変換は、以下のようにオプションで指定する。
-u  アルファベット小文字を対応する大文字に変換する。
-l  アルファベット大文字を対応する小文字に変換する。
2. 標準入力からテキストを入力し、指定があれば行の削除を行い、標準出力に出力することを、
入力が尽きるまで繰り返すプログラムを書け。
ただし、入力と出力にはシステムコールを直接使用すること。
削除する行は、以下のようにオプションで指定する。
-e  空行を除去する。
-s  #で始まる行を除去する。
[3] 環境
 [3.1] OS:Vine Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C++
[4] 期限: 来週中
[5] その他の制限:よろしくお願いします
851デフォルトの名無しさん:2007/06/23(土) 09:17:48

<サンプルプログラム>
標準入力から入力したものを、そのまま標準出力に出力することを、
入力が尽きるまで繰り返すプログラム。入力と出力にはシステムコールを直接使用する。
#include <stdlib.h>
#include <unistd.h>

main()
{
char buf[1024], *p;
ssize_t len, len1;

while ((len = read(STDIN_FILENO, buf, sizeof(buf))) > 0) {
p = buf;
while ((len1 = write(STDOUT_FILENO, p, len)) >= 0 && len > len1) {
len -= len1;
p += len1;
}
if (len1 == -1) {
exit(1);
}
}
if (len == -1) {
exit(1);
}
return 0;
}
852デフォルトの名無しさん:2007/06/23(土) 10:07:15

struct data1{
char name; //氏名
char res; //点数
};

struct data1 data_a;

struct data2{
char name; //氏名
int res; //点数
};

struct data2 data_b;

という二つの構造体を作ったときに、

data_aのnameをdata_bのnameに
data_aのresをintにしてdata_bのresに代入したくて、

data_b[i].name = data_a[i].name;
data_b[i].res = atoi(data_a[i].res);

という風に書いたのですが

error: incompatible types in assignment

となりました。

どういう風に書けばいいんでしょうか?

よろしくおねがいします
853デフォルトの名無しさん:2007/06/23(土) 10:10:47
>>850
1.
#include <stdlib.h>
#include <unistd.h>
#include <ctype.h>
int main(int argc, char *argv[])
{
  char buf[1024], *p;
  ssize_t len, len1, i;
  int opt, flg_toupper=0, flg_tolower=0;
  while ((opt = getopt(argc, argv, "ul")) != -1) {
    switch (opt) {
    case 'u': flg_toupper=-1; break;
    case 'l': flg_tolower=-1; break;
    }
  }
  while ((len = read(STDIN_FILENO, buf, sizeof(buf))) > 0) {
    for (i=0;i<len;i++) buf[i]=isupper(buf[i])?flg_tolower?tolower(buf[i]):buf[i]:islower(buf[i])?flg_toupper?toupper(buf[i]):buf[i]:buf[i];
    p = buf;
    while ((len1 = write(STDOUT_FILENO, p, len)) >= 0 && len > len1) {
      len -= len1;
      p += len1;
    }
    if (len1 == -1) exit(1);
  }
  if (len == -1) exit(1);
  return 0;
}
854デフォルトの名無しさん:2007/06/23(土) 10:12:17
855デフォルトの名無しさん:2007/06/23(土) 10:24:17
>>852
char型の要素には、文字が一文字しか入らない。
当然にatoi()にも渡せない。
856852:2007/06/23(土) 10:38:00
すいません、構造体の宣言の時に
char name[50]; //氏名
char res[3]; //点数
みたいにして宣言したのでいけるとおもったのですが・・・

857デフォルトの名無しさん:2007/06/23(土) 10:45:42
いや、してないぢゃん
858デフォルトの名無しさん:2007/06/23(土) 10:46:29
strcpy(data_b[i].name, data_a[i].name);
859852:2007/06/23(土) 10:49:25
ここに書いたときに書き忘れてました・・・

>>858
char型をint型にいれたりということもできるんでしょうか?
860デフォルトの名無しさん:2007/06/23(土) 10:52:38
できるようなできないようなそうでもないような
861デフォルトの名無しさん:2007/06/23(土) 11:08:30
data_b.res = atoi(data_a.res);
862デフォルトの名無しさん:2007/06/23(土) 11:09:44
863デフォルトの名無しさん:2007/06/23(土) 11:10:00
学校のPCはLinuxなんですけど、家のPC(windows)で同じようにコンパイルと、プログラムの動作確認するソフトってありますか??
864デフォルトの名無しさん:2007/06/23(土) 11:12:48
>>863
cygwin, coLinux, またはPCエミュレータの類にLinuxをインストール
後者ほど互換性が高い
865852:2007/06/23(土) 11:25:20
>>861
その行でもエラーがでてしまったのですが
866デフォルトの名無しさん:2007/06/23(土) 11:45:03
>>865
今の状態のプログラムをコピペしてみな
書き忘れとか無いようにコピペな
867デフォルトの名無しさん:2007/06/23(土) 11:46:49
>>854
>>862
それだと2種類のオプションが両方指定されたときに
期待どおりの動作をしないように思うんだけど。
868デフォルトの名無しさん:2007/06/23(土) 11:48:39
>>865
struct data1{
char name[50]; //氏名
char res[3]; //点数
};
struct data2{
char name[50]; //氏名
int res; //点数
};
構造体の宣言はこれで良いのか?
あと、data1.res[3]への点数の格納方法はどうやっている?
99点の時は"99\0"かな?
その場合、100点の時はどうしている?
869デフォルトの名無しさん:2007/06/23(土) 11:51:04
>>867
あーそうだな。でも直すのマンドクセw
870852:2007/06/23(土) 11:53:01
先ほどと少し変数名などかわるのですが下記のような感じです。


struct data{
char name[50]; //氏名
char prog[3]; //プログラミングの成績
};
struct data stu[130];


struct sort{
char name[50]; //氏名
int sub[3]; //得点
};
struct sort prog_sort[130],

for(i=0;i<sum;i++){
strcpy(prog_sort[i].name,stu[i].name);
prog_sort[i].sub = atoi(stu[i].prog); //←ここでerror: incompatible types in assignment
}
871デフォルトの名無しさん:2007/06/23(土) 11:54:17
やれやれだぜ
872852:2007/06/23(土) 11:54:46
>>868
[4]にしとかないとだめでしたね・・・
うっかりしていました
873デフォルトの名無しさん:2007/06/23(土) 11:55:48
subを配列にしてるのは何故?
874デフォルトの名無しさん:2007/06/23(土) 11:56:01
>>870
int sub[3];
こう宣言していて、
prog_sort[i].sub = atoi(stu[i].prog);
何故subに添え字がないの?
875デフォルトの名無しさん:2007/06/23(土) 11:56:01
>>870
struct sort{
char name[50]; //氏名
int sub; //得点
};
876852:2007/06/23(土) 11:56:23
すいません、解決したみたいです。

なぜかintに文字数指定していたのと、
868で指摘していただいた[3]を[4]を修正したらエラーが消えました。
877 ◆DpMW3bRjps :2007/06/23(土) 12:02:27
>>733
提出期限すぎたんですけど、一応提出はしたいです
それと、構造体をまだ習っていない初心者ですので、それを使わないでお願いします
わざわざ作っていただいたのにすみません↓↓
878デフォルトの名無しさん:2007/06/23(土) 12:16:54
ぐさっ、ぐえっ                   OTL
879デフォルトの名無しさん:2007/06/23(土) 12:19:18
                          ↑↑↑
880852:2007/06/23(土) 12:23:01

void sum_sort(){
quick(struct data stu[],0,int sum)
}

と書いて ソート関数に飛ばしているところで

error: syntax error before 'struct' が出ます。

なぜでしょうか・・?
881デフォルトの名無しさん:2007/06/23(土) 12:30:50
関数に変数の宣言渡してどうすんだ
882852:2007/06/23(土) 12:56:39
quick(stu[],0,sum) でいいんでしょうか?
これにすると
error: syntax error before ']' になります

quick(stu,0,sum)  にすると
warning: passing argument 1 of 'quick' from incompatible pointer type
になります
883デフォルトの名無しさん:2007/06/23(土) 12:58:28
全部貼れって このスレにエスパーは少ないぞ
884869:2007/06/23(土) 12:58:45
>>850
ごめん。心を入れ替えて直した。
ついでに、実はC++指定みたいだから、手抜きだけどそれっぽくした。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4351.txt

cc -DQ1 hoge.cpp
みたいに、Q1を定義してコンパイルすると問1
定義しないと問2用のプログラムになる。
885デフォルトの名無しさん:2007/06/23(土) 13:03:52
quick(&stu, 0, sum);
こうか?せめてquick関数のプロトタイプくらい書いてくれ
886デフォルトの名無しさん:2007/06/23(土) 13:07:45
要素数が渡らないとまずいんじゃないかな?
887デフォルトの名無しさん:2007/06/23(土) 13:22:21
sumが要素数みたいだな。
888852:2007/06/23(土) 13:22:50
ソースです。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4352.c
コンパイルエラーのメッセージもロダの方にかいておきました。

よろしくおねがいします。
889デフォルトの名無しさん:2007/06/23(土) 13:27:28
今日もいい天気だな。

さあ次の宿題を。
890デフォルトの名無しさん:2007/06/23(土) 13:30:10
[1] 授業単元:
[2] 問題文(含コード&リンク):
2つの整数n,kを引数として,組み合わせの数nCkを返すユーザー定義関数を用いて,
キーボードから非負整数nを入力して(a+b)^nを展開するプログラムを作成せよ.

[実行結果1]
何乗?:3
(a+b)^3 = 1 a^3 b^0 + 3 a^2 b^1 + 3 a^1 b^2 + 1 a^0 b^3


[実行結果2]
何乗?:0
(a+b)^0 = 1 a^0 b^0

[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: VC
 [3.3] 言語: C
[4] 期限: 2007年6月29日まで
[5] その他の制限: ポインタは禁止。制御構文はfor・while・ifのみ。break・continueは禁止。キーボードからの入力はscanfで拾うこと。
891デフォルトの名無しさん:2007/06/23(土) 13:31:40
[1] 授業単元:
[2] 問題文(含コード&リンク):
2次方程式
ax^2 + bx + c = 0
は,判別式
Δ^2 = b^2 - 4ac
により,(a)2つの実数解をもつ,(b)1つの実数解(重解)をもつ,(c)2つの虚数解をもつ,の3つの場合に分けられる.
3つの正整数a,b,cを引数とし,実数値sqrt(b2-4ac)を戻り値とし,b2-4acが負の場合はエラーを示す値を戻り値とするユーザ定義関数delta()を作成せよ.
作成したユーザ定義関数を用いて,3つの正整数a,b,cをキーボードから入力し,2つの実数解を表示するプログラムを作成せよ.
ただし,重解をもつ場合と虚数解をもつ場合はその旨表示したうえで,再度a,b,cの入力を促すようにし,2つの実数解をもつ方程式が入力されるまで繰り返すようにすること.

[実行結果]
3つの係数を入力して: 1 2 1
重解を持つよ!入力し直して。
3つの係数を入力して: 1 1 1
虚数解を持つよ!入力し直して。
3つの係数を入力して: 2 9 3
2x^2 + 9x + 3 = 0 の2つの実数解は
x = -0.362541 と x = -4.137459

[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: VC
 [3.3] 言語: C
[4] 期限: 2007年6月29日まで
[5] その他の制限: ポインタは禁止。制御構文はfor・while・ifのみ。break・continueは禁止。キーボードからの入力はscanfで拾うこと。
892デフォルトの名無しさん:2007/06/23(土) 13:35:00
>>888
修正面倒だから問題点を書くと、isdigitの使い方と比較の仕方が間違ってる
というかプログラムの設計がすでに間違ってる
893852:2007/06/23(土) 13:37:01
(´・ω・`)
894デフォルトの名無しさん:2007/06/23(土) 13:40:42
>>893
構造体を書き換えて、 fscanfの使い方を変えるべき
せっかくfscanfを使ってるんだから、できる作業は全部やってもらえ
文字から数字への変換とか
895852:2007/06/23(土) 13:45:33
得点のある人は0〜100ですが
受けてない人は--にしているので
まずは全部charで取り込んで、
あとで数値のものだけintにしていこうとおもったのですが...
896852:2007/06/23(土) 13:53:56
たちまち今出ているコンパイルエラーを取り除きたいんですがドコをどう変えたらいいでしょうか
897デフォルトの名無しさん:2007/06/23(土) 13:55:27
if(stu[i].prog != "--")
これ無理
898デフォルトの名無しさん:2007/06/23(土) 13:56:54
書き直したほうが良い
899デフォルトの名無しさん:2007/06/23(土) 13:56:54
>>895
読み込みのときに--だったら-1にしちゃえよ
そっちの方が楽

コンパイルエラーは変えなきゃいけない場所が多すぎて・・・
よくまぁあれだけ間違えられるな
900デフォルトの名無しさん:2007/06/23(土) 13:57:16
たちまち の意味を教えれ
エラーを、(´・ω・`) しろ。
901852:2007/06/23(土) 13:59:04
>>899
どんな感じでやったらいいでしょうか
902デフォルトの名無しさん:2007/06/23(土) 14:03:34
>>901
struct data{
char name[50];
int prog;
};


char prog_tmp[4];
fscanf(fin,"%s,%s",stu[i].name,prog_tmp);
if(strcmp(prog_tmp,"--")) stu[i].prog = atoi(prog_tmp);
else stu[i].prog = -1;

こんな感じで
903デフォルトの名無しさん:2007/06/23(土) 14:07:48
>>853
>>854
>>862
素早い解答ありがとうございます!!
904852:2007/06/23(土) 14:10:57
ありがとうございます。
参考にさせていただきます。
905デフォルトの名無しさん:2007/06/23(土) 14:39:18
>>747
リストの番兵はグローバル変数に置かないと意味がない
さもないと延々関数呼び出しで番兵のポインタ持ち歩くハメになる
その教員にリストの番兵をグローバルに置かない方法を聞いてみるといい
そんな方法があるならこっちが知りたい

関数内は極力単純な処理にした方がいい
入力とか出力とかは呼び出す側かそれ専用の関数内でやって
入力から拾ったデータをやり取りするように設計するべき
そのために関数の引数と返り値ってのがある
とりあえず、関数内で別々に入力を促すのはちょっと勘弁してほしい

まぁアドバイス的にはこんなところだ
頑張って仕上げてくれ
906デフォルトの名無しさん:2007/06/23(土) 14:50:40
>>890
#include <stdio.h>
unsigned factorial(unsigned n) {
    return n <= 1 ? 1 : n * factorial(n - 1);
}
unsigned combination(unsigned n, unsigned r) {
    return factorial(n) / (factorial(r) * factorial(n - r));
}
int main(void)
{
    unsigned i, n = 0;
    char *delim = " = ";
    printf("何乗?:");
    scanf("%u", &n);
    printf("(a+b)^%u", n);
    for (i = 0; i <= n; ++i) {
        printf("%s%u a^%u b^%u", delim, combination(n, i), n - i, i);
        delim = " + ";
    }
    putchar('\n');
    return 0;
}
907デフォルトの名無しさん:2007/06/23(土) 14:52:20
>>852
課目毎に変数名変えてるけど、配列にして処理を共通にしたらどうかな。
908852:2007/06/23(土) 14:56:36
quick_sortの関数に入ったときに
S,from,toが定義されていないと言われてしまうのですが、

quick_sortを単品で作ったときは
void quick(int S[],int from,int to)
{〜〜〜〜〜
というふうに、今回と同じように書いても何も言われなかったのですが
何か他のところに原因があるのでしょうか?
909852:2007/06/23(土) 15:33:48
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4354.c

構造体の要素をintになおしたりしてみました。

908に書いたようなエラーが出ています。
910852:2007/06/23(土) 15:35:17
911デフォルトの名無しさん:2007/06/23(土) 15:44:12
[1] 授業単元:2次元配列
[2] 問題文:適当な値で初期化した、2行2列A、Bの和を計算し、同じく
      2行2列の行列Cに代入するプログラムを作成。
      さらに2行2列をそれらしく表示する関数gyouretu_hyouji
      を作る。
      追加課題、2行2列の行列の和を計算する関数
      gyouretu_tashizanを作る。引数は行列A、B、C関数の戻り
      値はなし。
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン: Borland
 [3.3] 言語: C
[4] 期限:6月25日までにお願いします。
[5] その他の制限: 配列までは習いました

912852:2007/06/23(土) 15:57:51
>>907さんの提案は

struct subsort prog_sort[130],exp_sort[130],analy_sort[130],circ_sort[130],elect_sort[130],eng2_sort[130],eng3_sort[130];



struct subsort s_sort[0][130],s_sort[1][130],s_sort[2][130],s_sort[3][130],s_sort[4][130],s_sort[5][130],s_sort[6][130],s_sort[7][130];

にみたいに、ということでしょうか?

913デフォルトの名無しさん:2007/06/23(土) 15:58:14
914デフォルトの名無しさん:2007/06/23(土) 16:09:19
>>910
構造体を引数や戻り値の型に取る関数のプロトタイプ宣言は
構造体の宣言より後ろに書きましょう。
915852:2007/06/23(土) 16:14:00
>>914
なるほど、そこでしたか。
エラーが後4行になりました。

FILE *fin;//ファイルを開く
fin = fopen("result.txt","r");//読み込みモード

syntax error before 'fin'

になります。
916デフォルトの名無しさん:2007/06/23(土) 16:17:03
>>910
マンドクサすぎてとてもまともに読む気になれん。
他人のコードのデバグなんて好き好んでやりたがるやつは少ないと知れ。

以下、パッと見て気づくところ
1) 21行目でdataがこの時点では未宣言なのにquick()のプロトタイプに
  dataを使っている。Cコンパイラは上から順に宣言/定義を処理する。
  下で定義しててもダメだ。
 →struct dataの宣言を上に移せ。さらに、これにtypedef名をつけていないので、
  使う時はいつでも "struct data"と書かなければならない(たんに"data"では
  だめ)。"struct"をはしょりたければ、struct dataの宣言の後に
  typedef struct data data; とでも汁。
2) 22行目で同様の誤り(こちらはstruct subsort)
3) 関数quick(), quick_sub()の定義内で、swap()をint以外の型を交換するのに
 使っている。void swap(int*, int*) はintの入替にしか使えない。
 つーか自分でそう定義したんだろ。
 実は構造体のメンバをまるっと入れ替えたいんなら、ちまちまメンバ単位に
 やらずに構造体まるごとやっちまえ。Cでは配列型の変数は代入(コピー)
 できないが構造体ならできる。
4) quick_sub()の定義部の仮引数宣言は何事だ。
 void quick_sub(subsort S[].sub,int from,int to)
 意味わかんねぇ。

あとは知らん。まともに追う気にはとてもなれん。
917デフォルトの名無しさん:2007/06/23(土) 16:20:38
strcopy
918デフォルトの名無しさん:2007/06/23(土) 16:24:04
>>916のツンデレ的優しさに涙が出てくる
919デフォルトの名無しさん:2007/06/23(土) 16:30:34
>>911
#include<stdio.h>
int i,j;
void gyouretu_hyouji(int array[][2])
{ for(i=0;i<2;i++){
for(j=0;j<2;j++)
printf("%3d",array[i][j]);
printf("\n");}
}

void gyouretu_tashizan(int A[][2],int B[][2],int C[][2])
{
for(i=0;i<2;i++)
for(j=0;j<2;j++)
C[i][j]=A[i][j]+B[i][j];
gyouretu_hyouji(C);

}
int main(void)
{
int A[2][2]={{1,2},{3,4}};
int B[2][2]={{5,6},{7,8}};
int C[2][2];
gyouretu_tashizan(A,B,C);
return 0;
}




920852:2007/06/23(土) 16:31:11
だいぶ修正してみました。

http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4357.c

コンパイルエラー自体はあと3つみたいです(´・ω・`)

3つとも見た目には問題ないと思うんですが・・・
921デフォルトの名無しさん:2007/06/23(土) 16:38:26
bccだと26個エラー出るぞ
922852:2007/06/23(土) 16:39:36
68行目に ; が無くてエラーが少なく(?)なってたみたいです・・・

もうちょっとがんばってきます(´・ω・`)
923デフォルトの名無しさん:2007/06/23(土) 16:41:06
スルーされている>>913が哀れだ

面倒くさくて>>913が意図した動作になるのかどうかもわからんが
とりあえず"--"を処理しないといけないみたいだよ
924デフォルトの名無しさん:2007/06/23(土) 16:43:19
>>903
あー。>>854, >>862だったら>>884のほうが……
もう見てねーだろなあ
925依頼者:2007/06/23(土) 16:46:00
1] 授業単元: C言語演習
[2] 問題文(含コード&リンク):
(1)変数xの下位16ビットを2進数で表示する関数void bit_print(int x)を作成。

(2)シフト演算を用いて「□」と「■」を以下のように表示する。
□□□□□□□□■
□□□□□□□■
□□□□□□■
□□□□□■
□□□□■
□□□■
□□■
□■

□■
□□■
□□□■
□□□□■
□□□□□■
□□□□□□■
□□□□□□□■
□□□□□□□□■

[3] 環境
 [3.1] OS:WindowsXP
 [3.2] コンパイラ名とバージョン:visual studio.net
 [3.3] 言語:C++
[4] 期限: 07年6月25日まで
[5] その他の制限:特になし

演算子の問題です。よろしくお願いします。
926デフォルトの名無しさん:2007/06/23(土) 16:48:13
>>920
>void swap_c(char *a,char *b)
「;」抜け

>FILE *fp;
>fp = fopen("calc_result.txt","w");

>int i;
iの変数宣言はfp=fopen・・・より前に

>void quick(data stu[],int from,int to){
>void quick_sub(subsort S[],int from,int to){
struct抜けてる。プロトタイプのほうだけじゃなくて、関数本体にも

>//S[pivot]の左側配列、右側配列で
>//それぞれクイックソートを行う
>if(from < i-1)
> quick(S,from,i-1);
> if(j+1 < to)
> quick(S,j+1,to);
>}
変数Sが宣言されていない。

>strcopy
strcpyの書き間違いが多すぎる。
927デフォルトの名無しさん:2007/06/23(土) 17:00:05
>>925
(1)
#include <stdio.h>
void bit_print(int x)
{
    x &= 0xffff;
    if (x > 1) bit_print(x >> 1);
    putchar('0' + (x & 1));
}
int main(void)
{
    int n;
    while (scanf("%d", &n) == 1)
        bit_print(n), putchar('\n');
    return 0;
}
928デフォルトの名無しさん:2007/06/23(土) 17:00:38
>>919
こんなに早くやってくれるとは思いませんでした。
ありがとうございます!
929デフォルトの名無しさん:2007/06/23(土) 17:12:14
[1] 授業単元: C言語
[2] 問題文(含コード&リンク):
(1)入力ファイルの中の文字、空白、タブ、改行の数を調べて表示するプログラムをかけ。
(2)入力ファイルの中の単語を切り出して、順次出力(改行区切り)するプログラムを作れ。単語の定義として、空白、タブ、改行を含まない文字列とする。
[3] 環境
 [3.1] OS: MacOSX
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 月曜までにお願いします。
[5] その他の制限:ファイルオープン-処理-ファイルにデータ書き込み-クローズの手順でかくこと。
930852:2007/06/23(土) 17:13:14
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4358.c

コンパイルエラーはすべて取り除くことが出来ました。

ありがとうございます。

実行してみたところ、最初の表示をして関数に入る前に
Floating exception というエラーが出てしまいました。
コレはどういうエラーなんでしょうか?

-- を -1 にしたところを考慮し忘れてるとかでしょうか・・
931デフォルトの名無しさん:2007/06/23(土) 17:13:57
>>929
全角文字はどう数えれば良いんだ?
ASCIIしか無い前提で良いの?
932デフォルトの名無しさん:2007/06/23(土) 17:24:42
>>956
(2)
#include <stdio.h>
void print(int n) {
    for (; n > 0; n >>= 1)
        printf("%s", (n & 1) ? "■" : "□");
    putchar('\n');
}
int main(void)
{
    int n;
    for (n = 256; n > 1; n >>= 1) print(n);
    for (; n <= 256; n <<= 1) print(n);
    return 0;
}
933デフォルトの名無しさん:2007/06/23(土) 17:26:15
>>925 (2) 題意に副えてるかわからないけど
#include <stdio.h>

void bit_print(int x){
    int i, j;

    for(i = 0; i < 32; i++)
        if(0x0001 & (x >> i)) break;

    for(j = 0; j < i + 1; j++)
        printf("%s", 0x0001 & (x >> j) == 0x0001 ? "□" : "■");
    puts("");
}

int main(void){
    int i, j, x = 256;

    for(i = 0; (x & 0x0001) != 0x0001; i++, x = x >> 1)
        bit_print(x);

    for(j = 0; j < i; j++, x = x << 1)
        bit_print(x);

    return 0;
}


>>923
べ、べつにあたしは哀れなんかじゃないんだからね!
934932:2007/06/23(土) 17:29:41
俺はとんでもないロングパスをしちまったようだぜ
935デフォルトの名無しさん:2007/06/23(土) 17:29:57
936デフォルトの名無しさん:2007/06/23(土) 17:35:15
937852:2007/06/23(土) 17:37:41
main(){

printf("このプログラムは 成績処理 を行うプログラムです。\n");
printf("[result.txt]からデータを取得し、\n[calc_result.txt]に出力します。\n");
printf("出力内容は、合計点順出力、教科毎平均点、教科毎の上位10名です。\n");

printf("\n処理中.."); //ここの改行までしかされずに表示されてしまっています。(´・ω・`)

input();

printf("..");

calc();

printf("..\n");

output();

printf("\n処理が終了しました、結果は[calc_result.txt]に出力しています。\n");

}
938デフォルトの名無しさん:2007/06/23(土) 17:38:41
>>937
fflush(stdout);をinput();の前にいれろ
939デフォルトの名無しさん:2007/06/23(土) 17:40:46
a.exe の 0x7c941010 でハンドルされていない例外が発生しました: 0xC0000005: 場所 0x00000034 を読み込み中にアクセス違反が発生しました。
940デフォルトの名無しさん:2007/06/23(土) 17:45:09
>>852
//データを構造体配列に取り込んでいく
の下のfscanfがtmpじゃなくてstu[i]になってる
941852:2007/06/23(土) 17:45:14
942852:2007/06/23(土) 17:46:41
>>940
name と id はstu[i]でいいとおもうのですが...
943デフォルトの名無しさん:2007/06/23(土) 17:47:28
失礼、tmp[i]がおかしい
944852:2007/06/23(土) 17:48:12
>>938

printf("\n まで

fflush(stdout);をinput();の前に

printf("\n処理中..");まで
945852:2007/06/23(土) 17:49:46
>>943
修正しました。ありがとうございます
946デフォルトの名無しさん:2007/06/23(土) 17:50:19
>>944
何がいいたいのかわからん
もっとお母さんみたいに言ってくれないか
947デフォルトの名無しさん:2007/06/23(土) 17:53:12
>>944
強制的に表示したいそれぞれのprintf()の後にfflush()を入れればいい。
948852:2007/06/23(土) 17:58:45
main(){ printf("このプログラムは 成績処理 を行うプログラムです。\n");
printf("\n処理中.."); fflush(stdout);//<1>
input(); printf(".."); fflush(stdout);//<2>
calc(); fflush(stdout);//<3>
printf("..\n"); fflush(stdout);//<4
output(); fflush(stdout);//<5>
printf("\n処理が終了しました、結果は[calc_result.txt]に出力しています。\n");}
-----
このプログラムは 成績処理 を行うプログラムです。

Floating exception
-----
<1> 追加
-----
このプログラムは 成績処理 を行うプログラムです。

処理中..Floating exception
-----
<2>追加
-----
このプログラムは 成績処理 を行うプログラムです。

処理中....Floating exception
-----
以下追加しても変わらず・・・、という感じです。


949デフォルトの名無しさん:2007/06/23(土) 18:00:26
次はゼロで割り算してるところを探せ
950852:2007/06/23(土) 18:00:26
>>947
その際にinputなどの関数での処理は行われているのでしょうか?
951デフォルトの名無しさん:2007/06/23(土) 18:05:53
とりあずsutudent_ave内のInteger division by zeroを直せ
952852:2007/06/23(土) 18:13:26
割り算の前に全部条件分岐( * != 0 )入れたら実行できました。
ありがとうございます
953852:2007/06/23(土) 18:16:15
ただ、出力結果がぐっちゃぐちゃでしたw
954デフォルトの名無しさん:2007/06/23(土) 19:22:25
#include <stdio.h>
#include <math.h>

#define DELTA_ERR (-1.0)

double delta(int a, int b, int c)
{
    if(pow(b, 2) - 4*a*c < 0) return DELTA_ERR;
    return sqrt(pow(b, 2) - 4*a*c);
}

int main(void)
{
    int a, b, c;

    do{
        printf("3つの係数を入力して: ");
        scanf("%d%d%d", &a, &b, &c);
        if(delta(a, b, c) == 0)
            printf("重解を持つよ!入力し直して。 \n");
        else if(delta(a, b, c) == DELTA_ERR)
            printf("虚数解を持つよ!入力し直して。\n");
    }while(!(delta(a, b, c) > 0));

    if(a == 0) return 1;

    printf("%dx^2 + %dx + %d = 0 の2つの実数解は ", a, b, c);
    printf("x = %f と x = %f", (-b + delta(a, b, c))/(2*a), (-b - delta(a, b, c))/(2*a));

    return 0;
}
955デフォルトの名無しさん:2007/06/23(土) 19:24:06
>>925 (2)シフト演算を用いて「□」と「■」を以下のように表示する。
#include <stdio.h>
int main(void) {
int x,y,i;

for(x=1,x=x<<8; x!=0; x=x>>1) {
for(y=1; y!=x; y=y<<1)
printf("□");
printf("■\n");
}

for(x=1<<7; x!=0; x=x>>1) {
for(y=1<<8; y!=x; y=y>>1)
printf("□");
printf("■\n");
}
return 0;
}
956デフォルトの名無しさん:2007/06/23(土) 19:25:17
─┼─┐─┼─  /  ,.          `゙''‐、_\ | / /
  │  │─┼─ /| _,.イ,,.ィ'    ─────‐‐‐  ・ ←>>925
  │  |  │     |  |  | イン ,'´ ̄`※   // | \
                    __{_从 ノ}ノ/ / ./  |  \
               __/}   `く((/  ./   |
      ,. ,. -‐===‐-`つ/ ,.イ    // ))  /   ∵|:・.
    〃〃〃〃     / /ミノ__  /´('´   /   .∴・|∵’
ヽ_I__I__I__I__I_I     __∠_/ ,∠∠_/゙〈ミ、、
ー{____,,.二二二二) ノ く{ヽ、/ ゙Y} ゙
 /I I I I I I    `^^'    \ !  }'
                   ,'  /
957依頼者:2007/06/23(土) 19:31:43
>>927さん、955さん。ありがとうございました。
958依頼者:2007/06/23(土) 19:32:36
[1] 授業単元: C言語演習
[2] 問題文(含コード&リンク):
(1)変数xのyビット目を0にする関数int bit_clear(int x, int y)の作成。

(2)変数xのyビット目の値を返す関数int bit_test(int x,int y)の作成。


[3] 環境
 [3.1] OS:WindowsXP
 [3.2] コンパイラ名とバージョン:visual studio.net
 [3.3] 言語:C++
[4] 期限: 07年6月25日まで
[5] その他の制限:特になし

また演算子の問題です。よろしくお願いします。
959デフォルトの名無しさん:2007/06/23(土) 19:51:28
>>958
> [1] 授業単元: C言語演習
> [3.3] 言語:C++
??

int bit_clear(int x,int y){return x&~(1<<y);}
int bit_test(int x,int y){return (x&(1<<y))>>y;}
960デフォルトの名無しさん:2007/06/23(土) 19:53:26
>>958
#include<stdio.h>

int bit_clear(int x,int y)
{
int a=1;
while(--y>0)
a*=2;
x=x^y;
return x;
}

int main(void)
{
int x,y;
printf("x:");
scanf("%d",&x);
printf("y:");
scanf("%d",&y);
putchar('\n');
printf("%dの%dビット目を0にした値は%dです。\n",x,y,bit_clear(x,y));
return 0;
}

961デフォルトの名無しさん:2007/06/23(土) 19:53:53
>>959
すごくスマートだ
962960:2007/06/23(土) 19:54:49
書いた後で>>959を見て絶望した\(^o^)/
963852:2007/06/23(土) 20:26:34
ソース http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4360.c
入力データ http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4361.txt
出力データ http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4362.txt

コンパイルのエラーは取れたのですが、
計算や出力がうまくいっていないようです(´・ω・`)
修正ポイントなどご指摘お願いします。
964デフォルトの名無しさん:2007/06/23(土) 20:40:09
>>963
似た処理が続いてるのをコピペで済ますなよ(2、3個程度ならまだいいが)
965852:2007/06/23(土) 20:41:42
とりあえず処理が出来る物を作成してから単純化できるトコはしていこうかと...
966デフォルトの名無しさん:2007/06/23(土) 20:42:37
>>963
input()内のfscanfは使用必須なんですか?
これ使わないで自分でフィールドを分割した方がいいかなと思う。
967デフォルトの名無しさん:2007/06/23(土) 20:43:41
科目を配列にしない理由がわからん
968852:2007/06/23(土) 20:44:02
形式は何でも良かったんですが
fscanfでやるっていっちゃったので・・・
969デフォルトの名無しさん:2007/06/23(土) 20:44:56
>>968
誰に。「やっぱやめました」で済む話じゃねぇの
970852:2007/06/23(土) 20:45:53
>>967
どういうかんじでしょうか?

>>969
まぁそうです・・・
971デフォルトの名無しさん:2007/06/23(土) 20:53:27
enum {
SBJ_PROG,
SBJ_EXP,
・・・・
SBJ_ENG3
MAX_SBJ
}

//学生データの構造体
struct data{
char id[8]; //学籍番号
char name[50]; //氏名
int marks[MAX_SBJ];
int sum; //合計点
int ave; //平均点
};
972デフォルトの名無しさん:2007/06/23(土) 20:54:21
ここは宿題を解くスレであって
おまえのプログラムのデバッグをするスレじゃない。
973デフォルトの名無しさん:2007/06/23(土) 20:58:54
>>959の int bit_clear(int x,int y){return x&~(1<<y);}  は
y=1 にすると2桁目が変わるようだが?
974852:2007/06/23(土) 20:59:27
コレ宿題です。
975852:2007/06/23(土) 21:00:08
976852:2007/06/23(土) 21:00:25
>>971
enum {
SBJ_PROG,
SBJ_EXP,
・・・・
SBJ_ENG3
MAX_SBJ
}

これって何でしょうか?
977デフォルトの名無しさん:2007/06/23(土) 21:03:15
>>973
「変数xのyビット目」をどう解釈するかだよね。
978デフォルトの名無しさん:2007/06/23(土) 21:08:49
[1] 授業単元:プログラム技術3
[2] 問題文(含コード&リンク):
main(int argcchar , int argv[]){
int i;

printf("%d argument(s).Yn" , argc -1);
for(i=0; i<argc; i++){
printf("argv[%d] : \"%s\"\n", i , argv[i]);
}
}


↑のプログラムを修正して入力した文字を順に出力するようにしたいのですが、エラーが
取れませんorz。助けてください。

また、引数の順序を入れ替えて、入力した文字を逆順に出力するようにしたいのですが、変数以外
何処を変更したらいいのでしょうか?for文あたりを弄っても上手くいきませんでした。


[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc 3.4
 [3.3] 言語: C
[4] 期限: 6月26日
[5] その他の制限: (ポインタを習ってるレベルです)
979デフォルトの名無しさん:2007/06/23(土) 21:11:41
>>978
> main(int argcchar , int argv[]){
main(int argc, char *argv[]){
に汁
980デフォルトの名無しさん:2007/06/23(土) 21:12:01
問題文を書け
981デフォルトの名無しさん:2007/06/23(土) 21:14:25
>>978
#include <stdio.h>
int main(int argc , char *argv[]){
int i;
printf("%d argument(s).Yn" , argc -1);
for(i=0; i<argc; i++){
printf("argv[%d] : \"%s\"\n", i , argv[i]);
}
return 0;
}
982デフォルトの名無しさん:2007/06/23(土) 23:04:06 BE:255612839-2BP(12)
次スレ立てました
C/C++の宿題を片付けます 91代目
http://pc11.2ch.net/test/read.cgi/tech/1182607405/
983デフォルトの名無しさん:2007/06/23(土) 23:16:53
[1] 授業単元:プログラム
[2] 問題文
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4363.txt
[3] 環境
 [3.1] OS:windowsXP
 [3.2] コンパイラ名とバージョン: bcc 32
 [3.3] 言語: C
[4] 期限: 6月24日
[5] その他の制限: 番兵法
984デフォルトの名無しさん:2007/06/23(土) 23:17:46
>>974 長いので分けて書く
(1)struct dataのidは8だとデータが収まらないな。
(2)input()のscanfは、fgetsにした方が良いかと思う。
input()に以下を追加
char buf[256];
char *field[9];
char *p;
int j;
以下の部分
do{
 fscanf(fin,"%s,%s..(中略).,eng3_tmp);//順次値を変数に代入していく
 i++;
を、こうしてみたらどうか
while(fgets(buf,sizeof(buf),fin) > 0){
 p = buf;
 field[0] = buf;
 j = 1;
 if (buf[strlen(buf)-1] == '\n') {
  buf[strlen(buf)-1] = 0;
 }
 while (*p != 0) {
  if (*p == ',') {
   *p = 0;
   field[j++] = p+1;
  }
  p++;
 }
985984:2007/06/23(土) 23:19:53
 strcpy(stu[i].id, field[0]);
 strcpy(stu[i].name, field[1]);
 strcpy(prog_tmp, field[2]);
 strcpy(exp_tmp, field[3]);
 strcpy(analy_tmp, field[4]);
 strcpy(circ_tmp, field[5]);
 strcpy(elect_tmp, field[6]);
 strcpy(eng2_tmp, field[7]);
 strcpy(eng3_tmp, field[8]);
抜本的には、tmp変数を使わずにfieldを直接atoiする方がいい。
.....
 i++ はループ最後でしないと、stu[0]にゴミが入る
}while(feof(fin) == 0);//ファイルの終了まで読み込み
これはwhile()を使う結果
}
だけになる
sum = i + 1 は、 sum = i でいい
986984:2007/06/23(土) 23:21:08
(3)quick()に
struct data work;
を追加
swap(&stu[i].sum,&stu[j].sum);
swap_c(stu[i].name,stu[j].name);
(途中略)
swap(&stu[i].ave,&stu[j].ave);
swap_c(stu[i].id,stu[j].id);

work = stu[i];stu[i]=stu[j];stu[j]=work;
で出来る
quick_sub()も同様
987デフォルトの名無しさん:2007/06/23(土) 23:36:21
>>983
(1)
#include <stdio.h>
int main(void)
{
    int i = 0, j, n, max = 0, graph[10] = { 0 };
    while (scanf("%1d", &n) == 1 && (n == 0 || n == 1))
        if (n == 0) graph[i]++;
        else i++;
    n = i;
    for (i = 0; i < n; i++)
        if (graph[i] > max) max = graph[i];
    for (i = 0; i < max; i++) {
        for (j = 0; j < n; j++)
            putchar(graph[j] > i ? '0' : ' ');
        putchar('\n');
    }
    return 0;
}
988デフォルトの名無しさん:2007/06/23(土) 23:47:31
>>983 2次元配列でやるのは無駄か……
#include <stdio.h>
#define ROW 128
#define COL 128
int main(void){
    int ch, x[ROW][COL], i, j, row_max = 0, col_max = 0;
    for(i = 0; i < ROW; i++) for(j = 0; j < COL; j++) x[i][j] = -1;
    for(i = 0; i < ROW; i++){
        for(j = 0; j < COL; j++){
            while((ch = getchar()) == '\n') ;
            x[i][j] = ch - '0';
            if(x[i][j] != 0) break;
        }
        if(col_max < j) col_max = j;
        if(x[i][0] != 0) break;
    }
    if(i == 0) return 1;
    row_max = i, printf(" |");
    for(i = 0; i < row_max; i++) printf(" %d", i);
    printf("\n---");
    for(i = 0; i < row_max; i++) printf("--");
    printf("\n");
    for(j = 0; j < col_max; j++){
        printf(" %d|", j);
        for(i = 0; i < row_max; i++){
            if(x[i][j] != 0) printf(" ");
            else printf(" %1d", x[i][j]);
        }
        printf("\n");
    }
    return 0;
}
989852:2007/06/23(土) 23:55:34
ありがとうございます。試してみます。
990852:2007/06/24(日) 00:04:02
idを9にして実行すると名前が文字化け(?)してしまいました・・・
991デフォルトの名無しさん:2007/06/24(日) 00:07:51
まだやってたのか・・・
992852:2007/06/24(日) 00:08:08
(2)の部分がよくわかりません、もしよろしければ回折していただけないでしょうか
993852:2007/06/24(日) 02:47:28
事故解決しました
994デフォルトの名無しさん:2007/06/24(日) 02:51:34
995デフォルトの名無しさん:2007/06/24(日) 02:51:37
自己オナニーしますた
996デフォルトの名無しさん:2007/06/24(日) 03:01:26
>>992
質問が不明なのであえて聞くが、どの辺がわからない?
(1)while(fgets(buf,sizeof(buf),fin) > 0){が判らない
(2)while (*p != 0) { ブロックが判らない
(3)fgets()が判らない
あなたの熱意は理解するので、教えて君だとは思ってない。
次スレに移動かもしれない。
997デフォルトの名無しさん:2007/06/24(日) 03:23:29
>>863
Linux雑誌とか買うとCDからブートできるLinuxついてたりする
K Desktopとか
もしくはなんかネットでLinux手に入れて自分でブートCD作っちゃうとか
998デフォルトの名無しさん:2007/06/24(日) 04:21:47
>>929
字句解析の基礎だな
問題点は>>931の指摘通り

(2)
int main(int argc, char **argv){
char c;
FILE *fp = NULL;

if((fp = fopen(argv[1], "rb")) == NULL) return -1;

while((c = fgetc(fp)) != EOF){
if(isspace(c)) // 空白読み飛ばし
continue;

if(isalpha(c) || c == '_'){
do {
printf("%c", c);
c = fgetc(fp);
if(!(isalnum(c) || c == '_')){
ungetc(c, fp);
break;
}
} while(1);
printf("\n");
}
}
fclose(fp);
return 0;
}
999デフォルトの名無しさん:2007/06/24(日) 04:27:44
1000デフォルトの名無しさん:2007/06/24(日) 04:31:29
>>961
スマートというか他に書きようがない
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。