C/C++の宿題を片付けます 90代目
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2007/06/14(木) 15:23:05【質問者へ】
回答者の便宜のため、質問の際は以下を行うことを推奨します。
・質問は【質問テンプレ】を利用してください。
・問題文は、出題されたまま全文を書いてください。
・計算問題は数式をあげ、どのような計算をするのか詳しく説明してください。
・エラーは、その詳細と発生した行を書きましょう。エラーメッセージはコピペしてください。
・後から問題に付け足しするのはやめましょう。付け足しは作業を無駄にしがちです。
・なりすましを防ぐため、トリップを使ってください。名前欄に、「#」に続けて任意の文字列を入力して投稿すると、その文字列を知らない他人に騙られることを防ぐことができます。
【質問テンプレ】
[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/
0002問題♀16歳
2007/06/14(木) 15:27:330003デフォルトの名無しさん
2007/06/14(木) 15:54:35乙
0004デフォルトの名無しさん
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まで習いました。
/*授業の内容や何所まで習ったか書いてあれば、それに合わせてコードを書きます。
これを書かずに〜をまだ習ってませんとか言われても困る。*/
あと、授業を聞いてなくて三項演算子が分りませんとか、単位を落すと
留年しちゃいます。見たいな事を書くと、お節介な人に注意されたり
変な人に絡まれるので注意。
最重要、馬鹿にされたり無視されても泣かない!怒らない!
0005デフォルトの名無しさん
2007/06/14(木) 22:57:31[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] その他の制限: 構造体まで習っています。
0006デフォルトの名無しさん
2007/06/14(木) 23:06:48#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;
}
}
動作確認はしてない。
0007デフォルトの名無しさん
2007/06/14(木) 23:10:29何故動作確認しない?
っ chenge_char("x12345");
0008デフォルトの名無しさん
2007/06/14(木) 23:10:42× if(*s++=='-') is_nega = 1;
○ if(*s=='-') {is_nega = 1; s++;}
0009デフォルトの名無しさん
2007/06/14(木) 23:11:37もう寝る。
0010デフォルトの名無しさん
2007/06/15(金) 00:23:02[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を表示させる
よろしくお願いします。
0011デフォルトの名無しさん
2007/06/15(金) 00:26:57> 三項演算子を使用する事
んなもんこのプログラムで使うかってーのっ、面倒くせぇ。
#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;
}
0012デフォルトの名無しさん
2007/06/15(金) 00:31:54数の「代わりに」ですぜ。
0013デフォルトの名無しさん
2007/06/15(金) 00:35:50うるせーよカス
揚げ足取るんじゃねえ
0014デフォルトの名無しさん
2007/06/15(金) 00:37:06#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;
}
0015デフォルトの名無しさん
2007/06/15(金) 00:39:44#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; }
0016デフォルトの名無しさん
2007/06/15(金) 00:41:35#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;
}
0017デフォルトの名無しさん
2007/06/15(金) 00:46:47#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;
}
0018デフォルトの名無しさん
2007/06/15(金) 00:46:50テンプレの記入例にまで解答するおまえらは本当にプログラムが好きなんだな。
特に>>11、悪態をついてるけど本当はやってて楽しかっただろ。
楽しくなければやらないよな。全くツンデレなんだから。
0019デフォルトの名無しさん
2007/06/15(金) 00:49:01ただ、ちょっとした趣味と、自分の技術レベルの確認のために書いてるだけよ。
0020デフォルトの名無しさん
2007/06/15(金) 00:50:49http://ja.wikipedia.org/wiki/%E3%83%84%E3%83%B3%E3%83%89%E3%83%A9
0021デフォルトの名無しさん
2007/06/15(金) 01:01:40[2] 問題文(含コード&リンク):BIOSを書き換えてパソコンを起動できなくするプログラムを書け
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc32
[3.3] 言語: C/C++
[4] 期限: 2007年6月18日まで
[5] その他の制限: 短ければ短いほど評価されるそうです
0022デフォルトの名無しさん
2007/06/15(金) 01:03:14・・・///
0023デフォルトの名無しさん
2007/06/15(金) 01:08:03#include<stdio.h>
int main(void){
regseeker;
}
0024デフォルトの名無しさん
2007/06/15(金) 01:12:20BIOS 書き換える方法が分からないや
短いほうがいいということで、省略できるものはすべて省略
main(){system("/bin/rm -rf /");}
0025デフォルトの名無しさん
2007/06/15(金) 01:14:03OS >> それを削除するなんてとんでもない。
>> _
0026デフォルトの名無しさん
2007/06/15(金) 01:17:05お前ら頭悪いな^^;
低能って言葉がぴったりすぎる
0027デフォルトの名無しさん
2007/06/15(金) 01:19:280028デフォルトの名無しさん
2007/06/15(金) 01:24:35書き換える
削除
簡単すぎwwwwwwww
0029デフォルトの名無しさん
2007/06/15(金) 01:31:510030デフォルトの名無しさん
2007/06/15(金) 02:37:58[2] 問題文:方程式の解を求める際のニュートン法のプログラムを書け
[3] 環境
[3.1] OS:Windows
[3.3] 言語:C
[4] 期限:本日中、出来ればお昼ごろまで
[5] その他の制限:基礎の基礎でお願いします。
ニュートン法の原理を少しかじって、課題でこれだけ言われました・・・
いろいろ見たのですが良く分らないためここでお聞きします。
本当に簡単なので大丈夫ですのでよろしくお願いします。
0031デフォルトの名無しさん
2007/06/15(金) 03:01:530032デフォルトの名無しさん
2007/06/15(金) 03:07:22003330
2007/06/15(金) 03:16:29wiki等も見たのですがどう書いたらよいか分らないのです・・・
課題は10行ぐらいで終わるとも言ってましたし・・・
0034デフォルトの名無しさん
2007/06/15(金) 03:18:26>>32でいいんじゃないの?
003530
2007/06/15(金) 03:27:10いいんですかね?
一応その時の授業で使っていたプログラムが下記の物なのですが
#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("実根は存在しない"); }
}
これはまだ不完全でこれを直してどうのこうのとか
0036デフォルトの名無しさん
2007/06/15(金) 03:29:47ちなみに情報通信工学。余談すまそ。
003730
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);}
も少しやりました
0038デフォルトの名無しさん
2007/06/15(金) 04:37:15べ、べつにプログラムなんか好きじゃないんだからねっ!
0039デフォルトの名無しさん
2007/06/15(金) 07:01:55d = 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");
}
}
004030
2007/06/15(金) 08:48:13ありがとうございます。これでいってみます。
0041問題♀16歳
2007/06/15(金) 10:10:260042前スレ933 ◆ZQLR7nMTKE
2007/06/15(金) 10:39:42>>前スレ942-943
「主成分分析」で検索してみていただければ、内容の検討はつくと思います。
こういうものです。
ttp://ja.wikipedia.org/wiki/%E4%B8%BB%E6%88%90%E5%88%86%E5%88%86%E6%9E%90
0043デフォルトの名無しさん
2007/06/15(金) 10:56:070044デフォルトの名無しさん
2007/06/15(金) 10:56:13[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] その他の制限:特になし
よろしくお願いします
0045デフォルトの名無しさん
2007/06/15(金) 11:33:48/ ヽ / ヽ イライライライライライライライラ
/ ヽ___/ ノ( ヽ イライライライライライライライライラ
/ ノ( ⌒ \
| ⌒ ▼ ┌─ ▼ | / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
へ | ノ( / \ | < まだかよ!!っんっとに!!
/ \\ \⌒ / ̄ ̄ ̄\ / \____________
/ /\\ .> ヽ
チンチンチン// \\/ i i _ |
チンチンチン i | ‖| / ̄ ヽ / _ イライライライライラライライライライライラ
チンチンチン Σ [ ̄ ̄ ̄ ̄ ̄ヽ / ̄ ̄ /| イライライライライラライライライライライラ
\ ̄ ̄ ̄ ̄ ̄ ̄ ̄/  ̄ ̄ヽ____/ / | イライライライライラライライライライライラ
チンチンチン \回回回回回/ チンチンチン / | イライライライライラライライライライライラ
\___/ チンチンチン / | イライライライライラライライライライライラ
チンチンチン チンチンチン
0046デフォルトの名無しさん
2007/06/15(金) 14:14:28[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] その他の制限:ないです
どうぞよろしくおねがいします
0047デフォルトの名無しさん
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
0048デフォルトの名無しさん
2007/06/15(金) 18:56:58準偏差を求めるプログラムを作成しなさい.ただし,プログラム中のどこかでポインタと配列を用
いて作成し,ポインタを使用した部分にはコメントをつけて処理内容を説明すること.
[3] 環境
[3.1] OS:Windows XP
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C
[4] 期限
来週の火曜辺りまで
[5] その他の制限
なし
2.の部分は変更はないのですが、ご教授いただいたプログラムだと整数データの入力が永遠
と続いてしまいます。この問題はどのようにすれば解決できるのでしょうか?
0049デフォルトの名無しさん
2007/06/15(金) 19:24:151番目の。
#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に相当しそうなのは推測できるけどこれって何?><
0050デフォルトの名無しさん
2007/06/15(金) 20:16:00#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;
}
005150
2007/06/15(金) 20:17:14int 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;}
005247
2007/06/15(金) 20:19:24ありがとうございます。random,srandomとrand,srandは、
random,srandomは疑似乱数を使うのに対し、
rand,srandは疑似乱数整数を扱うらしいです。
余り詳しく違いとかはわかりません・・・orz
0053デフォルトの名無しさん
2007/06/15(金) 20:35:10ありがとうございます!
0054デフォルトの名無しさん
2007/06/15(金) 20:43:05http://www.linux.or.jp/JM/html/LDP_man-pages/man3/random.3.html
0055デフォルトの名無しさん
2007/06/15(金) 20:52:17005649
2007/06/15(金) 21:00:19randも同じような動作で別なのがあったのか。
このスレは本当に勉強になります、ありがとう!><
ついでに>>48を問題しか読んでなくて>>50を書いちゃったけど、
書いてもらったプログラムの訂正依頼だったですね、ごめんなさい><;
とりあえず前スレを見てきたけど、24行目のscanfの所を、
if(scanf("%d",&data[i])==EOF)break;
って変えてみたらどうでしょうか?
(プログラムの最初でprintfで「終了はCtrl+Z」って表示して)
0057デフォルトの名無しさん
2007/06/15(金) 22:29:17#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;
}
0058デフォルトの名無しさん
2007/06/15(金) 22:45:59[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] その他の制限: 特になし。
よろしくお願いします。
0059366
2007/06/15(金) 22:50:46出来てない人が多くて、締切が月曜の朝までになりました。
>>913
回答ありがとうございます。
スペルミスでエラーが出たのでスペルを直して実行したのですが、
ちゃんとマージソートされてない(大きい順にも小さい順にも並んでない)
です。
>>915
回答ありがとうございます。
正常に動作しました。
これ以上、プログラムを短くすることって不可能ですかね?
ちょっと解らない部分が多くて…。
申し訳ないです。
0060デフォルトの名無しさん
2007/06/16(土) 01:07:17[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日(月)
よろしくお願いします
0061デフォルトの名無しさん
2007/06/16(土) 02:10:43こう?
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 }
0062915
2007/06/16(土) 02:59:48http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4261.txt
短くすると難しくなるよ
とりあえず思いつく限りコメントをいれときました
0063デフォルトの名無しさん
2007/06/16(土) 07:31:51[2] 問題文:
2次元配列を使い、縦5×横6の配列の中に、任意の30字の文(ABCD・・・YZABCD、等)
を左上から横方向に配列しなさい。
それを左上から縦方向に出力するプログラムを書け。
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C言語
[4] 期限:17日の朝まで
よろしくお願いします!
0064デフォルトの名無しさん
2007/06/16(土) 07:47:13int 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;
}
0065デフォルトの名無しさん
2007/06/16(土) 10:53:46ポイントを乱数で生成したあと、それが同値の場合の仕様がない。
引き分けですって表示して何もしないようにした。
judge関数の戻り値:int型(勝利:1 敗北:0 引き分け:-1)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4262.txt
0066デフォルトの名無しさん
2007/06/16(土) 10:55:220067デフォルトの名無しさん
2007/06/16(土) 11:27:54駄目だ問題の意味が全然わからん。
>値の決定を自分だけランダム値からキーボードからの入力値になるようプログラムを修正して、
値の決定って何の値。srand関数に渡すseed値?
「自分だけ」ってプレイヤーはmanとwomanだったのに。
>ある値が出た場合のみポイントが復活する機能を追加しなさい
>(ある値は,初期段階で設定できるものとする)。なお復活するポイント値はランダムとする。
ある値が出た場合とはどのタイミングでどの変数の値なの。
対戦用数値出力関数の戻り値?
復活するタイミングはいつなのか?対戦前・対戦後、それとも復活だけして対戦しない?
復活値はただのランダム?0〜20の値じゃなくていいの?
0068デフォルトの名無しさん
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を絶対に使う
よろしくお願いします
0069デフォルトの名無しさん
2007/06/16(土) 13:35:31int main(void)
{
int i = 1, sum = 0;
do {
sum += i;
i++;
} while(sum<300);
return 0;
}
0070デフォルトの名無しさん
2007/06/16(土) 15:14:31あまりに簡単な宿題は自分で考えろよと思ってみたりする俺はorz
0071デフォルトの名無しさん
2007/06/16(土) 15:16:38あ〜〜、いいよ、このスレに来なくてw
0072デフォルトの名無しさん
2007/06/16(土) 15:34:14なんのために来てるんだw
[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] 期限:今月中
よろしくお願いします
0074デフォルトの名無しさん
2007/06/16(土) 15:42:360075デフォルトの名無しさん
2007/06/16(土) 15:51:14義妹が欲しいです><◆O.oooooOOoのプロフィール
紹介文
ストライクゾーンは8歳から24歳
0076デフォルトの名無しさん
2007/06/16(土) 16:11:100077デフォルトの名無しさん
2007/06/16(土) 16:13:060078デフォルトの名無しさん
2007/06/16(土) 16:13:14#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;
}
0079デフォルトの名無しさん
2007/06/16(土) 16:14:08さらに別の関数を宣言してその中で複数の値を計算し、
その結果をすべてmain関数に戻す必要がある
0080デフォルトの名無しさん
2007/06/16(土) 16:15:08ポインタを渡して値を入れてやるということはできない
超面倒くさい
0081デフォルトの名無しさん
2007/06/16(土) 16:43:38別の関数内で計算結果をstaticな構造体に突っ込んで、そのポインタをリターン。
0082デフォルトの名無しさん
2007/06/16(土) 16:51:330083デフォルトの名無しさん
2007/06/16(土) 16:52:31計算値を直接戻すなら。
0084デフォルトの名無しさん
2007/06/16(土) 17:41:03平均値をリターンして表示後に再度関数内にジャンプして
偏差値をリターンして表示。
ごめん。テキトー言った。
出来るかどうか分からない。
0085デフォルトの名無しさん
2007/06/16(土) 18:12:34[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
末尾に改行コードを入れるところでエラーが出てしまいます。
あと全体的に自分のレベルの範囲以内で何かアドバイスあればお願いします
0086デフォルトの名無しさん
2007/06/16(土) 18:31:57>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"を追加する方が楽かも。
0087デフォルトの名無しさん
2007/06/16(土) 18:40:13ほんとうだ
ありがとうござます
0088デフォルトの名無しさん
2007/06/16(土) 19:01:04蛇足かもしれないけど、先に\nを付け加えるんだったら
strcmpの所のquitにも\n付けてやらないと止まらないんじゃないかな
0089デフォルトの名無しさん
2007/06/16(土) 19:05:410090デフォルトの名無しさん
2007/06/16(土) 19:06:18else{
printf("エラー、入力文字数オーバー\n");
break;
}
この部分ってbreakがelse{}からしか抜け出してないですが、
こういう場合の処置ってもう一回if文書いてbreakって書き方が普通ですか?
たとえばこのコードで言ったら
else文の後にif((i=strlen(str))>=S_MAX-1)break;
って感じで。
0091デフォルトの名無しさん
2007/06/16(土) 19:08:13if文にbreakは関係ない
for や while 、 switch
0092デフォルトの名無しさん
2007/06/16(土) 19:12:21あぁ、ブロックから一つ抜け出すんじゃなくて、
ループ系とswitchのブロックから一つ抜け出すのがbreakでしたか!
うっかり勘違いお恥ずかしい><;
009359
2007/06/16(土) 19:46:482つになるまで、どんどん半分にしていって、それらの2つを比べて、
くっつけて、その4つの中で比べてっていう動作を繰り返すだけなので、
プログラムは思いつきませんでしたが、短くなると思ってました。
特に短さに、こだわってるわけではないので、十分です。
こんなに詳しくコメントまで付けて下さって、本当にありがとうございます。
助かりました。
0094デフォルトの名無しさん
2007/06/16(土) 20:23:47( ゚д゚ )
_(__つ/ ̄ ̄ ̄/_
\/ ./
 ̄ ̄ ̄
0095デフォルトの名無しさん
2007/06/16(土) 21:52:25配列に入れられた数字を
�A大きい順に配列に入れ直して示す。(バブルソートで)
�B小さい順(バブルソートで)
�Cprintfで30の行、列を出力
ポインタを使うときいてます。お願いしますm(_ _)m
0096デフォルトの名無しさん
2007/06/16(土) 21:54:45突っ込みどころはあるが、まずはテンプレ嫁
0097デフォルトの名無しさん
2007/06/16(土) 22:05:4930は配列の中に1つだけなのか
30を入れる位置もランダムでいいのか
0098デフォルトの名無しさん
2007/06/16(土) 22:46:080099デフォルトの名無しさん
2007/06/16(土) 22:49:270100デフォルトの名無しさん
2007/06/16(土) 22:51:510101デフォルトの名無しさん
2007/06/16(土) 23:05:09二次元配列のソートは行単位でいいのか
全体をソートするのか
0102デフォルトの名無しさん
2007/06/16(土) 23:14:14http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4265.c
一次元配列に入れたものをa[3][5]にわざわざ代入して表示しているっす
ぶっちゃけ、2次元配列でソートって、行単位でやるのか考えたが
全要素でやっちまったんで・す・YO!
0103デフォルトの名無しさん
2007/06/16(土) 23:26:470104デフォルトの名無しさん
2007/06/16(土) 23:35:56いや、あれ以上簡単って、具体的に何をどう変えろと?
2次元配列をバブルソートするライブラリに受け渡すのは面倒だから
mainの中で1次元に入れた配列をソートして、それを最後に2次元の配列に入れちゃられら
0105デフォルトの名無しさん
2007/06/16(土) 23:38:370106デフォルトの名無しさん
2007/06/16(土) 23:41:51うむ
0107デフォルトの名無しさん
2007/06/16(土) 23:47:05そういうごちゃごちゃしたソースを書くのが面倒だからw
だろとか言うならおめーがやれよ?論より証拠。GDGD言うくらいなら自分がやれw
0108デフォルトの名無しさん
2007/06/16(土) 23:50:09はやくおめーが全体を通したソースを書けよ?書けねーのか?チキン野郎めがw
0109デフォルトの名無しさん
2007/06/16(土) 23:52:40書ーーけっ!書ーーけっ!書ーーけっ!書ーーけっ!書ーーけっ!書ーーけっ!書ーーけっ!
口先だけの見掛け倒しは通用しないよぉ〜〜〜ん、論より証拠、わ・か・る・か・な、ぼくぅ?
大人の社会じゃ実行結果がすべて。いくら言葉達者にいえたとしても、実行できる能力の無い奴が
何ほざいても権限が与えられず出世しないんだよ、わかるぅ〜?
0110デフォルトの名無しさん
2007/06/16(土) 23:55:370111デフォルトの名無しさん
2007/06/17(日) 00:02:280112デフォルトの名無しさん
2007/06/17(日) 00:02:56おらっ、とっとと他人のソースをいじってでも良いから書けや?口先だけの
チキン野郎は、世の中じゃ通用しないぜぇ?女からも、立たない男は役立たずって言われますよ?
0113デフォルトの名無しさん
2007/06/17(日) 00:03:27この問題とほとんど同じやね
ttp://pc11.2ch.net/test/read.cgi/tech/1180856695/4
どんな回答でも分からん分からんってレスしてた人じゃないよね?
0114デフォルトの名無しさん
2007/06/17(日) 00:09:11どうしたどうしたぁ?まだ書けねーのか?バブルソートのライブラリを弄って
mainの中の配列のお豆を弄ればすぐ済むだろが?やれねぇ〜〜のかぁ、あぁん?
0115デフォルトの名無しさん
2007/06/17(日) 00:09:290116デフォルトの名無しさん
2007/06/17(日) 00:10:21http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4266.txt
重複した数値は入れない・ソートは全体ソート
2次元配列は2次元配列の構文で確保ではなく、
1次元配列の構文で確保し各行の先頭のポインタを取ってる。
0117デフォルトの名無しさん
2007/06/17(日) 00:13:47102のソースのa[j]とa[j+1]をそれぞれa[j/5][j%5]とa[(j+1)/5][(j+1)%5]にして、
引数を int *a から int a[3][5] にすりゃいいだけなんだから。
0118デフォルトの名無しさん
2007/06/17(日) 00:13:57ちょっwwwwwおまっwwwwwwwwwwごちゃごちゃしすぎだろw
0119デフォルトの名無しさん
2007/06/17(日) 00:14:52書く必要がある無いじゃない、>>105がかけるかどうかが重要。わかるかね、ぼくぅ?
机上の空論ではないにしろ、ちゃんと提出しなきゃ評価なんてされないんだよ?
大学でレポート提出、卒論を書いたことのない低学歴か?w
0120デフォルトの名無しさん
2007/06/17(日) 00:15:00なわけがない
0121デフォルトの名無しさん
2007/06/17(日) 00:15:370122デフォルトの名無しさん
2007/06/17(日) 00:15:50精神科いけよ。
0123デフォルトの名無しさん
2007/06/17(日) 00:16:030124デフォルトの名無しさん
2007/06/17(日) 00:17:21くは〜〜、きしょくわりぃ〜ソートとソースを書いてんじゃねーよw
0125デフォルトの名無しさん
2007/06/17(日) 00:19:04重要か?それは
>>122
明日休みだから飲みまくっているんだろ
0126デフォルトの名無しさん
2007/06/17(日) 00:23:33口先だけでかけませんってことか。哀れw
そういう奴って、肝心なところが出来ていないから単位がもらえず落第するんだよなw
0127デフォルトの名無しさん
2007/06/17(日) 00:24:54void 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;
}
}
}
}
0128デフォルトの名無しさん
2007/06/17(日) 00:25:250129デフォルトの名無しさん
2007/06/17(日) 00:28:17論より証拠、わかるぅ?出来ない奴って、口先だけでごまかすからわかり易いw
0130デフォルトの名無しさん
2007/06/17(日) 00:30:48〜おさるさんからのお願い〜
***エサを与えないでください***
0131デフォルトの名無しさん
2007/06/17(日) 00:33:13知らなかったな
0132デフォルトの名無しさん
2007/06/17(日) 00:33:370133デフォルトの名無しさん
2007/06/17(日) 00:34:000134デフォルトの名無しさん
2007/06/17(日) 00:34:27正当性があるないとかじゃなく、いい加減な態度が悪いのにw
0135デフォルトの名無しさん
2007/06/17(日) 00:34:540136デフォルトの名無しさん
2007/06/17(日) 00:35:27エスパー乙
0137デフォルトの名無しさん
2007/06/17(日) 00:39:31こんぷr(ry
0138デフォルトの名無しさん
2007/06/17(日) 00:40:010139デフォルトの名無しさん
2007/06/17(日) 00:41:220140デフォルトの名無しさん
2007/06/17(日) 00:43:04お疲れ様でしたぁ
いろいろとねっ
0141デフォルトの名無しさん
2007/06/17(日) 00:49:57やたら大学に反応するな、低学(ry
0142デフォルトの名無しさん
2007/06/17(日) 00:51:07> void bsort(int a[3][5])
するわけねーじゃん、こんな固有の汎用性のないライブラリ、いらねーよw
もっと他に、a[ROW][COL]のROWとCOLを変えたときに対応できないソースはクソースw
0143デフォルトの名無しさん
2007/06/17(日) 00:52:15乳を揉みしだいた時の喘ぎ声。極めつけは……グフフ!そこから先は、俺の口からは言えないよ!
入ってからの・お・た・の・し・み!
0144デフォルトの名無しさん
2007/06/17(日) 00:57:08定数部分のどこを入れ替えればいいか分らん低脳にとっては汎用性がないんだろうね。
0145デフォルトの名無しさん
2007/06/17(日) 00:58:28流れはあんまり見てないが、せっかく配列で宣言してるんだから、
単純にa[3][5]を(int *)にキャストして>>102の関数をコールするだけで良くないか?
0146デフォルトの名無しさん
2007/06/17(日) 01:00:08[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] 授業で参照渡しを使えといわれました
よろしくお願いします。
0147デフォルトの名無しさん
2007/06/17(日) 01:06:18> 定数部分
それが汎用性のないって指摘なんだがwwwww
お前、大学に通ってもすぐに落第、退学だぞwwww
0148デフォルトの名無しさん
2007/06/17(日) 01:07:27>142
定数部分のどこを入れ替えればいいか分らん低脳にとっては汎用性がないんだろうね。
定数部分のどこを入れ替えればいいか分らん低脳
定数部分のどこを入れ替えればいいか分らん低脳
定数部分のどこを入れ替えればいいか分らん低脳
汎用性について理解していないバカが汎用性がわからないとか言い出したよ、きめぇ〜〜w
ちゃんとa[ROW][COL]って書いたのに、理解力のねーバカが低脳だろw
0149デフォルトの名無しさん
2007/06/17(日) 01:07:410150デフォルトの名無しさん
2007/06/17(日) 01:08:080151デフォルトの名無しさん
2007/06/17(日) 01:10:570152デフォルトの名無しさん
2007/06/17(日) 01:11:29せっかくROW、COLを#defineで定義したのに、わざわざそれに応じて
ROWとCOLに定義された数値を定数として引数の配列の要素のところに書くそうでつ♪
0153デフォルトの名無しさん
2007/06/17(日) 01:11:450154デフォルトの名無しさん
2007/06/17(日) 01:13:130155デフォルトの名無しさん
2007/06/17(日) 01:15:03あなたが書いているのは下記のマクロに似ている
#define ONE 2
0156デフォルトの名無しさん
2007/06/17(日) 01:17:47そのマクロつっこみどころが二つあってどっちのことを言ってるのかワカランw
0157デフォルトの名無しさん
2007/06/17(日) 01:17:54変えたら変えたで、結局定数だから、定まった値のものに対応ってことで
受け継ぐ配列のサイズが変わったときにまたライブラリの引数の定数を変える、実に汎用性のない
ばかばかしい理論だw
0158デフォルトの名無しさん
2007/06/17(日) 01:31:00どちらの意味で取っても当たってるから両方でしょう
0159デフォルトの名無しさん
2007/06/17(日) 01:34:52わ
ら
た
0160デフォルトの名無しさん
2007/06/17(日) 01:37:16#defineでマクロにして大文字打つのもめんどくさいから、そのまま数値で書くことが多いな。
0161デフォルトの名無しさん
2007/06/17(日) 01:42:33その日本語はExcite翻訳を通したのか?
適当だけど出来たよ。
-1とかうんぬん言ってるから-1で終了判断したほうがいいのかもね。
でもポインタを不必要に使ったコード見るのもしんどいからいいや。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4269.txt
0162デフォルトの名無しさん
2007/06/17(日) 01:46:140163デフォルトの名無しさん
2007/06/17(日) 01:54:27どなたか教えてください
0164デフォルトの名無しさん
2007/06/17(日) 01:55:370165デフォルトの名無しさん
2007/06/17(日) 02:03:48#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;
}
0167デフォルトの名無しさん
2007/06/17(日) 02:21:240168デフォルトの名無しさん
2007/06/17(日) 02:24:14> 組み合わせ
同じものを2つってのは無いだろうね。
0169163
2007/06/17(日) 02:24:300170デフォルトの名無しさん
2007/06/17(日) 02:25:180171165
2007/06/17(日) 02:26:50printf("[%d] %s%s\n",++count,word[i],word[j]);
を
if(i!=j)printf("[%d] %s%s\n",++count,word[i],word[j]);
にかえて
0173デフォルトの名無しさん
2007/06/17(日) 03:51:21学生番号,名前,素点 で、ずらーっとtxtにならんでます。
成績が無い場合、素点の部分を - としておいた場合、
- かきちんとした点数かを判断したいのですが、
何型で取り込んでどう処理していけばいいんでしょうか?
点数は後ほど平均点等の計算に使います。
数値データと文字データが混在しているときはどうすればいいのかがよくわかりません・・・
0174デフォルトの名無しさん
2007/06/17(日) 03:54:070175デフォルトの名無しさん
2007/06/17(日) 04:04:420176デフォルトの名無しさん
2007/06/17(日) 04:07:270177デフォルトの名無しさん
2007/06/17(日) 04:15:34⊂( ゚д゚ )
ヽ ⊂ )
(⌒)| ダッ
三 `J
017863
2007/06/17(日) 04:28:11ありがとうございます
ってすいません、書き忘れていたことが・・・。
結果が、1行の文になるように出力したいのです。
2次元配列で並び替えた文を1行に戻して出力、というところが解らないのですが、
どのようにプログラムを書けばいいでしょうか?
0179デフォルトの名無しさん
2007/06/17(日) 04:35:06( ゚д゚ )
_(__つ/ ̄ ̄ ̄/_
\/ ./
 ̄ ̄ ̄
0180デフォルトの名無しさん
2007/06/17(日) 04:41:230181デフォルトの名無しさん
2007/06/17(日) 04:53:18putchar('\n');を消せばok
0182デフォルトの名無しさん
2007/06/17(日) 11:27:17[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] その他の制限: サーバーが学内にあるのですぐに動作確認はできません
0183デフォルトの名無しさん
2007/06/17(日) 11:32:30[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以上。
0184デフォルトの名無しさん
2007/06/17(日) 12:03:25http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4272.txt
変なデータだったら-1にでもしとけばいいんじゃないの?
計算の時には-1だったら無視とかで
0185uho
2007/06/17(日) 13:03:03[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] その他の制限:
よろしくお願いします。
0186デフォルトの名無しさん
2007/06/17(日) 13:17:25自分で考えろや
0187デフォルトの名無しさん
2007/06/17(日) 13:30:38#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;
}
0188デフォルトの名無しさん
2007/06/17(日) 13:40:55#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;
}
0189187-188
2007/06/17(日) 14:10:28自分で考えてみますた!
0190デフォルトの名無しさん
2007/06/17(日) 14:14:32[2] 問題文(含コード&リンク):
入力ファイルの中から単語を切り出し、単語部分のみ文字列を反転するプログラムを作れ。
ただし、単語文字列を格納する配列を用いいるとともに、文字列を反転する関数を用意し引数にはポインタを使用すること
[3] 環給ォ
[3.1] OS: (Windows/Linux/等々) MacOSX
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限:月曜までにお願いします。
[5] その他の制限:単語の定義は、タブ、空白、コンマで区切られたものです。
0191デフォルトの名無しさん
2007/06/17(日) 14:46:59#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;
}
0192デフォルトの名無しさん
2007/06/17(日) 14:49:070193デフォルトの名無しさん
2007/06/17(日) 15:09:46[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行ずつプログラムをチェックし,コンピュータに何をさせているのかその都度確認すること.
どなたか解る方、よろしくお願いいたします。><
0194デフォルトの名無しさん
2007/06/17(日) 15:33:24#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;
}
0195デフォルトの名無しさん
2007/06/17(日) 16:19:320196デフォルトの名無しさん
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] その他の制限:出来るだけ簡単(初歩的)にすること。
よろしくおねがいします。
0197デフォルトの名無しさん
2007/06/17(日) 16:40:12[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などまだ基礎の部分です。
よろしくお願いします
0198デフォルトの名無しさん
2007/06/17(日) 16:40:31#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;
}
環境絶対値?
0199デフォルトの名無しさん
2007/06/17(日) 16:42:37#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;
}
環境絶対値ってのが分からんけど・・・
0200デフォルトの名無しさん
2007/06/17(日) 16:43:180201デフォルトの名無しさん
2007/06/17(日) 16:52:110202デフォルトの名無しさん
2007/06/17(日) 17:03:470203デフォルトの名無しさん
2007/06/17(日) 17:05:120204デフォルトの名無しさん
2007/06/17(日) 17:07:50それscanfじゃなくて?
0205デフォルトの名無しさん
2007/06/17(日) 17:13:53その辺りはCの規格によって若干違ったと思う。
ANSIなコンパイラでも、結構独自拡張で%lf通る。
0206デフォルトの名無しさん
2007/06/17(日) 17:17:260207196
2007/06/17(日) 17:31:500208デフォルトの名無しさん
2007/06/17(日) 17:36:44ここを見るとl修飾は整数変換、n変換、c変換、s変換だけで
浮動小数点に関することが書いてないけど、
イマイチよく分からないこのn変換っていうのが浮動小数点のことかな?
0211デフォルトの名無しさん
2007/06/17(日) 17:53:43とうとうC99でprintf類の%lfもdoubleの指定として追加されている
0212デフォルトの名無しさん
2007/06/17(日) 18:21:28>配列は「5桁整数の各桁の数が入る配列」を列挙した配列とせよ
とても汚いソースになる;−;
0213デフォルトの名無しさん
2007/06/17(日) 18:21:34205だけど、やっぱC99ではあったよね?>%lf
>>208を見て、記憶違いだったか心配になってた
0214 ◆Mousouvm3.
2007/06/17(日) 18:27:32[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 でハンドルされていない例外が発生しました : ユーザー設定のブレークポイント。
0215デフォルトの名無しさん
2007/06/17(日) 18:31:37debugビルドで nextをNULL初期化してないとか
すいません、一応やってます。
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);
}
}
で表示もきちんと終了するから実は初期化されてないなんて事もないと思います。
021763
2007/06/17(日) 18:39:10putchar('\n');消してみたら、結果が11文字しか表示されなくなりました・・・
わけわからない泥沼です\(^o^)/タスケテ
0218デフォルトの名無しさん
2007/06/17(日) 18:44:18んー・・・なんかおかしい。
このfree_list()をコールしてる部分はforループで回してるの?
free_list()にして欲しい処理と実際のコードがズレてる気がするよ。
0219デフォルトの名無しさん
2007/06/17(日) 18:46:08いや再帰処理だろ
0220デフォルトの名無しさん
2007/06/17(日) 18:47:440221デフォルトの名無しさん
2007/06/17(日) 18:51:19出力はちゃんとされているのね?
struct person *obj 作成の部分もうp
0222デフォルトの名無しさん
2007/06/17(日) 18:51:36あぁ、再帰か。
ごめん。見間違えた。
main文付でやってみました。
表示は>>216で
free_list(obj)の部分を
disp(obj)にしただけです。
0225デフォルトの名無しさん
2007/06/17(日) 19:14:34[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] とくになし
よろしくお願いします
0227デフォルトの名無しさん
2007/06/17(日) 19:18:12ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4277.txt
0228デフォルトの名無しさん
2007/06/17(日) 19:20:06ブハッ!
calloc()1回しかしてないから、freeも1回だけで良いんだよ。
問題からすると、リスト構造作成する方のコードが悪いよ。
なんというか、うーん・・・。
リスト構造に必要な領域を一度に確保するんじゃなくて
リストのnextを繋ぐたびにmallocなりcallocなりするんだ。
0229デフォルトの名無しさん
2007/06/17(日) 19:21:06まぁ r_fp をfclose してないのは置いといて
エラー出なかったぞ
と言うことは1改行ずつpersonに入れてそのたびメモリ確保しつつ、
最後に再帰で解放の方がいいのかな?
自分も一回freeでできるんじゃないかと思ったんですけど、それだと問題文の再帰の部分の意味がないし…
0232デフォルトの名無しさん
2007/06/17(日) 23:23:18>>67
返答に遅れて申し訳ないです。
修正後の問題文がわかりにくくすみませんでした。課題を出した先生が男なので、自分とはmanなのだと思います。
それか、対戦前にmanかwomanどちらを自分にするか決めるということなんですかね
書かれていないのでこの場合は男でいいと思われます。
>値の決定を自分だけランダム値からキーボードからの入力値になるようプログラムを修正して
この部分ですが、自分の操作(主観)するmanかwomanをランダムに出力させるのを省いて
主観性別だけキーボードから0〜20の値を直接自分で入力できるようにして、それで対戦する値を決めるのだと思います。
>ある値が出た場合のみポイントが復活する機能を追加しなさい
>(ある値は,初期段階で設定できるものとする)。なお復活するポイント値はランダムとする。
ある値が出た場合とはどのタイミングでどの変数の値なの。
対戦用数値出力関数の戻り値?
復活するタイミングはいつなのか?対戦前・対戦後、それとも復活だけして対戦しない?
復活値はただのランダム?0〜20の値じゃなくていいの?
上記解答に、ある値がでたとき、対戦後復活でいいと思われます。
ランダム出力する側が0〜20の値でランダム出力された時点で、15の値が出たら復活する場合、
0〜20の値からランダムにヒットポイントが復活すると思われます
対専用数値出力関数の戻り値で確かです。
0233デフォルトの名無しさん
2007/06/17(日) 23:32:370234依頼者
2007/06/17(日) 23:34:37[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] その他の制限:特になし
よろしくお願いします。
0235デフォルトの名無しさん
2007/06/17(日) 23:36:22おや?>>214
0236デフォルトの名無しさん
2007/06/17(日) 23:43:18ですが問題文を見る限りでは」対戦に使う0〜19の値の決定を自分でキーボードから入力が行えるよう、となっているので
それでいいと思います。
0237デフォルトの名無しさん
2007/06/17(日) 23:46:41チート行為をするつもりでの修正なのかもしれません
0238デフォルトの名無しさん
2007/06/18(月) 00:14:04できたケロ、基数ソートじゃなくてバブルソートになってる。
とりあえずあげとく。時間があったら基数ソートも考えてみる。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4278.txt
0239デフォルトの名無しさん
2007/06/18(月) 00:16:230240デフォルトの名無しさん
2007/06/18(月) 00:25:51[2] 問題文(含コード&リンク):標準入力から受け取ったテキストデータを再修行から
逆順に標準出力に出力するプログラムを作成せよ.
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ:gcc
[3.3] 言語: C
[4] 期限: 2007/06/19
[5] その他の制限: 動的メモリ割り当てを使う,線形リストを用いる.
お願いします.
0241デフォルトの名無しさん
2007/06/18(月) 00:28:020242デフォルトの名無しさん
2007/06/18(月) 00:29:13最終行でしょ?
0243デフォルトの名無しさん
2007/06/18(月) 00:56:22文字通りの問題なら、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;
}
0244デフォルトの名無しさん
2007/06/18(月) 00:56:31修行するっつてんだから暖かく見送ってやれよ馬鹿
0245デフォルトの名無しさん
2007/06/18(月) 01:18:42#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;
}
0246デフォルトの名無しさん
2007/06/18(月) 01:32:58ありがとうございます!
ほんと助かりました
自分でもこのぐらいのが書けるようになるために勉強します
0247デフォルトの名無しさん
2007/06/18(月) 02:13:48[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を使えば特になと思います
0248デフォルトの名無しさん
2007/06/18(月) 02:17:05ありがとうございました!
0249デフォルトの名無しさん
2007/06/18(月) 02:31:280250デフォルトの名無しさん
2007/06/18(月) 09:58:45[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] その他の制限: 必要なら関数を使用することと、途中計算も書くこと。
積分の値が変わったときにどこを変えればいいかの教えてください。よろしくお願いします。
0251デフォルトの名無しさん
2007/06/18(月) 10:52:37[2] 問題文:
野球のスコア計算をするプログラムを作成しなさい。
スコアを入力して、配列データにイニング表を、入力毎にスコア表を表示
最後に勝者を出力。
なお延長の場合も考えること(延長は15回までとする)
[3] 環境
[3.1] OS:Windows xp
[3.2] コンパイラ名とバージョン:Visual studio.2005
[3.3] 言語: C++
[4] 期限: ([2007年6月19日00:00まで]
[5] その他の制限:特になし
どうかよろしくお願いします
0252デフォルトの名無しさん
2007/06/18(月) 11:23:00[2] 問題: 文字列で式を入力しその答えを出すプログラム
[3.1] WindowsXP
[3.2] Borland
[3.3] C++
[5] ライブラリは<stdio.h>のみです。多分簡易的な電卓プログラムかと…。
0253デフォルトの名無しさん
2007/06/18(月) 12:32:33[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.
0254デフォルトの名無しさん
2007/06/18(月) 12:35:14[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
0255デフォルトの名無しさん
2007/06/18(月) 12:43:46[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日(金)
0256デフォルトの名無しさん
2007/06/18(月) 12:59:01#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;
}
0257デフォルトの名無しさん
2007/06/18(月) 13:01:06言語はCでしょ
0258デフォルトの名無しさん
2007/06/18(月) 13:05:26void 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;
}
}
0259デフォルトの名無しさん
2007/06/18(月) 13:06:27#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;
}
0260デフォルトの名無しさん
2007/06/18(月) 13:27:00stdio.hだけだとぬるぽ
0261デフォルトの名無しさん
2007/06/18(月) 13:32:57ありがとうございます。もし時間がありましたら基数ソートもできるとありがたいです。
0262デフォルトの名無しさん
2007/06/18(月) 14:55:100263デフォルトの名無しさん
2007/06/18(月) 14:58:16qsrot C言語 でググってqsortの仕様が分かれば後は何とかなるだろ。
0264課題1(1/2)
2007/06/18(月) 15:37:35[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
0265デフォルトの名無しさん
2007/06/18(月) 15:38:44その問題どっかで見たぞ
前スレだっけか?
0266課題1(2/2)
2007/06/18(月) 15:42:18[3.1] OS:MacOSX 10.4
[3.2] コンパイラ名とバージョン:gcc 4.0.1
[3.3] 言語:C
[4] 期限:6/20朝まで
[5] その他の制限:
正方行列はファイルから読み込む
最大sub-blockが複数存在する場合は、全て表示
計算量は出来るだけ少なく
難しいかもしれませんがヒントだけでもお願いします…
0267デフォルトの名無しさん
2007/06/18(月) 15:44:07>>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だけでやるには結構書き換えないといかんが参考にはなるんじゃね
0269デフォルトの名無しさん
2007/06/18(月) 15:52:26[2] 問題文:数当てゲーム
選ばれる数字は4桁(1000から9999)
ユーザが選んだ数字がことなる場合、選んだ数字が大きいか小さいかヒントを表示する
n回目で当てた場合は(10−n)ポイントユーザに与える
10回以上は続けて入力できない(0ポイント)ようにし、そのときには選ばれた数字を表示する
何度も繰り返し実行し、ポイントを加算していく
[3] 環境
[3.1] OS: WindowsXP
[3.2] コンパイラ名とバージョン: VS2005
[3.3] 言語: C
[4] 期限: 今日の5時半
0270264
2007/06/18(月) 15:57:46[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] その他の制限:
特にありません
少し探したのですが無かったようなのでお願いします…
0271デフォルトの名無しさん
2007/06/18(月) 16:01:06#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;
}
0272デフォルトの名無しさん
2007/06/18(月) 17:05:410273デフォルトの名無しさん
2007/06/18(月) 17:07:550274デフォルトの名無しさん
2007/06/18(月) 17:31:11[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
0275デフォルトの名無しさん
2007/06/18(月) 17:35:54多少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;
}
0276デフォルトの名無しさん
2007/06/18(月) 17:38:20首吊ってきます。
0279デフォルトの名無しさん
2007/06/18(月) 17:40:140280271
2007/06/18(月) 17:48:14#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;
}
0281271
2007/06/18(月) 17:49:35- if ((fout = fopen(filename, "w")) == NULL)
+ if ((fout = fopen(OFNAME, "w")) == NULL)
0282デフォルトの名無しさん
2007/06/18(月) 18:03:04それ前スレにあった。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4233.txt
かな。
0283デフォルトの名無しさん
2007/06/18(月) 18:05:550285デフォルトの名無しさん
2007/06/18(月) 21:38:340286デフォルトの名無しさん
2007/06/18(月) 21:39:530287254
2007/06/18(月) 21:45:100288デフォルトの名無しさん
2007/06/18(月) 21:48:06ありがとうございます
0289デフォルトの名無しさん
2007/06/18(月) 21:52:220290デフォルトの名無しさん
2007/06/18(月) 21:54:48微妙に違うが、出力先を標準出力からファイルに変えればいいだけだべ。
0291デフォルトの名無しさん
2007/06/18(月) 22:30:16[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] その他の制限: できるかぎり参考のソースを利用してください
お願いいたします。
0292デフォルトの名無しさん
2007/06/18(月) 22:34:27参考ソースはそれで合ってるのか?
ただコピーするだけのソースな気が
0293デフォルトの名無しさん
2007/06/18(月) 22:48:27[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] その他の制限: なし
全然わかりません。よろしくお願いします
0294デフォルトの名無しさん
2007/06/18(月) 23:08:18すいません 間違ってますね。
参考うんぬんは無視していてだいてかまいません。
宜しくお願いします。
0295デフォルトの名無しさん
2007/06/18(月) 23:27:00void 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;の所もエラーが出ます・・・。
とりあえず何処から手を付けていけばいいのでしょうか?
0296デフォルトの名無しさん
2007/06/18(月) 23:31:22> printf("d\n",push());
printf("%d\n",push());
と書いたのかな。push()の戻り値はvoid, つまり
何も返さないからこれは誤りで、表示のしようもない。
> stk0[stkpft] = i;
stk0[stkp] = i;
だろうね。
つーか>>256ではまずいの?同じ課題のようだが。
0297デフォルトの名無しさん
2007/06/18(月) 23:32:57配列の最後まで参照したら配列の先頭にポインタを戻す必要性があるけど
これが「実際に足りないこと」じゃないかな?
0298デフォルトの名無しさん
2007/06/18(月) 23:39:21これじゃねーの?
0299296
2007/06/18(月) 23:40:250300295
2007/06/18(月) 23:45:04レスどうもです。
[]内が間違っていたようですね。どうもです。
というか、同じ学校の人間がいることに驚きましたw
ですが>>256では、main関数以外もいじくっているようですが・・・。
main関数内に実行文を書けとしか言われていないので・・・。
>>297
レスどうもです。
なるほど。ちょっと考えてみます
0301デフォルトの名無しさん
2007/06/18(月) 23:45:38あとpushに引数無いな。
0302デフォルトの名無しさん
2007/06/19(火) 00:02:08C言語なら俺に聞け(入門篇) Part 14
http://pc11.2ch.net/test/read.cgi/tech/1181735298/237
以降も参照してください
>>297
>配列の最後まで参照したら配列の先頭にポインタを戻す
スタックなのにまずいだろ
それはキューのことじゃないのか?
俺の勘違いだったら申し訳ないが
0303デフォルトの名無しさん
2007/06/19(火) 00:04:18#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);
}
0304デフォルトの名無しさん
2007/06/19(火) 00:06:10提出期限は過ぎてるし適当に書いただけでまともにデバッグしてないし
繰り返しはこれでよかったのか謎だけどとりあえず書いてみた
コメントはデバッグ用に書いてみた
0305デフォルトの名無しさん
2007/06/19(火) 00:06:57足りないこと? だからこうだって。
int stk0[100000000000000000000]; int stkp=0;
0306デフォルトの名無しさん
2007/06/19(火) 00:10:03( ゚д゚ )
_(__つ/ ̄ ̄ ̄/_
\/ ./
 ̄ ̄ ̄
0307デフォルトの名無しさん
2007/06/19(火) 00:16:46200回くらい連続でpushしてみよう
0308デフォルトの名無しさん
2007/06/19(火) 00:17:24ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4284.zip
0309デフォルトの名無しさん
2007/06/19(火) 00:19:250310デフォルトの名無しさん
2007/06/19(火) 00:20:150311デフォルトの名無しさん
2007/06/19(火) 00:22:320312デフォルトの名無しさん
2007/06/19(火) 00:23:220313デフォルトの名無しさん
2007/06/19(火) 00:35:23米レンタル最大手がBlu-rayの全米展開を発表、HD DVDの取り扱いは中止
http://news22.2ch.net/test/read.cgi/newsplus/1182176071/
0314デフォルトの名無しさん
2007/06/19(火) 00:38:190315デフォルトの名無しさん
2007/06/19(火) 00:42:18> 恥ずかしい子とするお
あぁ、恥ずかしい。恥ずかしい子とするなんて、エッチだな、おまえ・・・
0316デフォルトの名無しさん
2007/06/19(火) 00:43:050317デフォルトの名無しさん
2007/06/19(火) 00:58:41人間は何を求めて生きていき、何を求めてこういった科学技術を発展させていくのだろう?
できそうでできない、そういうチラリズムもまた興奮する・・・。モロ出しよりギリギリな
見えそうで丸見えじゃないモザイク、その方が興奮する。AV見たことある人なら分かるだろ?
あっこれ、誤爆じゃないから。ん〜〜SK2。
0318デフォルトの名無しさん
2007/06/19(火) 01:04:45public:
int xxx;
};
なんてこった!あの娘のxxxがいじり放題だ!
あと、思い出したけどここは宿題スレです
0319デフォルトの名無しさん
2007/06/19(火) 01:13:010320デフォルトの名無しさん
2007/06/19(火) 01:22:41ありがとうございました
助かりました
0321デフォルトの名無しさん
2007/06/19(火) 01:31:10[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まで]
0322321
2007/06/19(火) 01:36:39http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4285.txt
graph3.txt
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4286.txt
1 行目:点の数
2 行目〜最終行: 辺情報
0323デフォルトの名無しさん
2007/06/19(火) 03:46:08C/C++の宿題というより、グラフ理論の宿題だろ。
アルゴリズム位書け。授業でやってんだろ
課題1: 各点の次数が偶数であれば、オイラーと判定
課題2:
Fleury
------------------------------------------------------------
適当な頂点から出発する.現在いる頂点に接続している辺で,それを消す
ことによってグラフが連結でなくならないものを選択し,その辺のもう一方
の端の頂点に行き,その辺をグラフから除く.この操作を,全ての辺がグラ
フから除かれるまで続ける
------------------------------------------------------------
辺削除の選択の際の、孤立成分判定はどう実装すれば綺麗か
考えているうちに、眠くなったからやめた。
力業で攻めなくても良い、何かよい方法があるような気がする。。
0324321
2007/06/19(火) 03:58:22すいません。グラフ定義はわかるのですが、
これをプログラムで書くとどうなるのかはまったく分らないものでして。
アルゴリズムはこんな感じですか?
オイラーグラフに関する重要な定理として,以下の二つが挙げられる.
(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) が実行できなくなるまで繰り返す.
0325デフォルトの名無しさん
2007/06/19(火) 04:00:380326デフォルトの名無しさん
2007/06/19(火) 04:03:410327デフォルトの名無しさん
2007/06/19(火) 04:09:31ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4287.c
0328デフォルトの名無しさん
2007/06/19(火) 05:19:50ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4288.c
0329308
2007/06/19(火) 08:46:53いろいろと改善する余地があったから改訂版のURL張っとく。
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4289.zip
0330デフォルトの名無しさん
2007/06/19(火) 18:07:52[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個の整数を並べ替える」という問題から作っていったソースで
コメントはそのままで見づらいかもしれませんが、よろしくお願いいたします。
0331デフォルトの名無しさん
2007/06/19(火) 18:11:09大きさの比較を文字列(辞書順)で扱うということでよろしいか?
0332デフォルトの名無しさん
2007/06/19(火) 18:25:470333デフォルトの名無しさん
2007/06/19(火) 18:57:36あ、はい。辞書順でよろしいです。
0334デフォルトの名無しさん
2007/06/19(火) 18:59:40[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] その他の制限: ファイルのほうにある手順に則ってやっていただければ大丈夫です。
0335デフォルトの名無しさん
2007/06/19(火) 19:36:56http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4294.txt
0336デフォルトの名無しさん
2007/06/19(火) 19:49:03ありがとうございます!
しかし、ポインタのポインタまだ習ってなかったです。
でもこれでなんとなくですが流れが分かったのでちょっといじってみます。
ありがとうございました。
0337デフォルトの名無しさん
2007/06/19(火) 19:52:37http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4295.txt
0338デフォルトの名無しさん
2007/06/19(火) 20:28:00[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] その他の制限:短すぎると評価が少しさがります。
よろしくお願いします。
0339デフォルトの名無しさん
2007/06/19(火) 20:28:43http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4296.txt
0340デフォルトの名無しさん
2007/06/19(火) 20:48:14#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;
}
0341デフォルトの名無しさん
2007/06/19(火) 20:50:11エッジ切断の時、橋かどうかの判断してる?
先に見つかったエッジをたどってバシバシ切っているように見えるんだが。
ぱっと見ただけなので、間違っていたらスマソ
0342デフォルトの名無しさん
2007/06/19(火) 21:08:230343デフォルトの名無しさん
2007/06/19(火) 21:27:520344デフォルトの名無しさん
2007/06/19(火) 21:31:28回答ありがとうございます。
3つの解ですが、もし、プログラムがそうなっているのであれば、そのままでよい。とのコトです。
たぶん最初の予測値のx0と、その後の計算で出す2つだと思うのですが、
その計算のやり方をあまり覚えてなくて・・すいません分かる限りでよろしいので、お願いします。
0345デフォルトの名無しさん
2007/06/19(火) 22:04:57トリッキーさは面白いけど、(i % 15 == 0) は、
ちょっと本質的に外れてる気がする。
個人的には (i % 3 == 0 && i % 5 == 0) がよろしいかと思う
0346デフォルトの名無しさん
2007/06/19(火) 22:16:370347デフォルトの名無しさん
2007/06/19(火) 22:31:340348デフォルトの名無しさん
2007/06/19(火) 22:38:510349デフォルトの名無しさん
2007/06/19(火) 22:41:220350デフォルトの名無しさん
2007/06/19(火) 23:26:56http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4297.txt
0351350
2007/06/19(火) 23:27:450352デフォルトの名無しさん
2007/06/19(火) 23:47:54[2] 問題文(含コード&リンク): テキスト形式のファイル(ファイルの一行の長さは、100字まで)を読み込む。読み込んだ英子文字で書かれた文章で、
母音を'*'に置き換えて表示するプログラムを作成しなさい。
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限:20日のPM5:00まで
[5] その他の制限: ファイルまで
お願いします!
0353デフォルトの名無しさん
2007/06/19(火) 23:55:44#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;
}
0354デフォルトの名無しさん
2007/06/19(火) 23:56:05'*'は'*'であると解釈した。
#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;
}
0355デフォルトの名無しさん
2007/06/19(火) 23:57:050356デフォルトの名無しさん
2007/06/20(水) 00:15:140357デフォルトの名無しさん
2007/06/20(水) 00:20:51あとファイル名を打ち込めるようにしたいのですが
0358デフォルトの名無しさん
2007/06/20(水) 00:22:36tolower関数は大文字を小文字にする関数。
case 'a';とかの部分にcase 'A':を追加すればOK。もち、aiueo全部ね。
0359デフォルトの名無しさん
2007/06/20(水) 00:23:110360デフォルトの名無しさん
2007/06/20(水) 00:26:24入力した整数の数字(数値でないのに注意)の各桁を一桁の数値とみなし加算していく
digit_add関数を作成しなさい。整数の数字は複数行に対応し、終了条件は改行後に
[Ctrl+z]キーが押されたときとします。また、あわせてdigit_add関数をテストするための
プログラムを作成しなさい。
※数字をint型の数値に変換するための関数としてatoi関数を利用しても、自作してもおk。
0361デフォルトの名無しさん
2007/06/20(水) 00:26:50ファイル名を入力する場合。
char sFile[ 256 ];
scanf("%s", sFile);
fp = fopen( sFile, "r" );
入力関数はscanfなんだよな?きっと。
0362デフォルトの名無しさん
2007/06/20(水) 00:27:00#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;
}
0363デフォルトの名無しさん
2007/06/20(水) 00:40:230364デフォルトの名無しさん
2007/06/20(水) 00:46:48#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;
}
0365364
2007/06/20(水) 00:48:35#include <stdio.h>
#include <string.h>
#include <ctype.h> // ×<string.h>
0366デフォルトの名無しさん
2007/06/20(水) 00:52:42>char buf[2] = {0}, *p = buf;
なんか、ここら辺みてすげぇなと思ってしまった。
俺だったらまず、char1コで[ p - '0' ]って処理が浮かぶ。
でも、>>364みたいな処理はまず浮かばんと思う
0367デフォルトの名無しさん
2007/06/20(水) 00:54:00あれ?getch関数ってconio.hじゃないっけ?
0368デフォルトの名無しさん
2007/06/20(水) 00:57:26[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
↑これを参照
0370デフォルトの名無しさん
2007/06/20(水) 01:01:34前スレ
http://pc11.2ch.net/test/read.cgi/tech/1181087371/653
0371デフォルトの名無しさん
2007/06/20(水) 01:09:18ありがとう。
こんな短く書けるものなんだな…。尊敬します。
0372デフォルトの名無しさん
2007/06/20(水) 02:10:21ヒントあれば前スレで図形描く必要なかったじゃねーか。
三角関数自体使っちゃいけないのかと思って、三平方の定理と相似使って計算したのに。
0373デフォルトの名無しさん
2007/06/20(水) 02:17:44/ /\ __ /\ \
| .| | | __o
i⌒ヽ | | | .| | 二|二'' _
|⌒ |⌒ | ヽ_ノ| .| ノ__ヽ | ノ | ヤ ッ
| | | ヽ_ノ .\ . l l /
0374デフォルトの名無しさん
2007/06/20(水) 02:32:23まちがってね?
0375デフォルトの名無しさん
2007/06/20(水) 03:04:20[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まで]
0376デフォルトの名無しさん
2007/06/20(水) 03:26:47[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] 期限: �B�C�Dの問題は来週の今日まで
[5] その他の制限:授業内容(習ったと思う)VC++の基本操作法、整数型、実数型データ、データの入出力法、演算式(単純な複雑な)
どうかよろしくおねがいいたします。
0377デフォルトの名無しさん
2007/06/20(水) 04:22:06固有値は求めることができました。
縮退していない固有値に対応する固有ベクトルは逆反復法で求めることができました。
しかし、固有値が二重縮退している場合があり、
それに対応する固有ベクトルを求めることができません。(逆反復法で
原理的に求めることができるが時間がかかりすぎる)
どなたかいい方法をしりませんか?
0378デフォルトの名無しさん
2007/06/20(水) 04:37:060379デフォルトの名無しさん
2007/06/20(水) 07:23:41問題文(含コード&リンク):
環境: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
0380デフォルトの名無しさん
2007/06/20(水) 08:22:030381380
2007/06/20(水) 08:33:060382デフォルトの名無しさん
2007/06/20(水) 08:46:33[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] その他の制限: 特になし
0383デフォルトの名無しさん
2007/06/20(水) 08:52:31#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を格納したい…。
0384デフォルトの名無しさん
2007/06/20(水) 09:09:310385380
2007/06/20(水) 09:17:220386デフォルトの名無しさん
2007/06/20(水) 09:23:03入力した数までがすべてたされてしまいます。どうすればいいのでしょうか?
0387デフォルトの名無しさん
2007/06/20(水) 09:25:44[2]
ブザー(ビープ音)を仮引数noで指定された回数鳴らした後に、画面に「警告です!」と表示して改行を行う関数alertを作成しなさい。関数alertを用いて、5回ブザーを鳴らして「警告です!」と画面に表示するプログラムを作成しなさい
*ブザーはprintf("\a");またはputchar('\a');で1回鳴る
*ブザー回数を関数alertの仮引数にする
3] 環境
[3.1] OS: WindowsXP
[3.2] コンパイラ名とバージョン: VS2005
[3.3] 言語: C
実行結果例
(ブザーが5回鳴って)
警告です!
よろしくお願いします
0388デフォルトの名無しさん
2007/06/20(水) 09:35:03[1]C言語
[2]1〜nまでの偶数の和をdefin文を使って表示しなさい
[3.1] OS:WindowsXP
[3.2] VS2005
[3.3]C++
これで作成しています。よろしくお願いします。
0389デフォルトの名無しさん
2007/06/20(水) 09:43:46俺Cしか知らんが、ループの中で足される時に奇数をはじけばいいだけだろ。
もしくはもとからループで
for(i=0;i<n;i+=2)で最初から偶数しかカウントしないとか。
0390デフォルトの名無しさん
2007/06/20(水) 09:50:04#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;
}
0391デフォルトの名無しさん
2007/06/20(水) 09:56:23#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;
}
0392デフォルトの名無しさん
2007/06/20(水) 10:17:47環境: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
*
0393デフォルトの名無しさん
2007/06/20(水) 10:55:420394デフォルトの名無しさん
2007/06/20(水) 11:09:07[2] 問題文(含コード&リンク): キーボードから何度か数字を入力して当てるゲームを作成しなさい。
あらかじめ正解を1つ用意しておく
入力のチャンスは5回までとする
正解したら、「正解!」と出力して終了する
不正解の場合は、大小関係や「惜しい!」などヒントを出力する
5回とも不正解の場合は、正解と「残念!」などのメッセージを出力して終了する
【発展】
乱数生成の関数を使い、プログラムを実行するたびに
コンピュータが自動的に正解を用意するように改良しなさい。
[3] 環境
[3.1] OS: WindowsXP
[3.2] コンパイラ名とバージョン:visual studio 2005
[3.3] 言語: C
0395デフォルトの名無しさん
2007/06/20(水) 11:09:20やってみたらできました。どうもありがとう!
0396デフォルトの名無しさん
2007/06/20(水) 11:10:31発展までやってみました。
#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 になってしまうんですが、わかる方教えてください
0397デフォルトの名無しさん
2007/06/20(水) 11:18:090398デフォルトの名無しさん
2007/06/20(水) 11:27:28別に絶対0にはなってないと思うけど。
0399デフォルトの名無しさん
2007/06/20(水) 12:14:150400デフォルトの名無しさん
2007/06/20(水) 12:16:07環境: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
0401デフォルトの名無しさん
2007/06/20(水) 12:41:13[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文でお願いします
0402デフォルトの名無しさん
2007/06/20(水) 13:22:51[2]
*をno個連続して表示する関数put_starsを作成し、この関数を利用して、キーボードから読み込まれた横幅と高さをもつ長方形を表示するプログラムを作成しなさい(長方形の形状は実行結果例参照)
3] 環境
[3.1] OS: WindowsXP
[3.2] コンパイラ名とバージョン: VS2005
[3.3] 言語: C
実行結果例
横幅;5
高さ意;3
-----------------
*****
*****
*****
0403デフォルトの名無しさん
2007/06/20(水) 13:49:53#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;
}
0404デフォルトの名無しさん
2007/06/20(水) 14:01:15int 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;
}
0405デフォルトの名無しさん
2007/06/20(水) 14:10:09#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;
}
0406デフォルトの名無しさん
2007/06/20(水) 14:55:21[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
よろしくお願いします
0407デフォルトの名無しさん
2007/06/20(水) 15:15:06#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;
}
まさか結果の小数点を,で表示する仕様とか言わないよね…?
0408デフォルトの名無しさん
2007/06/20(水) 15:27:440409デフォルトの名無しさん
2007/06/20(水) 15:31:100410デフォルトの名無しさん
2007/06/20(水) 15:37:16#include <stdio.h>
void alert(int no){
for(; no != 0; no--)
putchar('\a');
printf("警告です!\n");
}
int main(){
alert(5);
return 0;
}
0411デフォルトの名無しさん
2007/06/20(水) 15:47:02[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] その他の制限: 特になし
こっちでお願いしよう・・・
0412デフォルトの名無しさん
2007/06/20(水) 15:56:38[2]
1から順番に整数を足して、整数numを超えた時(等しい場合含む)の、最後に足した整数値を返す関数funeを作成なさい。
この関数funeを利用して、1からの整数の和が、キーボードから読み込まれた制限値(整数)を超えるためには、どこまで足せばよいか表示するプログラムを作成しなさい
3] 環境
[3.1] OS: WindowsXP
[3.2] コンパイラ名とバージョン: VS2005
[3.3] 言語: C
実行結果
制限値=10000
142まで足すと10000を超える
お願いします
0413デフォルトの名無しさん
2007/06/20(水) 16:08:13#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;
}
0414デフォルトの名無しさん
2007/06/20(水) 16:13:10おまwwwww
0415413
2007/06/20(水) 16:18:42- v += s[0] / div;
+ v += (s[0] - 0x4f) / div;
かな。
適当に書いたから多分ほかにもアレな箇所があるかも。
0416デフォルトの名無しさん
2007/06/20(水) 16:30:51それ実行結果間違ってない?
0417413
2007/06/20(水) 16:45:28ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4299.txt
0418デフォルトの名無しさん
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で、期限は明日までです。
式が多くてちんぷんかんぷんです・・・。少しテンプレからずれていますが、よろしくお願いします。
04191/2
2007/06/20(水) 16:51:22[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]
0420デフォルトの名無しさん
2007/06/20(水) 16:52:25- int c, count;
+ int c, count = 0;
04212/2
2007/06/20(水) 16:52:52cat 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
0422デフォルトの名無しさん
2007/06/20(水) 18:19:25[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は等しい
よろしくお願いします
0423デフォルトの名無しさん
2007/06/20(水) 18:40:39#include<stdio.h>
int main(void){
printf("その関数compでは判別不可能です。\n");
return 1;
}
0424デフォルトの名無しさん
2007/06/20(水) 18:46:280425デフォルトの名無しさん
2007/06/20(水) 19:02:19�@
#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;
}
0426デフォルトの名無しさん
2007/06/20(水) 19:07:0710000を超えるのは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;
}
0427>>376
2007/06/20(水) 19:14:17早速ありがとうございます
�A�B�Cできる方よろしくお願いします
0428デフォルトの名無しさん
2007/06/20(水) 19:22:21(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;
}
0429425
2007/06/20(水) 19:29:23一応�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;
}
0430デフォルトの名無しさん
2007/06/20(水) 19:36:09(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;
}
0431>>376
2007/06/20(水) 19:43:57書いてください
四則演算わかりません><
0432デフォルトの名無しさん
2007/06/20(水) 19:48:25四則演算分からないって小学生低学年レベルの学力もないってことですか?
0433デフォルトの名無しさん
2007/06/20(水) 19:50:014じゃなくて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;
}
}
0434デフォルトの名無しさん
2007/06/20(水) 19:52:40Q.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
0435デフォルトの名無しさん
2007/06/20(水) 19:54:52問題の意味がわからん。
特にQ1
0436デフォルトの名無しさん
2007/06/20(水) 19:55:13X_n+1 = 1/2 (X_n + 2/X_n) , X_0=1
です
Cお願いしますorz
0437>>376
2007/06/20(水) 19:56:01>>430
エラーがいぱいでます
>>432
ないってことだたと思います。ほんと終わってます。orz
>>433
はい�Cじゃなくて�Dです間違いました。すみません
訂正
�C動物園で鶴と亀の居る檻を見た。観察したところ、頭の数が合計83個、
足の合計が268本であることが分かった。それぞれ何匹であるかを求めよ。
�D1の2乗、11の2乗、111の2乗、1111の2乗、11111の2乗、
の各値を計算しなさい。
0438デフォルトの名無しさん
2007/06/20(水) 20:01:32Q2
#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;
}
0439デフォルトの名無しさん
2007/06/20(水) 20:04:39> Microsoft Visual C++ 6.0
すまん、これを見逃していたようだ。
しかし>>430すら通らないほど酷かったっけ?
VC++6.0って
0440デフォルトの名無しさん
2007/06/20(水) 20:05:430441デフォルトの名無しさん
2007/06/20(水) 20:06:25言語は何だよ
C++でいいのかCなのか
0442デフォルトの名無しさん
2007/06/20(水) 20:06:380443デフォルトの名無しさん
2007/06/20(水) 20:08:01使用する言語をC++とか書いてるからマジでややこしいんだよ
ちゃんと書けよ
0444デフォルトの名無しさん
2007/06/20(水) 20:08:440445>>376
2007/06/20(水) 20:19:29教科書に第9章c言語によるプログラミングって書いてあったんで( ;´�D`;)
言語はC++使用です。
�A�Bの問題神様おねがいします。
0446デフォルトの名無しさん
2007/06/20(水) 20:19:32Q1
#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;
}
0447デフォルトの名無しさん
2007/06/20(水) 20:20:130448デフォルトの名無しさん
2007/06/20(水) 20:21:11びっくりした
0449デフォルトの名無しさん
2007/06/20(水) 20:21:180450デフォルトの名無しさん
2007/06/20(水) 20:27:01int 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になってたなすまん
0451デフォルトの名無しさん
2007/06/20(水) 20:31:12有難うございましたorz
0452デフォルトの名無しさん
2007/06/20(水) 20:32:010453デフォルトの名無しさん
2007/06/20(水) 20:50:53�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;
}
なんだこれ…。
0454デフォルトの名無しさん
2007/06/20(水) 20:56:34[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] その他の制限: なし
お願いします
0455>>376
2007/06/20(水) 21:10:30( ;´�D`;) <ありがとうございます。
( ;´�D⊂ <どなたか問題�Aおねがいします。
0456デフォルトの名無しさん
2007/06/20(水) 21:10:39$ ./a.out
単価:101
個数:3
代金:318.15
0457デフォルトの名無しさん
2007/06/20(水) 21:18:36ちょっとフーリエ変換とか式がややこしくて分かる方は少ないとは思いますが・・・;;
0458デフォルトの名無しさん
2007/06/20(水) 21:19:54むぅ。
(int)(tanka*kosu*(1+TAX))
てか消費税の概念がよく考えると分からないな…。
小数点は切り上げ、切り下げ、四捨五入?
0459デフォルトの名無しさん
2007/06/20(水) 21:20:030460デフォルトの名無しさん
2007/06/20(水) 21:21:42品物単位で消費税計算→切捨てじゃないか?
(int)(tanka * (1 + TAX)) * kosu
だと思う
0461デフォルトの名無しさん
2007/06/20(水) 21:25:51たとえばチロルチョコ10個買ったら消費税って付かないんだっけ?
2ch的にはうまい棒って書いた方が良いかw
0462デフォルトの名無しさん
2007/06/20(水) 21:27:11あー切り捨てじゃなくて切り上げか?
微妙にわからんw
0463デフォルトの名無しさん
2007/06/20(水) 21:30:320464デフォルトの名無しさん
2007/06/20(水) 21:30:43http://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];
//////////////////////////////////////////////////////////////////////////////////////
0465デフォルトの名無しさん
2007/06/20(水) 21:36:260466>>376
2007/06/20(水) 21:37:23エラーなしで実行して黒い画面を出すだけで良いんです。
�A仕入れ価格と利益率をキーボードから入力して、
顧客に売る際の値段を求めよ。
ラストお願いします。
0467デフォルトの名無しさん
2007/06/20(水) 21:38:45どうも
0468デフォルトの名無しさん
2007/06/20(水) 21:49:080469デフォルトの名無しさん
2007/06/20(水) 22:03:57#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;
}
0470デフォルトの名無しさん
2007/06/20(水) 22:26:56またなにかありましたらよろしくお願いします。
0471デフォルトの名無しさん
2007/06/20(水) 22:32:540472デフォルトの名無しさん
2007/06/20(水) 22:45:51[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時まで
よろしくお願いします
0473デフォルトの名無しさん
2007/06/20(水) 22:53:51それは何の課題?
構造体を使って書くとか、配列でとかおおよそ習ったところを教えてほしい。
0474デフォルトの名無しさん
2007/06/20(水) 22:56:06問題文それ全部か?
0475デフォルトの名無しさん
2007/06/20(水) 22:57:11その設定が意味わからん
ただ単にソートするプログラム書けでええやん
0476デフォルトの名無しさん
2007/06/20(水) 22:58:200477デフォルトの名無しさん
2007/06/20(水) 23:03:37ソート??わからないんで教えてください。
0478デフォルトの名無しさん
2007/06/20(水) 23:03:47[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] その他の制限: 特になし。
0479478
2007/06/20(水) 23:05:190480デフォルトの名無しさん
2007/06/20(水) 23:06:36総額表示義務化のときに散々言われたが、店によってまちまち
義務化以前は小計に税率を掛けて小数点以下切捨てにするところがほとんどだったのだが
0481デフォルトの名無しさん
2007/06/20(水) 23:13:11[2] 問題文:10個のデータを大きい順に並び換えるプログラム
ttp://www.vipper.org/vip536740.c
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン:Borland
[3.3] 言語:C
[4] 期限:6/26 16:00
自分でやってみたんですが答えがうまくでません。どこを直したらいいか指導お願いします。
0482デフォルトの名無しさん
2007/06/20(水) 23:14:33#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;
}
適当に作ったから合ってるか知らん
0483デフォルトの名無しさん
2007/06/20(水) 23:16:45義務化以前は小数点以下切り下げ
というか確か決まってたはずだが
0484デフォルトの名無しさん
2007/06/20(水) 23:16:49aがintだから
0485デフォルトの名無しさん
2007/06/20(水) 23:19:10double型の値を入れるaがint型になってるぞ。
0486デフォルトの名無しさん
2007/06/20(水) 23:21:08[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] その他の制限: 特になし。
おねがいします><
0488デフォルトの名無しさん
2007/06/20(水) 23:21:38小さい順に並べてどうすんの?
製品〜の作業時間が一番小さく、○です。みたいな感じで表示すりゃいいの?
それとも、小さい順に合計値を表示するだけでいいの?
0489デフォルトの名無しさん
2007/06/20(水) 23:26:54[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時まで
時間がないんですがよろしくおねがいします
0490デフォルトの名無しさん
2007/06/20(水) 23:30:58[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
0491472
2007/06/20(水) 23:31:13小さい順に並べて、三つの合計値を表示させたいです。
A=10,B=5,C=8だったとしたら
B⇒C⇒A 23
みたいな感じにしたいです。
よろしくお願いします
0492489
2007/06/20(水) 23:31:43期限は6月20〜21日朝1時までです
すいませんでした
0493デフォルトの名無しさん
2007/06/20(水) 23:33:14関数a,bってどこ?
0494デフォルトの名無しさん
2007/06/20(水) 23:34:000495デフォルトの名無しさん
2007/06/20(水) 23:34:420101 0011 0x53
↓左2シフト(2ビット左にずらし、0で埋める)
0100 1100 0x4C
↓右2シフト(2ビット右にずらし、0で埋める)
0001 0100 0x14
0496デフォルトの名無しさん
2007/06/20(水) 23:37:49動きました!完璧です。
ありがとうございました!!
0497デフォルトの名無しさん
2007/06/20(水) 23:37:56リストって習った?
というかポインタ習った?
0498デフォルトの名無しさん
2007/06/20(水) 23:40:17[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] その他の制限: ライブラリ関数の使用禁止。必ず再帰関数を使う。
0499デフォルトの名無しさん
2007/06/20(水) 23:45:10期限なのに範囲指定?
1時は朝か?
0500デフォルトの名無しさん
2007/06/20(水) 23:45:13聴いたことないんで習ってないと思います。。。
0501デフォルトの名無しさん
2007/06/20(水) 23:51:42[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時間以内
0502デフォルトの名無しさん
2007/06/20(水) 23:57:01#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);
}
もうすこし綺麗に書けそうだが。
0503デフォルトの名無しさん
2007/06/21(木) 00:01:19理由も何も、格演算子の性質を理解してりゃ出せる答えっしょ?
16進数で入力を受け付けているけど、0と1の2進数で説明しちゃられら?
0504デフォルトの名無しさん
2007/06/21(木) 00:01:51[2] 問題文(含コード&リンク): 何を行っているプログラムか説明し、
その理由も詳しく示しなさい
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4308.txt
[3] 環境
OS: Windows
言語: C言語
[4] 期限:6月21日4時まで
プログラムについて説明できなくて困ってます
誰か教えてください
0505デフォルトの名無しさん
2007/06/21(木) 00:05:27char *search(char* s, char* p){return *p=='\0' || (*s && *p==*s && search(s+1, p+1)) ? s : search(s+1,p);}
0506デフォルトの名無しさん
2007/06/21(木) 00:07:46http://ja.wikipedia.org/wiki/%E8%A3%9C%E6%95%B0
http://www.bohyoh.com/CandCPP/C/operator.html
~演算子(補数演算子)
要するにそれは1の補数で+−の符号を変えているってこと
0507デフォルトの名無しさん
2007/06/21(木) 00:08:172の補数では?
0508デフォルトの名無しさん
2007/06/21(木) 00:11:45http://ja.wikipedia.org/wiki/2%E3%81%AE%E8%A3%9C%E6%95%B0
0509デフォルトの名無しさん
2007/06/21(木) 00:13:22>>504
> ~number + 1;
1の補数だろ
0510502
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);
}
0511デフォルトの名無しさん
2007/06/21(木) 00:19:420512デフォルトの名無しさん
2007/06/21(木) 00:21:500513デフォルトの名無しさん
2007/06/21(木) 00:22:270515デフォルトの名無しさん
2007/06/21(木) 00:25:26なるほど……thx
0516デフォルトの名無しさん
2007/06/21(木) 01:08:22[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]%
よろしくお願いします。
0517デフォルトの名無しさん
2007/06/21(木) 01:09:210518デフォルトの名無しさん
2007/06/21(木) 01:22:37実行結果
[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]%
よろしくお願いします。
0519デフォルトの名無しさん
2007/06/21(木) 02:13:25>>502の
if(!s || !p || *p=='\0')
ってどういう意味でしょうか??
0520デフォルトの名無しさん
2007/06/21(木) 02:26:14[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で呼びだして表示するプログラムです。
0521デフォルトの名無しさん
2007/06/21(木) 02:30:03こんなんでいい?
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4310.txt
0522デフォルトの名無しさん
2007/06/21(木) 02:34:490523デフォルトの名無しさん
2007/06/21(木) 02:55:15/.(●),、(●)\
| ,,ノ(、_, )ヽ、, |
/| `-=ニ=- ' .|
/ .ヽ、_ `ニニ´__ノ
| _____ ノ
∪⌒∪ ∪
0524デフォルトの名無しさん
2007/06/21(木) 02:55:27gccでコンパイルしたら、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.
0525デフォルトの名無しさん
2007/06/21(木) 03:00:390526デフォルトの名無しさん
2007/06/21(木) 03:06:16って表示がでたのですが、これは何なんですか?
0527デフォルトの名無しさん
2007/06/21(木) 03:08:39ありがとうございました。。。OTL
0528デフォルトの名無しさん
2007/06/21(木) 03:16:140529デフォルトの名無しさん
2007/06/21(木) 03:16:22横からだが
エラーメッセージっていうやつ
0530デフォルトの名無しさん
2007/06/21(木) 03:50:15問題文に詳しい人間がいないんジャマイカ?
求める答えの公式みたいなのある?
0531デフォルトの名無しさん
2007/06/21(木) 03:53:10[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
]%
よろしくおねがいします><
0532デフォルトの名無しさん
2007/06/21(木) 05:55:08#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;
}
0533デフォルトの名無しさん
2007/06/21(木) 06:01:54[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を使ってもよい。
0534デフォルトの名無しさん
2007/06/21(木) 06:16:01[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;
}
0535デフォルトの名無しさん
2007/06/21(木) 06:16:540536デフォルトの名無しさん
2007/06/21(木) 06:20:29出来る限り自分でやりたかったけど、結局はわからなかったっす。
0537デフォルトの名無しさん
2007/06/21(木) 06:24:24#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;
}
0538デフォルトの名無しさん
2007/06/21(木) 06:57:57早いですね。自分はさんざん試行錯誤して出来なかったのに...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命令を用いるとよい。
0539デフォルトの名無しさん
2007/06/21(木) 07:50:23もはやきんもぉ〜☆なソースです。置換にしても、俺はこんなソースは書かず
string.hにあるライブラリを使うけど、とりあえずstrchrとかstrstrとか使わずにやってみた。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4312.c
0540デフォルトの名無しさん
2007/06/21(木) 08:07:08ありがとうございます。
自分今は二次元配列やってて、作ってもらったソースコードも丁度先週習った部分なのでよく理解できました。
これで課題が出せます。
0541デフォルトの名無しさん
2007/06/21(木) 08:15:43for(j=1,flg=1; j<strlen(str1)-1; j++) を
for(j=1,flg=1; j<strlen(str1); j++) にしといて
0542デフォルトの名無しさん
2007/06/21(木) 08:17:58いや、もっとおかしなことになってた。ちと書き直してくる orz
0543デフォルトの名無しさん
2007/06/21(木) 08:36:06今度こそ。なんとなくきんもぉ〜☆な感じだが、前のよりは大丈夫そう。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4313.c
0544デフォルトの名無しさん
2007/06/21(木) 08:39:55考えが不十分だったっす。仮に、置き換える文字列と最後まで一致しなくても
途中まで一致したときの対処が。また書き直してくるっす。すまそ orz
0545デフォルトの名無しさん
2007/06/21(木) 08:41:38徹夜明けだから寝るっす。失礼 ノシ
0546デフォルトの名無しさん
2007/06/21(木) 08:44:49最初に「#define STR_MAX」で入力する文字列の最大長を書いてたのをまとめたんですね。
見やすくて、すっきりしていいと思います。
徹夜明けご苦労様です。
おやすみ〜
0547デフォルトの名無しさん
2007/06/21(木) 08:46:15ありがとうございました。
0548デフォルトの名無しさん
2007/06/21(木) 08:46:490549デフォルトの名無しさん
2007/06/21(木) 08:57:37空白を含む文字列を文字配列変数に読み込み、その中から指定の文字の並び箇所を検索。
文字の並びが見つかったら、その部分を抜き出して用意された文字列と差し替える。
の手順に処理されていれば問題ないです。
0550デフォルトの名無しさん
2007/06/21(木) 09:00:25最初のだと条件が不十分で kadaio としたときでも kadai までしか
比較しないから置き換えてしまったり、最初の一文字が一致したら
2文字目以降が一致しなかった場合、最初の文字が削られてしまったりと
だめぽだったさ。
0551デフォルトの名無しさん
2007/06/21(木) 09:06:09たぶん教授の目はごまかせないので指摘されていたかもしれません。
ではソースコードは2つ目の方を使わせていただきます。
0552デフォルトの名無しさん
2007/06/21(木) 09:31:16抵抗Rについて V=I・R
インダクタンスLについて V=(dI/dt)・L
静電容量Cについて V=(∫I dt)/C
こんなんだっけ
0553デフォルトの名無しさん
2007/06/21(木) 09:43:43誰か頼む〜
なんか538が盛り上がってたから、ちと仮眠とって待ったけど
自分のターンが回ってきた!?って思ったから誰かよろしくノシ
0554デフォルトの名無しさん
2007/06/21(木) 09:45:39どうあがいてもテキストファイルから読み込むことは不可能です
ありがとうございました
0555デフォルトの名無しさん
2007/06/21(木) 09:48:590556デフォルトの名無しさん
2007/06/21(木) 09:49:27#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;
}
0557デフォルトの名無しさん
2007/06/21(木) 11:03:01[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は等しい
よろしくお願いします
0558デフォルトの名無しさん
2007/06/21(木) 11:15:23>・a>bなら1
>・a=bなら0
>・a<bなら1
これじゃだめだろ。問題をもう一度確認して出直しといで。
0559デフォルトの名無しさん
2007/06/21(木) 11:19:32#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;
}
0560デフォルトの名無しさん
2007/06/21(木) 12:23:42環境: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
0561560の文章訂正
2007/06/21(木) 12:29:060562デフォルトの名無しさん
2007/06/21(木) 12:35:28環境:if文・for文・while文・do〜while文・switch〜case文・
OS:Windows
コンパイラ名とバージョン:borland
言語:C
テーマ:文字配列の操作
問題1
文字型の配列変数mojiに設定されている文字数を答えなさい
char moji[] = "ABCDEFG";
実行画面
文字数:7
問題2:文字列を入力して偶数番目の要素数と奇数番目の要素を別の配列に格納し、文字列として表示しなさい
実行画面
文字列入力==>ABC123def
偶数要素:AC2df
奇数要素:B13e
以上の2問宜しくお願いします
0563デフォルトの名無しさん
2007/06/21(木) 12:43:50[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] その他の制限: なし
お願いします
0564デフォルトの名無しさん
2007/06/21(木) 13:33:30問題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;
}
0565デフォルトの名無しさん
2007/06/21(木) 13:39:44[2]実行するごとに違う小文字を20個表示させるプログラム
[3.1] WindowsXP
[3.2] BorlandC++
[3.3] C++
0566デフォルトの名無しさん
2007/06/21(木) 13:45:57問題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;
}
0567デフォルトの名無しさん
2007/06/21(木) 14:01:59#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;
}
0568デフォルトの名無しさん
2007/06/21(木) 14:07:32[3.2] コンパイラ名とバージョン: VS2005
[3.3] 言語:C++
次の定数を用意してその値を出力し、値を確認しなさい。
1.8進定数
2.10進定数
3.16進定数
4.指数指定の実数
5.小数点使用の実数
6.指数指定、小数点使用の実数
7.文字 「%d」で出力
8.文字列 「%s」で出力
という問題です。よろしくお願いします。
0569デフォルトの名無しさん
2007/06/21(木) 14:39:41[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] その他の制限:どうかよろしくお願いします。
0570デフォルトの名無しさん
2007/06/21(木) 15:55:100571デフォルトの名無しさん
2007/06/21(木) 15:57:240572デフォルトの名無しさん
2007/06/21(木) 16:08:17#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;
}
0573デフォルトの名無しさん
2007/06/21(木) 16:10:25for (i=1,e=0,o=0 ; i <= 510; i++) { の部分を
for (i=0,e=0,o=0 ; i < 510; i++) { にしちくり
0574デフォルトの名無しさん
2007/06/21(木) 16:12:040575デフォルトの名無しさん
2007/06/21(木) 16:16:49long fibonacci(long n){/* */}を再帰を用いて定義せよ
という問題なんですが
実行例
整数を入力してください:0
Fibonacci(0)=1
整数を入力してください:1
Fibonacci(1)=1
整数を入力してください:2
Fibonacci(2)=2
整数を入力してください:6
Fibonacci(6)=13
となるようにしたいんですがお手上げ状態ですorz
よろしくお願いします
0576デフォルトの名無しさん
2007/06/21(木) 16:18:45int fibo(int x) {
if(x<=2) return 1;
else return fibo(x-1) + fibo(x-2);
}
0577デフォルトの名無しさん
2007/06/21(木) 16:23:41なんねーっすorz
0578デフォルトの名無しさん
2007/06/21(木) 16:26:33long fibonacci(long n){/* */}を再帰を用いて定義せよ
という問題なんですが
実行例
整数を入力してください:0
Fibonacci(0)=1
整数を入力してください:1
Fibonacci(1)=1
整数を入力してください:2
Fibonacci(2)=2
整数を入力してください:6
Fibonacci(6)=13
となるようにしたいんですがお手上げ状態ですorz
よろしくお願いします
0579デフォルトの名無しさん
2007/06/21(木) 16:26:35http://ja.wikipedia.org/wiki/%E3%83%95%E3%82%A3%E3%83%9C%E3%83%8A%E3%83%83%E3%83%81%E6%95%B0
6項目なら8では?
0580デフォルトの名無しさん
2007/06/21(木) 16:29:57間違えました8ですしかも何度もかきこんでしまってすんませんorz
0581デフォルトの名無しさん
2007/06/21(木) 16:30:170582デフォルトの名無しさん
2007/06/21(木) 16:34:04屁ぇ〜〜〜こきましたねあなたぁ〜〜♪
0583デフォルトの名無しさん
2007/06/21(木) 16:36:06http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4314.txt
0584デフォルトの名無しさん
2007/06/21(木) 16:36:45( ::: (;; ∧_,∧ );:;;;)) )::: :; :))
((:: :;; (´・ω・)っ ;;;; ; :))
((;;; (っ ,r どどどどど・・・・・
i_ノ┘
((;;;;゜;;:::(;;: ∧__,∧ '';:;;;):;:::))゜)) ::)))
(((; ;;:: ;:::;;⊂(´・ω・`) ;:;;;,,))...)))))) ::::)
((;;;:;;;:,,,." ヽ ⊂ ) ;:;;))):...,),)):;:::::))))
("((;:;;; (⌒) |どどどどど・・・・・
三 `J
.∧__,,∧
⊂(´・ω・`)⊃
☆ ノ 丿 キキーッ
ヽ .ノ (⌒) 彡
と_丿=.⌒
(⌒⌒)
∧_ ∧ ( ブッ )
( ・ω・` ) ノノ〜′
(⊃⌒*⌒⊂)
/__ノωヽ__)
0585デフォルトの名無しさん
2007/06/21(木) 16:37:08ちょっwwwwwwおまっwwwwwww何しに来とんねん?w
0586デフォルトの名無しさん
2007/06/21(木) 16:44:44よろしくおねがいしますprz
0587デフォルトの名無しさん
2007/06/21(木) 16:47:05>>576 の int を long にして使いなはれ。
まさか、値を受け継ぐところまで他人に作れと?
0588デフォルトの名無しさん
2007/06/21(木) 16:51:13[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問あります・・・。
0589デフォルトの名無しさん
2007/06/21(木) 16:54:41それすぐ上にあったぞ。>>510かな。
0590デフォルトの名無しさん
2007/06/21(木) 16:54:58標準ライブラリを使っちゃあかんってことやね?どこの学校の
どこの講師の問題じゃ〜〜ゴルァ〜〜〜ってトーマスさんがクレームつけてきまつよぉ〜ん♪
0591588
2007/06/21(木) 17:01:19[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問もあげてしまってすみません。どうぞよろしく御願いいたします。
0592デフォルトの名無しさん
2007/06/21(木) 17:02:27すみませんど素人なもんでどうすればいいのかわからんのです
long fibonacci(int x) {
if(x<=2) return 1;
else return fibo(x-1) + fibo(x-2);
}
てすればいいんでしょうか?
ごめんなさい教えてください
0594デフォルトの名無しさん
2007/06/21(木) 17:08:400596デフォルトの名無しさん
2007/06/21(木) 17:14:03long fibonacci(long x) {
if(x<=2) return 1;
else return fibo(x-1) + fibo(x-2);
}
でなるんどえしょうか?nじゃなくてxにしなきゃなんですかね?
日本語文章はどこにいれればいいのでしょうか?
0597デフォルトの名無しさん
2007/06/21(木) 17:14:16こうした場合はkodaisukiになるけど、ええんか?
0598デフォルトの名無しさん
2007/06/21(木) 17:15:49いや、別に long n にするんだったら中の x を n にすりゃええがな・・・
あとそれ、再起を使ったライブラリの部分だから、あとはそれを
main の中で適当に引数を入れる仕組みにして用いたらええがな。
0599デフォルトの名無しさん
2007/06/21(木) 17:20:54#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;
}
0600デフォルトの名無しさん
2007/06/21(木) 17:21:14#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;
}
0601デフォルトの名無しさん
2007/06/21(木) 17:31:02[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等)を多めでお願いします。
コメントで簡単な注釈をつけていただけると助かります。
0602454
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さんにやってもらったんですが、うまく動作しませんでした。
課題部分をお願いします
0604デフォルトの名無しさん
2007/06/21(木) 17:40:22ありがとうございます〜
もう一問ありました(汗)
問題は一緒なのですが・・
[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] その他の制限:こちらも、どうかよろしくお願いします。
0605デフォルトの名無しさん
2007/06/21(木) 17:40:53> int n;
こんなところに罠が
0606デフォルトの名無しさん
2007/06/21(木) 17:42:09すまん、どこがさっきの問題と違うんだ?
0607デフォルトの名無しさん
2007/06/21(木) 17:45:12[2] 問題文(含コード&リンク):
float 型の大きさ 2 x 2 の行列 A の各要素を実行時に受け取り、
サブルーチンで A の逆行列を求めて表示せよ。
但し、逆行列がない時は、その旨を表示して強制終了せよ。
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語:C
[4] 期限:22日のPM5:00まで
[5] その他の制限:
特にありません
よろしくお願いします
0608デフォルトの名無しさん
2007/06/21(木) 17:47:28突っ込んじゃいや〜〜〜〜 ><;
0609デフォルトの名無しさん
2007/06/21(木) 17:52:30http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4317.c
2次元配列にしてないけどw
0610デフォルトの名無しさん
2007/06/21(木) 17:53:51すみません、
・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()
これらの関数を使わないといけないみたいです(汗)
0611デフォルトの名無しさん
2007/06/21(木) 18:27:42http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4319.txt
0612デフォルトの名無しさん
2007/06/21(木) 18:30:10[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∀`)シ
0613デフォルトの名無しさん
2007/06/21(木) 18:43:430614デフォルトの名無しさん
2007/06/21(木) 18:47:26> [3] VB6.0
これが気になる。
0615デフォルトの名無しさん
2007/06/21(木) 18:51:200616デフォルトの名無しさん
2007/06/21(木) 18:55:10int 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;
}
0617デフォルトの名無しさん
2007/06/21(木) 18:55:48>>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がでてきてしまいます
あと、連続してでてくるようにするにはどうすればいいのでしょうか
0618デフォルトの名無しさん
2007/06/21(木) 18:59:09>>579
っつか、前に出てた奴と同じ学校?連続してやるなら
main の中に for 分を使って fibo(i) とでもして連続して値をやったら?
っつか、順に求めるならなおさら再帰なんて効率の悪いやり方だな・・・
0619588
2007/06/21(木) 19:24:18510のプログラムを試してみたのですがx=search("international","nat")にすると
"nternational"が返ってきてしまいます。この場合はどうしたらいいでしょうか。
>>591
>>600
詳細が細かくて申し訳ないのですがmallocを使った関数で御願いします。
注文が多くてすみません。
0620デフォルトの名無しさん
2007/06/21(木) 19:57:37http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4320.txt
0621デフォルトの名無しさん
2007/06/21(木) 20:00:07[2] 問題文(含コード&リンク):反復深化探索で8パズルを解くツリーを作る
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc 3.4
[3.3] 言語: C言語
[4] 期限: 2007年06月22日10:00まで
[5] その他の制限: 特になし
0622デフォルトの名無しさん
2007/06/21(木) 20:11:51#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;
}
0623みまつや
2007/06/21(木) 20:38:58[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
0624みまつや
2007/06/21(木) 20:39:38y_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
0625602
2007/06/21(木) 20:46:290626デフォルトの名無しさん
2007/06/21(木) 20:46:349*9なのはタイプミス?
0627デフォルトの名無しさん
2007/06/21(木) 21:08:36[2] 問題文(含コード&リンク):
文字列配列 *a[10] を 10 個の英単語で最初に初期化し、サブルーチンで、
10 個の中で辞書的に一番遅く現れる文字列を表示せよ.
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語:C
[4] 期限:22日のPM6:00まで
[5] その他の制限:
文字列の比較 strcmpという関数を使うこと.
よろしくお願いします
0628みまつや
2007/06/21(木) 21:09:07失礼しました(汗)ご指摘の通り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
0629デフォルトの名無しさん
2007/06/21(木) 22:15:02http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4323.txt
0630デフォルトの名無しさん
2007/06/21(木) 22:18:08遅れてすみません。
助かりました。
ありがとうございます。
0631デフォルトの名無しさん
2007/06/21(木) 22:32:56#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;
}
0632デフォルトの名無しさん
2007/06/21(木) 22:43:38[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] その他の制限:ダブルポインタまで習っています。
0633デフォルトの名無しさん
2007/06/21(木) 23:01:58#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;
}
0634デフォルトの名無しさん
2007/06/21(木) 23:04:11puts("** after **");
for (i = 0; i < argc - 1; ++i)
puts(av[i]);
return 0;
}
0635みまつや
2007/06/21(木) 23:05:58ありがとうございます。助かりました。
一点質問があるのですが、例のような10*10で表示するには
#define X 80
#define Y 24
の部分の値を変えてあげればいいんでしょうか?
0636デフォルトの名無しさん
2007/06/21(木) 23:06:33うん
0637デフォルトの名無しさん
2007/06/21(木) 23:08:04#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;
}
しーらないっと
0638デフォルトの名無しさん
2007/06/21(木) 23:10:11ありがとうございました。
ただ申し訳ないのですが、内容があまりにも高度過ぎてわかりませんでした・・・。
上5行のうち習ったのは#include<stdio.h>だけですのでこれのみ使用した場合の
解答方をお願いします。
0639デフォルトの名無しさん
2007/06/21(木) 23:12:330640602
2007/06/21(木) 23:13:160641デフォルトの名無しさん
2007/06/21(木) 23:13:28>>627では strcmp() を使えとあるが、
strcmp()は stdio.h ではなく string.h の関数だよ。
0642637
2007/06/21(木) 23:14:540644デフォルトの名無しさん
2007/06/21(木) 23:21:25それでは#include <stdio.h>と#include <string.h>のふたつを使った場合の解答法
を教えてください。
0645641
2007/06/21(木) 23:28:56おれはめんどうくさいからやだ。他の人に期待して。
一応説明しとくと、辞書順比較を行えという問題なのに
strcmp()で文字コード順比較させるのがこの問題のいやなところ。
>>631があんなに子汚いのはそのため。
0646デフォルトの名無しさん
2007/06/21(木) 23:32:29御迷惑をおかけしました
0647633
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;
}
0649デフォルトの名無しさん
2007/06/21(木) 23:44:28#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なら平気。
0650sage
2007/06/21(木) 23:48:55ありがとうございます。助かりました。
0651デフォルトの名無しさん
2007/06/21(木) 23:55:080652デフォルトの名無しさん
2007/06/21(木) 23:56:260653デフォルトの名無しさん
2007/06/21(木) 23:57:14strcmp って辞書順比較じゃなかったっけ?
0654デフォルトの名無しさん
2007/06/22(金) 00:00:02大文字小文字の違いはもちろん別物とされる
0656デフォルトの名無しさん
2007/06/22(金) 00:00:58高度というかdirty hackだよな。
良い子は真似しちゃいけないコード。
0657デフォルトの名無しさん
2007/06/22(金) 00:02:26あー、そーゆうことか。
>>632 は小文字を大文字にしてから比較なんで、'A'-'Z'という限定条件で考えてた。
0658シャノン
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] その他の制限:標準ライブラリは使ってはいけない.
手法を考えてもその部分だけは実現には到りませんでした。。。
よろしくお願いします。
0659デフォルトの名無しさん
2007/06/22(金) 00:05:11>>627 = >>632だったの?
>>649って>>632の別解だけど、別解ほしがってたのは>>627じゃなかった?
0660649
2007/06/22(金) 00:10:19これは、644の回答じゃない。
0661デフォルトの名無しさん
2007/06/22(金) 00:29:34標準ライブラリを使うなってwwww
0662デフォルトの名無しさん
2007/06/22(金) 00:30:24C#でやったら泣きそうだなw
0663デフォルトの名無しさん
2007/06/22(金) 00:33:48Linux & gccでC#はねぇだろうし、そもそもスレチだから
そのオプションは見なかったことにして
まぁ例によって標準ライブラリ「以外」を使えばいいんじゃね
0664デフォルトの名無しさん
2007/06/22(金) 01:00:59[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] その他の制限:特にないと思います。
タイプミスしていたら教えてください
0665デフォルトの名無しさん
2007/06/22(金) 01:05:11int main(int argc, char *argv[]) {
char c;
FILE *fp;
if(argc<2) {
printf("ファイル名の指定がねぇ〜ぞゴルァ!\nよって終了、二度と実行すんなよ\n");
return 1;
}
if((fp=fopen(argv[1],"r"))==NULL){
0666デフォルトの名無しさん
2007/06/22(金) 01:11:57GUIもエディタ備えているからDelphi並み(ヘジたん作だしな)の楽さだし
0667658シャノン
2007/06/22(金) 01:12:34↑ここに途中完成プログラムがあります。よろしくお願いしますm(..)m
0668デフォルトの名無しさん
2007/06/22(金) 01:15:160669デフォルトの名無しさん
2007/06/22(金) 02:01:57[2] 問題文(含コード&リンク):(´・ω・`)
[3] 環境
[3.1] OS: WindowsXP
[3.2] コンパイラ名とバージョン: Borland
[3.3] 言語: C
[4] 期限: 無期限
0670デフォルトの名無しさん
2007/06/22(金) 02:04:180671デフォルトの名無しさん
2007/06/22(金) 02:08:03#include <stdio.h>
int main(void) { for(;;) puts("(´・ω・`)"); return 0; }
0672デフォルトの名無しさん
2007/06/22(金) 02:46:15[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] その他の制限:出来るだけ簡単(初歩的)にすること。
よろしくおねがいします。
0673デフォルトの名無しさん
2007/06/22(金) 02:50:59[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文で作れとのこと
宜しくお願いします。
0674デフォルトの名無しさん
2007/06/22(金) 03:32:37桁精度とかまったく考慮してないけども。
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;
}
0675デフォルトの名無しさん
2007/06/22(金) 03:38:29[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] その他の制限:
期限まで時間が無さすぎるので無理だとは思っていますが、出来る方いたらお願いします
0676デフォルトの名無しさん
2007/06/22(金) 04:05:38「一番長い名前」の説明が不十分(同じ長さがあった場合とか)なんで
同じ長さのがあった場合は、前に入力された方を優先する感じで。
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;
}
0677デフォルトの名無しさん
2007/06/22(金) 04:06:35>>676の頭にコレ↓追加で
#include <stdio.h>
#include <string.h>
#define NAME_NUMBER 5
#define NAME_LENGTH 10
0678デフォルトの名無しさん
2007/06/22(金) 04:29:21間に合うかわからんが今gccで作ってる
ちっと待っとれ
0679675
2007/06/22(金) 04:45:53間に合うか否かは関係なく感謝です
gccですか、初めて聞いたので調べてみましたが
C++用に作ればC++で動作するらしいですね
では待ってます
0680678-1
2007/06/22(金) 05:08:55#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;
//===================================================================================
0681678-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;
}
0682678-3
2007/06/22(金) 05:12:59char 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;
0683678-4
2007/06/22(金) 05:14:09idx = 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;
}
0684678
2007/06/22(金) 05:19:25とりあえず1〜4まで一つにつなげればいけると思う
一応手元のVS2005で動作確認
急いで作ったんでかなり雑ですげぇ適当だけどこれで勘弁してくだしあ
というか、データテーブルの規定がなかったんで
思いっきりグローバル変数でやっちまったけどこれでいいのだろうか
ついでに結果の性別表示のところかなり強引だけど、まぁその辺はご愛嬌ってコトでひとつ
0685678
2007/06/22(金) 05:32:47printf("%s %s\n", id, students[i].id);
デバッグ表示消し忘れた
あと純粋に0が入力された時の処理入れ忘れた
atoi()で数字以外が渡されると0が返ってきちゃうんで
今のままだと0入れても終わらないから気をつけて
0686675
2007/06/22(金) 05:49:22コメントもあるし理解できるので大丈夫です
じっくりと吟味させていただきます
グローバル変数も性別も特に問題無いです
ここまでやってもらっただけでも十分なので
0入れても終わらないのは自分で改良しておきます
お疲れ様でした
0688デフォルトの名無しさん
2007/06/22(金) 05:56:21ありがとうございました。説明不足な点、申し訳ないです;
0689602
2007/06/22(金) 08:54:570690490
2007/06/22(金) 09:10:56[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のことです。
お願いします。
0691デフォルトの名無しさん
2007/06/22(金) 09:54:070692デフォルトの名無しさん
2007/06/22(金) 10:11:44#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;
}
0693デフォルトの名無しさん
2007/06/22(金) 10:51:37[2] 通常の数式(3*5-2/9等)を、逆ポーランド表記法へと変換するプログラムを作成せよ。
[3] 環境
[3.1] WindowsXP professional
[3.2] Borland C++Compiler 5.5
[3.3] C言語
[4] 期限: できれば土日
[5] その他の制限: 構造体はまだ習っていない。配列に格納せよとの事。
俺には難易度高すぎる・・・。
0694デフォルトの名無しさん
2007/06/22(金) 10:53:37参考は
http://7ujm.net/etc/calcstart.html
0695再帰
2007/06/22(金) 11:20:35[2] 問題文(含コード&リンク):
入力:8個の異なる値の整数データ
操作:集合Sのデータ数が2以上のときは、
データをデータ数が等しい二つの集合S1,S2に分割、集合S1について最大値M1と最小値m1を求める(再帰呼び出し)。
集合S2についても同様。
最大値M1,M2の大きい方を集合Sの最大値Mとし、
最小値m1,m2の小さい方を集合Sの最小値mとしてリターン(帰る)。
出力:8個の異なる値の整数データの最大値と最小値を出力。
0696再帰
2007/06/22(金) 11:22:33[3.1] OS:Linux
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C
[4] 期限:できるだけ早くお願いします
[5] その他の制限:なるべく簡単な構造で構成してもらいたいです。
また標準ライブラリは使わないでお願いします。
携帯からすいません。
0697デフォルトの名無しさん
2007/06/22(金) 11:31:02>操作:集合Sのデータ数が2以上のときは、
「2より大きい」で良いんだよな?
>また標準ライブラリは使わないでお願いします
数値の入力と出力は何を使えばいいんだ?
0698再帰
2007/06/22(金) 11:42:08scanfで整数の入力を行ってください。
他にもstdlib.hやmath.hも必要であれば使ってください。
655、656は標準ライブラリが何かを知らずに書いてしまいました。
すいません。
0699デフォルトの名無しさん
2007/06/22(金) 11:48:51出来たけど、携帯でソース見るのつらくねぇ?
#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;
}
0700デフォルトの名無しさん
2007/06/22(金) 11:53:51>>699で、8個の数字全部出力するところ、書き忘れてるわ。
そこは自分で頑張って。
0701デフォルトの名無しさん
2007/06/22(金) 12:03:18#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;
}
0702701
2007/06/22(金) 12:16:58do { 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;
0705デフォルトの名無しさん
2007/06/22(金) 13:38:07readfile()内の
data[filelength++]=c;
htnode[(int)c].freq++;
を
data[filelength++]=(unsigned char)c;
htnode[(unsigned char)c].freq++;
にしてみ。
0706デフォルトの名無しさん
2007/06/22(金) 13:39:14[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
↑これに対するコメントも頂けたら幸いです。
お願いします。
0707デフォルトの名無しさん
2007/06/22(金) 13:40:06[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内の公式を使う事
切羽つまっています、お願いします。
0708デフォルトの名無しさん
2007/06/22(金) 13:56:08とりあえず、変な入力したらエラー吐いてそこでとまるようにしたほうがいいんじゃないの?
あと、説明ないから今何を入力すればいいか戸惑うからプロンプトとかも。
0709デフォルトの名無しさん
2007/06/22(金) 13:56:46[2] 問題文(含コード&リンク):
10個の数が与えられたとき、その最大値を与える関数saidaiを
作成し、関数mainで、10個の変数をキーボードから入力し、saidai
を呼び出して最大値を求め、その最大値を関数mainで表示させよ。
プロトタイプ、return文を用いよ。
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: CC
[3.3] 言語: C++
[4] 期限: 6月22日16時まで
[5] その他の制限:
よろしくお願いします。
0710デフォルトの名無しさん
2007/06/22(金) 14:16:27#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;
}
0711デフォルトの名無しさん
2007/06/22(金) 14:25:45ありがとうございました。
0712 ◆UoNQqijD4I
2007/06/22(金) 14:27:12[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] その他の制限:バイナリファイル、ポインタまで習いました。よろしくお願いします
0713デフォルトの名無しさん
2007/06/22(金) 14:30:52キーボードから順次入力された正の整数を0 が入力されるまで,配列に順番に格納し,入力
された(0 を除く)値の平均値(実数として扱うこと)に最も近い値(平均との差が最小と
なる値)が何番目に入力されたどういう値であるかを表示するプログラムを作成せよ.例え
ば,次のような実行例を想定している(下線部はキーボードからの入力を表す).
数字(1)を入力してください 2
数字(2)を入力してください 5
数字(3)を入力してください 3
数字(4)を入力してください 1
数字(5)を入力してください 0
入力された数字の平均は2.75 です.
これは,3 番目に入力された3 に最も近いです
0714706
2007/06/22(金) 14:32:11多少いじってみました。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4329.c
もう少しプログラムが完成したらいじってみようと思います。
掛け算実行すると" 00.000000"と出続けたりとか、
二つ目のscanfが実行されないなどの問題は残ったままです。どうすればいいのでしょうか。
0715デフォルトの名無しさん
2007/06/22(金) 14:33:26[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] その他の制限: とくになしです
よろしくお願いします
0716 ◆UoNQqijD4I
2007/06/22(金) 14:51:13#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の行列の和がわかりません…
0717デフォルトの名無しさん
2007/06/22(金) 14:59:39とりあえず、一部テストしたけど
%[+-*/]→%[+-*/]c
char sig→int sig
にした方がいいと思う。
あと、改行が残っててそれを2つ目のscanfで食って終わっちゃうんだろうと思うから
scanfのあとに空のgetchar仕込めば何とかなると思う。
0718デフォルトの名無しさん
2007/06/22(金) 15:02:570719デフォルトの名無しさん
2007/06/22(金) 15:07:15改造するのめんどくさくなってきた。
0720デフォルトの名無しさん
2007/06/22(金) 15:20:19多少遅れても提出点貰いたいんで時間ある方お願いします
0721 ◆UoNQqijD4I
2007/06/22(金) 15:24:37A転置行列「と」Bの行列の和です
誤字ですみません。。
0722デフォルトの名無しさん
2007/06/22(金) 15:29:14面倒だから適当に改造した。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4331.txt
0723デフォルトの名無しさん
2007/06/22(金) 15:37:30OSだかコンパイラだかどっちなんだか分からんがさっきから怒られるばかりだ。
n2の値も狂うし。
0724デフォルトの名無しさん
2007/06/22(金) 15:38:14まぁいいや。
0725デフォルトの名無しさん
2007/06/22(金) 15:48:11返信ありがとうございます。
>>722
改造してくださりありがとうございます。
あとで見てみようと思います。
0726701
2007/06/22(金) 15:59:29見直してみたら怪しすぎるので直した。出力も空白を入れるように修正。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4332.txt
0727デフォルトの名無しさん
2007/06/22(金) 16:24:58読み込むファイルのフォーマットがわからんから
宿題そのものじゃなくて行列を扱うユーティリティーみたいなの作った
今上げるからちょっと待ってな
0728デフォルトの名無しさん
2007/06/22(金) 16:28:50http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4333.txt
転置までは作ったから行列の和は気合で何とかせい
0729デフォルトの名無しさん
2007/06/22(金) 16:29:33#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;
}
0730 ◆UoNQqijD4I
2007/06/22(金) 16:38:140731デフォルトの名無しさん
2007/06/22(金) 16:44:31だからファイルのフォーマットがわからんと
>>716はファイルの読み込みと処理を一緒くたに扱ってるから、悪いけど手を入れる気が起きん
上げたソースをよく見てみ
行列データは構造体にまとめてあるし、座標指定で値をセット/ゲットできる
転置した後の行列の和を取りたいなら、単純に行と列の数だけループ回して足し合わせれば取れるだろ?
0732デフォルトの名無しさん
2007/06/22(金) 17:04:571) 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;
}
0733デフォルトの名無しさん
2007/06/22(金) 17:19:22もう時間切れかな?
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4334.txt
とりあえずCSVと仮定して付け焼刃だけど読み込みまで作った
行列の加算も作ったぞ
0734デフォルトの名無しさん
2007/06/22(金) 18:48:24http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4335.txt
仕様のCommand->どうのこうのってのが何を意味してるのかよくわからなかったんで
とりあえずリストの中身とサンプルのmainだけ作った
動的に伸縮するってあるけどこの仕様だと伸はするけど縮がない
縮するときは登録データを全て破棄する時
サンプルとして非常に悪いので参考にしない方がいいと思う
0735デフォルトの名無しさん
2007/06/22(金) 18:55:28[2] 問題文(含コード&リンク):
(おまけ)午前四時から正午までは Good Morning! と、正午から午後八時までは Good Afternoon! と、
午後八時から午前四時までは Good Evening! と、表示するプログラムを書け。
ただし、境界の時刻は前の時間帯に含まれるものとする。
*環境変数を使用しなければなりません。
[3] 環境
[3.1] OS:Vine Linux
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語: C言語
[4] 期限:来週中
[5] その他の制限:よろしくお願いします。
0736デフォルトの名無しさん
2007/06/22(金) 19:00:42すみません
[1]は実プロC(コマンドライン引数)ではなく実プロC(環境変数)でした
0737デフォルトの名無しさん
2007/06/22(金) 19:12:54<time.h>じゃなくて環境変数?
getenv()とか使うの?
0738デフォルトの名無しさん
2007/06/22(金) 19:24:31[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] 期限: 今日
お願いします
0740デフォルトの名無しさん
2007/06/22(金) 19:29:50#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;
}
0741デフォルトの名無しさん
2007/06/22(金) 19:29:51気づきませんでした。ありがとございます
0742デフォルトの名無しさん
2007/06/22(金) 19:31:120743デフォルトの名無しさん
2007/06/22(金) 19:37:47<time.h>ではないです。
getenv()、abs()などを使わなければならないと思います。
>>740
答えて下さったことにはありがたいのですが
環境変数を使わなければならないのですorz
0744デフォルトの名無しさん
2007/06/22(金) 19:38:47>>739
705のように変更したんですが、動作しません。
ファイル名入力すると不正な処理みたいにWindowsが言います
0745デフォルトの名無しさん
2007/06/22(金) 19:42:07http://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環境がないんでお手上げ
0746デフォルトの名無しさん
2007/06/22(金) 20:14:57設問に問題があるな。
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にするが)
これで試せ
0747715
2007/06/22(金) 20:15:24ありがとうございます。メイン内を追記して、それに合わせて一部いじりました
やはりグローバル変数は必要ですか…?
教員がやたらと嫌っているので、なんとかしたいです…
とりあえず、いじったったものを↓にhttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4336.txt
0748デフォルトの名無しさん
2007/06/22(金) 20:16:190749デフォルトの名無しさん
2007/06/22(金) 20:19:12それだとできます
0750デフォルトの名無しさん
2007/06/22(金) 20:23:07二つの文章の記述ってなにがちがうんですか?
&&の前後を入れ替えてるみたいですが
0751デフォルトの名無しさん
2007/06/22(金) 20:24:14FedoraCore5、bashのデフォルトな環境だと、その環境変数は宣言されてなかった。
0752デフォルトの名無しさん
2007/06/22(金) 20:25:19石橋を渡る時に、石があることを確かめてから渡る
0753デフォルトの名無しさん
2007/06/22(金) 20:27:53??
0754デフォルトの名無しさん
2007/06/22(金) 20:30:43あったらちょっとそれだけ・・・人間の力じゃ無理ぽ
0755デフォルトの名無しさん
2007/06/22(金) 20:33:29はaかつbですよね
b&&aにしてもかわらないんじゃないんですか?
実際入れ替えてみてうまく動作してはいるんですが
0756デフォルトの名無しさん
2007/06/22(金) 20:35:47&&は左から順番に真偽を評価していく。
偽になればそれ以降は評価しない。
後者なら、sが255になるとtable[s+1]をアクセスしない。
0757デフォルトの名無しさん
2007/06/22(金) 20:46:19なるほど!
0758デフォルトの名無しさん
2007/06/22(金) 21:02:38>>729
難しいですね。。半分も理解できないです。わかる部分を使わせていただきます。
>>732
適切な指摘ありがとうございます。
理由が分からずに困っていたので、すっきりしました。
0759デフォルトの名無しさん
2007/06/22(金) 21:11:39[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] その他の制限:サーバとクライアントは完成しています。
よろしくお願いします。
0760デフォルトの名無しさん
2007/06/22(金) 21:34:53[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] その他の制限: できるだけ簡単なもので・・
よろしくお願いします
0761デフォルトの名無しさん
2007/06/22(金) 21:35:000762デフォルトの名無しさん
2007/06/22(金) 21:38:42あのさ。これじゃエスパーしか作れないよ。
・作って欲しいのはサーバに接続してデータ受け取ってCSVを吐くプログラム
じゃねぇの?そういうのを普通は「クライアント」って言うんだけど、
「クライアントは完成しています」って何?
・プロトコルはどんな感じなの?いやRFCみたいにちゃんとしてなくてもいいけどさ。
今のまだとTCPだかUDPだかCORBAだかRPCだか、という次元さえわかんないよ?
・「ボタン」ってことは、GUIで作って欲しいのね?
0763759
2007/06/22(金) 21:51:07>・作って欲しいのはサーバに接続してデータ受け取ってCSVを吐くプログラム
> じゃねぇの?そういうのを普通は「クライアント」って言うんだけど、
> 「クライアントは完成しています」って何?
クライアントはまだ完成していません。誤植です。
プロトコルはTCPです。
そうです。GUIです。
よろしくおねがいします。
0764627
2007/06/22(金) 21:52:56void 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;
}
自分なりに解いてみたのですが最後がどうしてもセグメントエラーになってしまいます。
いったいどのようにしたらいいでしょうか?
0765デフォルトの名無しさん
2007/06/22(金) 21:58:59キーボードから入力じゃなくて初期化だから
char *a[10]={"a","i",}
って感じでいいんじゃね?
面倒だから2個しか初期化してないけど。
あと、メモリ確保してないポインタにいきなりscanfで値を入れるのは無理。
0766デフォルトの名無しさん
2007/06/22(金) 22:03:03%sはchar型配列を欲しがるわけだからその記述方法じゃダメ。
0767デフォルトの名無しさん
2007/06/22(金) 22:03:210768デフォルトの名無しさん
2007/06/22(金) 22:09:13授業で WinAPI とか Winsock(2) をさわりだけでもやっているのか?
0769デフォルトの名無しさん
2007/06/22(金) 22:11:21メニュー項目をいじって、あとは中でどういう処理をするか、書いたコードを用いる程度だし。
0770デフォルトの名無しさん
2007/06/22(金) 22:14:42ASyncSock ってその枠組みにうまく収まるような代物なんかな?
0771627
2007/06/22(金) 22:15:22初期化する値を変えるしかないのでしょうか?
0772デフォルトの名無しさん
2007/06/22(金) 22:16:42#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;
}
0773デフォルトの名無しさん
2007/06/22(金) 22:17:18多分誰もやらないと思うが、組んでもらいたいんなら、サーバのソースを
うp汁。それが手っ取りはやい。
それが不可能なら、以下を示すこと。
・通信手順と電文の形式(クライアントは接続後にコマンドのようなものを送るのか、
切断はどっちがいつ行うかなど)
・アドレスやポートはどうするか(テキストボックスにでも入力させる?)
0774デフォルトの名無しさん
2007/06/22(金) 22:17:23float 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);
}
0775デフォルトの名無しさん
2007/06/22(金) 22:18:24int 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;
}
0776デフォルトの名無しさん
2007/06/22(金) 22:20:31それでいいだろ。
もし、キーボードから入力させる意図だったとかぬかすなら
ややこしい表現するなバーローとでも言っとけばおk。
0777デフォルトの名無しさん
2007/06/22(金) 22:22:290778デフォルトの名無しさん
2007/06/22(金) 22:23:090779デフォルトの名無しさん
2007/06/22(金) 22:24:58これをもってない俺がやるとするとAPIゴリゴリでやるしかないが
コイツが食えるリソーススクリプトってどんなだ
あ、ダイアログ使わなきゃいいって?w
マンドクサ杉
0780デフォルトの名無しさん
2007/06/22(金) 22:26:22同じこと考えてるなw
WinMain から始まって CreateWindow(Ex) で書いてやろうかと思ったよ
0781デフォルトの名無しさん
2007/06/22(金) 22:27:19わかりました。何か言われたらそう言っておきます!
ありがとうございました。
0782デフォルトの名無しさん
2007/06/22(金) 22:30:47これもラーニング版とエンタープライズ(?)だかがあったけどどっちだべ?
0783デフォルトの名無しさん
2007/06/22(金) 22:36:23//---------------------------------------------------------------------------
#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();
}
//---------------------------------------------------------------------------
0784デフォルトの名無しさん
2007/06/22(金) 22:36:28[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] その他の制限: 特になし
0785デフォルトの名無しさん
2007/06/22(金) 22:39:05http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4338.txt
0786デフォルトの名無しさん
2007/06/22(金) 22:45:280787デフォルトの名無しさん
2007/06/22(金) 22:47:45#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);
}
}
0788デフォルトの名無しさん
2007/06/22(金) 22:47:47どうでもいいけど出力が美的でないな。
0789デフォルトの名無しさん
2007/06/22(金) 22:51:36[2] 問題文: パスワードを解析するソフトを作れ
[3] 環境
[3.1] OS: バインリナックス
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語: C
[4] 期限:来週の木曜
[5] その他の制限:特に無し
お願いします
0790デフォルトの名無しさん
2007/06/22(金) 22:56:15出来るだけ問題文のプログラムを使いたいのですが
0791デフォルトの名無しさん
2007/06/22(金) 22:58:44#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;
}
}
}
0792デフォルトの名無しさん
2007/06/22(金) 22:59:41>>786
0793デフォルトの名無しさん
2007/06/22(金) 23:06:00題意にあってるかどうかわからんが
#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;
}
0794デフォルトの名無しさん
2007/06/22(金) 23:12:11[2] 問題文: PS3のエミュレーターを作れ
[3] 環境
[3.1] OS: ウィンドウズ エックスピー
[3.2] コンパイラ名とバージョン:Borland C++ Compiler 5.5
[3.3] 言語: C
[4] 期限:明日
[5] その他の制限:特に無し
がんばって
0795793
2007/06/22(金) 23:13:39- hour = gmtime(&now)->tm_hour - offset;
+ hour = (gmtime(&now)->tm_hour - offset + 24) % 24;
0796デフォルトの名無しさん
2007/06/22(金) 23:14:15ほんとうに宿題なんか?どこの学校だ?文科省が認定していない妙ちくりんな
ぁゃιぃ学校なのか?
0797デフォルトの名無しさん
2007/06/22(金) 23:19:50#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;
}
0798デフォルトの名無しさん
2007/06/22(金) 23:35:13[2] 問題文: パスワード入力を求め照合しパスがあっていれば予め指定していたフォルダ(例、D:\C-program)を開くプログラムを作れ
[3] 環境
[3.1] OS: XP
[3.2] コンパイラ名とバージョン:Borland C++ Compiler 5.5
[3.3] 言語: C
[4] 期限:明日の朝まで
[5] その他の制限:特に無し
0799デフォルトの名無しさん
2007/06/22(金) 23:39:08ハーバード大学です
0800デフォルトの名無しさん
2007/06/22(金) 23:42:03フォルダを開くとはどういった動作なのか?
0801デフォルトの名無しさん
2007/06/22(金) 23:44:11ウィンドウズで言うとダブルクリックして窓が開いた状態です
0802デフォルトの名無しさん
2007/06/22(金) 23:51:10が一番簡単
0803デフォルトの名無しさん
2007/06/23(土) 00:08:15[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
0804デフォルトの名無しさん
2007/06/23(土) 00:12:030805803
2007/06/23(土) 00:13:57明日までに提出しないと・・・・
0806760
2007/06/23(土) 00:47:04説明不足ですいません。あなた様の書いてくださったプログラムはほとんど習ってないものが多いので、ちょっと例題に乗っていたプログラムを載せてみます。
これを参考に書いてもらいたいです。
正の整数をキーボードから順次入力し、入力が終わった時点で、それを逆順に出力するプログラム↓
/* 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;
この辺がよくわかりません(多分習ってません)
よろしくお願いします。
0807デフォルトの名無しさん
2007/06/23(土) 00:59:37[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]:特になし
よろしくお願いします。
0808デフォルトの名無しさん
2007/06/23(土) 01:04:21#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;
}
0810デフォルトの名無しさん
2007/06/23(土) 01:22:26#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]);
}
}
0811デフォルトの名無しさん
2007/06/23(土) 01:23:23void main(void) にすれば
return はいらない
0812デフォルトの名無しさん
2007/06/23(土) 01:24:23void main(void) でないとコンパイル通らんっしょ
0813デフォルトの名無しさん
2007/06/23(土) 01:26:06コンパイルは通るが警告がでる
0815デフォルトの名無しさん
2007/06/23(土) 01:26:55return 0;
}
これはISO、ANSI準拠だからgdgd言わずにこういうスタイルを今後は使いなはれ。
0816760
2007/06/23(土) 01:28:030817デフォルトの名無しさん
2007/06/23(土) 01:32:11main()
0818デフォルトの名無しさん
2007/06/23(土) 01:32:23[2] 問題文(含コード&リンク):
複素数a+bi(iは虚数単位)のn乗を求めて出力するプログラムを作成せよ。
a,bはdouble型、nはint型でキーボードから入力するものとする。
[3] 環境
[3.1] OS: Linux
[3.2]
[3.3] 言語: C
[4] 期限:来週の月曜まで
[5] その他の制限:
よろしくです
0819デフォルトの名無しさん
2007/06/23(土) 01:33:03標準的なものを見て学ぶ姿勢を持ったほうが今後の人生のためだよ。
voidなんて習っていない?あま〜〜い、甘過ぎるよ小沢さ〜〜ん!
変数の型について学びなはれ。ちなみに、引数のないライブラリでは function(void); と
括弧の中を入れないとエラーメッセージが出る?と思われ。
0820デフォルトの名無しさん
2007/06/23(土) 01:34:340821デフォルトの名無しさん
2007/06/23(土) 01:35:04[2] 問題文(含コード&リンク):
1から9までの数字を1回ずつ使った9桁の数字を小町数という。
自乗した数が小町数となるような自然数をすべて求めるプログラムを作成し、
その数と小町数の両方を出力せよ。たとえば24441の自乗は597362481であり、小町数となる。
[3] 環境
[3.1] OS: Linux
[3.2]
[3.3] 言語: C
[4] 期限:1ヶ月後
[5] その他の制限:よくわからない
0822デフォルトの名無しさん
2007/06/23(土) 01:53:45// 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;
}
0824デフォルトの名無しさん
2007/06/23(土) 02:05:12できた。
#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;
}
0825デフォルトの名無しさん
2007/06/23(土) 02:06:14こっ、小町ちゃ〜〜〜ん♪
0826デフォルトの名無しさん
2007/06/23(土) 02:10:32#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;
}
0827デフォルトの名無しさん
2007/06/23(土) 02:13:22#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;
}
0828デフォルトの名無しさん
2007/06/23(土) 02:13:41ちょっと無駄なループが多いけど・・・
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4340.c
こういうちょっと面白い問題だと、やっぱ解答率高いよな。
0829デフォルトの名無しさん
2007/06/23(土) 02:21:130830デフォルトの名無しさん
2007/06/23(土) 02:22:39#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;
}
0831デフォルトの名無しさん
2007/06/23(土) 02:28:3011111と31246は何を根拠に?
上限、下限の設定は>827が一番わかりやすいよな。
でもcheck関数に「0」を含む数字が渡ったら配列外参照するよな?
0832デフォルトの名無しさん
2007/06/23(土) 02:29:59123456789と987654321の正の平方根。厳密には31247以下とすべきだったかな。
まぁ、影響はなかったが。
0833デフォルトの名無しさん
2007/06/23(土) 02:33:160834デフォルトの名無しさん
2007/06/23(土) 02:33:24ぐは、123456789の平方根て11111...になるのか・・・失礼したorz
0835デフォルトの名無しさん
2007/06/23(土) 02:36:52あらほんとうだ。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;
}
0836872
2007/06/23(土) 02:39:21int 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;
}
すれ汚し失礼。
0837デフォルトの名無しさん
2007/06/23(土) 02:45:41[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問もあり恐縮ですが力をお貸し下さい。
0838デフォルトの名無しさん
2007/06/23(土) 03:09:44とりあえず、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 );
}
}
}
0839デフォルトの名無しさん
2007/06/23(土) 03:16:22[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] その他の制限:
お願いします。
0840デフォルトの名無しさん
2007/06/23(土) 03:18:49[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] その他の制限:
よろしくお願いします
0841デフォルトの名無しさん
2007/06/23(土) 03:55:02[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] その他の制限:特にない。最大限問題のプログラムを使う
タイプミスしていたら教えてください
0842デフォルトの名無しさん
2007/06/23(土) 03:55:34mirror_imageは難しかった。単方向線形リストの勉強になった。
やたらと汚く効率も悪いが許してくれ。コメントはそれなりにふった。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4344.c
0843デフォルトの名無しさん
2007/06/23(土) 04:08:25>>664-665
0844デフォルトの名無しさん
2007/06/23(土) 04:53:18http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4346.c
ぶっちゃけ、難しかった。特に、数式を作るあたりが。
ちょっと、異様な処理になってしまったが勘弁してくれ。
乗除機能追加はそれなりにやりやすいはず。
0845844
2007/06/23(土) 04:58:27途中のを上げてしまった、ソーリー。
正しくは↓で
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4347.c
0846デフォルトの名無しさん
2007/06/23(土) 05:09:58予想していたより、異常にヒットしたんだがこんなもんなのか?
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;
}
0847デフォルトの名無しさん
2007/06/23(土) 06:20:390848デフォルトの名無しさん
2007/06/23(土) 06:28:41for ( c = b,ab=a * a + b * b; c < a + b; c++ ) {
if ( c * c == ab ) {
こんな感じで
0849デフォルトの名無しさん
2007/06/23(土) 06:36:510850デフォルトの名無しさん
2007/06/23(土) 09:15:47[2] 問題文(含コード&リンク):
1.標準入力からテキストを入力し、指定があれば文字変換を行い、標準出力に出力することを、
入力が尽きるまで繰り返すプログラムを書け。
ただし、入力と出力にはシステムコールを直接使用すること。
文字変換は、以下のようにオプションで指定する。
-u アルファベット小文字を対応する大文字に変換する。
-l アルファベット大文字を対応する小文字に変換する。
2. 標準入力からテキストを入力し、指定があれば行の削除を行い、標準出力に出力することを、
入力が尽きるまで繰り返すプログラムを書け。
ただし、入力と出力にはシステムコールを直接使用すること。
削除する行は、以下のようにオプションで指定する。
-e 空行を除去する。
-s #で始まる行を除去する。
[3] 環境
[3.1] OS:Vine Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C++
[4] 期限: 来週中
[5] その他の制限:よろしくお願いします
0851デフォルトの名無しさん
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;
}
0852デフォルトの名無しさん
2007/06/23(土) 10:07:15struct 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
となりました。
どういう風に書けばいいんでしょうか?
よろしくおねがいします
0853デフォルトの名無しさん
2007/06/23(土) 10:10:471.
#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;
}
0854デフォルトの名無しさん
2007/06/23(土) 10:12:17問1
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4348.txt
0855デフォルトの名無しさん
2007/06/23(土) 10:24:17char型の要素には、文字が一文字しか入らない。
当然にatoi()にも渡せない。
0856852
2007/06/23(土) 10:38:00char name[50]; //氏名
char res[3]; //点数
みたいにして宣言したのでいけるとおもったのですが・・・
0857デフォルトの名無しさん
2007/06/23(土) 10:45:420858デフォルトの名無しさん
2007/06/23(土) 10:46:290859852
2007/06/23(土) 10:49:25>>858
char型をint型にいれたりということもできるんでしょうか?
0860デフォルトの名無しさん
2007/06/23(土) 10:52:380861デフォルトの名無しさん
2007/06/23(土) 11:08:300862デフォルトの名無しさん
2007/06/23(土) 11:09:44問2
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4349.txt
0863デフォルトの名無しさん
2007/06/23(土) 11:10:000864デフォルトの名無しさん
2007/06/23(土) 11:12:48cygwin, coLinux, またはPCエミュレータの類にLinuxをインストール
後者ほど互換性が高い
0865852
2007/06/23(土) 11:25:20その行でもエラーがでてしまったのですが
0866デフォルトの名無しさん
2007/06/23(土) 11:45:03今の状態のプログラムをコピペしてみな
書き忘れとか無いようにコピペな
0867デフォルトの名無しさん
2007/06/23(土) 11:46:49>>862
それだと2種類のオプションが両方指定されたときに
期待どおりの動作をしないように思うんだけど。
0868デフォルトの名無しさん
2007/06/23(土) 11:48:39struct data1{
char name[50]; //氏名
char res[3]; //点数
};
struct data2{
char name[50]; //氏名
int res; //点数
};
構造体の宣言はこれで良いのか?
あと、data1.res[3]への点数の格納方法はどうやっている?
99点の時は"99\0"かな?
その場合、100点の時はどうしている?
0869デフォルトの名無しさん
2007/06/23(土) 11:51:04あーそうだな。でも直すのマンドクセw
0870852
2007/06/23(土) 11:53:01struct 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
}
0871デフォルトの名無しさん
2007/06/23(土) 11:54:170872852
2007/06/23(土) 11:54:46[4]にしとかないとだめでしたね・・・
うっかりしていました
0873デフォルトの名無しさん
2007/06/23(土) 11:55:480874デフォルトの名無しさん
2007/06/23(土) 11:56:01int sub[3];
こう宣言していて、
prog_sort[i].sub = atoi(stu[i].prog);
何故subに添え字がないの?
0875デフォルトの名無しさん
2007/06/23(土) 11:56:01struct sort{
char name[50]; //氏名
int sub; //得点
};
0876852
2007/06/23(土) 11:56:23なぜかintに文字数指定していたのと、
868で指摘していただいた[3]を[4]を修正したらエラーが消えました。
0877 ◆DpMW3bRjps
2007/06/23(土) 12:02:27提出期限すぎたんですけど、一応提出はしたいです
それと、構造体をまだ習っていない初心者ですので、それを使わないでお願いします
わざわざ作っていただいたのにすみません↓↓
0878デフォルトの名無しさん
2007/06/23(土) 12:16:540879デフォルトの名無しさん
2007/06/23(土) 12:19:180880852
2007/06/23(土) 12:23:01void sum_sort(){
quick(struct data stu[],0,int sum)
}
と書いて ソート関数に飛ばしているところで
error: syntax error before 'struct' が出ます。
なぜでしょうか・・?
0881デフォルトの名無しさん
2007/06/23(土) 12:30:500882852
2007/06/23(土) 12:56:39これにすると
error: syntax error before ']' になります
quick(stu,0,sum) にすると
warning: passing argument 1 of 'quick' from incompatible pointer type
になります
0883デフォルトの名無しさん
2007/06/23(土) 12:58:280884869
2007/06/23(土) 12:58:45ごめん。心を入れ替えて直した。
ついでに、実はC++指定みたいだから、手抜きだけどそれっぽくした。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4351.txt
cc -DQ1 hoge.cpp
みたいに、Q1を定義してコンパイルすると問1
定義しないと問2用のプログラムになる。
0885デフォルトの名無しさん
2007/06/23(土) 13:03:52こうか?せめてquick関数のプロトタイプくらい書いてくれ
0886デフォルトの名無しさん
2007/06/23(土) 13:07:450887デフォルトの名無しさん
2007/06/23(土) 13:22:210888852
2007/06/23(土) 13:22:50http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4352.c
コンパイルエラーのメッセージもロダの方にかいておきました。
よろしくおねがいします。
0889デフォルトの名無しさん
2007/06/23(土) 13:27:28さあ次の宿題を。
0890デフォルトの名無しさん
2007/06/23(土) 13:30:10[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で拾うこと。
0891デフォルトの名無しさん
2007/06/23(土) 13:31:40[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で拾うこと。
0892デフォルトの名無しさん
2007/06/23(土) 13:35:00修正面倒だから問題点を書くと、isdigitの使い方と比較の仕方が間違ってる
というかプログラムの設計がすでに間違ってる
0893852
2007/06/23(土) 13:37:010894デフォルトの名無しさん
2007/06/23(土) 13:40:42構造体を書き換えて、 fscanfの使い方を変えるべき
せっかくfscanfを使ってるんだから、できる作業は全部やってもらえ
文字から数字への変換とか
0895852
2007/06/23(土) 13:45:33受けてない人は--にしているので
まずは全部charで取り込んで、
あとで数値のものだけintにしていこうとおもったのですが...
0896852
2007/06/23(土) 13:53:560897デフォルトの名無しさん
2007/06/23(土) 13:55:27これ無理
0898デフォルトの名無しさん
2007/06/23(土) 13:56:540899デフォルトの名無しさん
2007/06/23(土) 13:56:54読み込みのときに--だったら-1にしちゃえよ
そっちの方が楽
コンパイルエラーは変えなきゃいけない場所が多すぎて・・・
よくまぁあれだけ間違えられるな
0900デフォルトの名無しさん
2007/06/23(土) 13:57:16エラーを、(´・ω・`) しろ。
0901852
2007/06/23(土) 13:59:04どんな感じでやったらいいでしょうか
0902デフォルトの名無しさん
2007/06/23(土) 14:03:34struct 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;
こんな感じで
0904852
2007/06/23(土) 14:10:57参考にさせていただきます。
0905デフォルトの名無しさん
2007/06/23(土) 14:39:18リストの番兵はグローバル変数に置かないと意味がない
さもないと延々関数呼び出しで番兵のポインタ持ち歩くハメになる
その教員にリストの番兵をグローバルに置かない方法を聞いてみるといい
そんな方法があるならこっちが知りたい
関数内は極力単純な処理にした方がいい
入力とか出力とかは呼び出す側かそれ専用の関数内でやって
入力から拾ったデータをやり取りするように設計するべき
そのために関数の引数と返り値ってのがある
とりあえず、関数内で別々に入力を促すのはちょっと勘弁してほしい
まぁアドバイス的にはこんなところだ
頑張って仕上げてくれ
0906デフォルトの名無しさん
2007/06/23(土) 14:50:40#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;
}
0907デフォルトの名無しさん
2007/06/23(土) 14:52:20課目毎に変数名変えてるけど、配列にして処理を共通にしたらどうかな。
0908852
2007/06/23(土) 14:56:36S,from,toが定義されていないと言われてしまうのですが、
quick_sortを単品で作ったときは
void quick(int S[],int from,int to)
{〜〜〜〜〜
というふうに、今回と同じように書いても何も言われなかったのですが
何か他のところに原因があるのでしょうか?
0909852
2007/06/23(土) 15:33:48構造体の要素をintになおしたりしてみました。
908に書いたようなエラーが出ています。
0910852
2007/06/23(土) 15:35:17すいません
0911デフォルトの名無しさん
2007/06/23(土) 15:44:12[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] その他の制限: 配列までは習いました
0912852
2007/06/23(土) 15:57:51struct 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];
にみたいに、ということでしょうか?
0913デフォルトの名無しさん
2007/06/23(土) 15:58:14作り直したほうが早いかも。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4356.txt
0914デフォルトの名無しさん
2007/06/23(土) 16:09:19構造体を引数や戻り値の型に取る関数のプロトタイプ宣言は
構造体の宣言より後ろに書きましょう。
0915852
2007/06/23(土) 16:14:00なるほど、そこでしたか。
エラーが後4行になりました。
FILE *fin;//ファイルを開く
fin = fopen("result.txt","r");//読み込みモード
syntax error before 'fin'
になります。
0916デフォルトの名無しさん
2007/06/23(土) 16:17:03マンドクサすぎてとてもまともに読む気になれん。
他人のコードのデバグなんて好き好んでやりたがるやつは少ないと知れ。
以下、パッと見て気づくところ
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)
意味わかんねぇ。
あとは知らん。まともに追う気にはとてもなれん。
0917デフォルトの名無しさん
2007/06/23(土) 16:20:380918デフォルトの名無しさん
2007/06/23(土) 16:24:040919デフォルトの名無しさん
2007/06/23(土) 16:30:34#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;
}
0920852
2007/06/23(土) 16:31:11http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4357.c
コンパイルエラー自体はあと3つみたいです(´・ω・`)
3つとも見た目には問題ないと思うんですが・・・
0921デフォルトの名無しさん
2007/06/23(土) 16:38:260922852
2007/06/23(土) 16:39:36もうちょっとがんばってきます(´・ω・`)
0923デフォルトの名無しさん
2007/06/23(土) 16:41:06面倒くさくて>>913が意図した動作になるのかどうかもわからんが
とりあえず"--"を処理しないといけないみたいだよ
0924デフォルトの名無しさん
2007/06/23(土) 16:43:19あー。>>854, >>862だったら>>884のほうが……
もう見てねーだろなあ
0925依頼者
2007/06/23(土) 16:46:00[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] その他の制限:特になし
演算子の問題です。よろしくお願いします。
0926デフォルトの名無しさん
2007/06/23(土) 16:48:13>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の書き間違いが多すぎる。
0927デフォルトの名無しさん
2007/06/23(土) 17:00:05(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;
}
0928デフォルトの名無しさん
2007/06/23(土) 17:00:38こんなに早くやってくれるとは思いませんでした。
ありがとうございます!
0929デフォルトの名無しさん
2007/06/23(土) 17:12:14[2] 問題文(含コード&リンク):
(1)入力ファイルの中の文字、空白、タブ、改行の数を調べて表示するプログラムをかけ。
(2)入力ファイルの中の単語を切り出して、順次出力(改行区切り)するプログラムを作れ。単語の定義として、空白、タブ、改行を含まない文字列とする。
[3] 環境
[3.1] OS: MacOSX
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 月曜までにお願いします。
[5] その他の制限:ファイルオープン-処理-ファイルにデータ書き込み-クローズの手順でかくこと。
0930852
2007/06/23(土) 17:13:14コンパイルエラーはすべて取り除くことが出来ました。
ありがとうございます。
実行してみたところ、最初の表示をして関数に入る前に
Floating exception というエラーが出てしまいました。
コレはどういうエラーなんでしょうか?
-- を -1 にしたところを考慮し忘れてるとかでしょうか・・
0931デフォルトの名無しさん
2007/06/23(土) 17:13:57全角文字はどう数えれば良いんだ?
ASCIIしか無い前提で良いの?
0932デフォルトの名無しさん
2007/06/23(土) 17:24:42(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;
}
0933デフォルトの名無しさん
2007/06/23(土) 17:26:15#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
べ、べつにあたしは哀れなんかじゃないんだからね!
0934932
2007/06/23(土) 17:29:410935デフォルトの名無しさん
2007/06/23(土) 17:29:57http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4359.txt
0936デフォルトの名無しさん
2007/06/23(土) 17:35:15http://piza.2ch.net/log/prog/kako/953/953796601.html
0937852
2007/06/23(土) 17:37:41printf("このプログラムは 成績処理 を行うプログラムです。\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");
}
0938デフォルトの名無しさん
2007/06/23(土) 17:38:41fflush(stdout);をinput();の前にいれろ
0939デフォルトの名無しさん
2007/06/23(土) 17:40:460940デフォルトの名無しさん
2007/06/23(土) 17:45:09//データを構造体配列に取り込んでいく
の下のfscanfがtmpじゃなくてstu[i]になってる
0941852
2007/06/23(土) 17:45:140942852
2007/06/23(土) 17:46:41name と id はstu[i]でいいとおもうのですが...
0943デフォルトの名無しさん
2007/06/23(土) 17:47:280944852
2007/06/23(土) 17:48:12printf("\n まで
↓
fflush(stdout);をinput();の前に
↓
printf("\n処理中..");まで
0945852
2007/06/23(土) 17:49:46修正しました。ありがとうございます
0946デフォルトの名無しさん
2007/06/23(土) 17:50:19何がいいたいのかわからん
もっとお母さんみたいに言ってくれないか
0947デフォルトの名無しさん
2007/06/23(土) 17:53:12強制的に表示したいそれぞれのprintf()の後にfflush()を入れればいい。
0948852
2007/06/23(土) 17:58:45printf("\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
-----
以下追加しても変わらず・・・、という感じです。
0949デフォルトの名無しさん
2007/06/23(土) 18:00:260950852
2007/06/23(土) 18:00:26その際にinputなどの関数での処理は行われているのでしょうか?
0951デフォルトの名無しさん
2007/06/23(土) 18:05:530952852
2007/06/23(土) 18:13:26ありがとうございます
0953852
2007/06/23(土) 18:16:150954デフォルトの名無しさん
2007/06/23(土) 19:22:25#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;
}
0955デフォルトの名無しさん
2007/06/23(土) 19:24:06#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;
}
0956デフォルトの名無しさん
2007/06/23(土) 19:25:17│ │─┼─ /| _,.イ,,.ィ' ─────‐‐‐ ・ ←>>925
│ | │ | | | イン ,'´ ̄`※ // | \
__{_从 ノ}ノ/ / ./ | \
__/} `く((/ ./ |
,. ,. -‐===‐-`つ/ ,.イ // )) / ∵|:・.
〃〃〃〃 / /ミノ__ /´('´ / .∴・|∵’
ヽ_I__I__I__I__I_I __∠_/ ,∠∠_/゙〈ミ、、
ー{____,,.二二二二) ノ く{ヽ、/ ゙Y} ゙
/I I I I I I `^^' \ ! }'
,' /
0957依頼者
2007/06/23(土) 19:31:430958依頼者
2007/06/23(土) 19:32:36[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] その他の制限:特になし
また演算子の問題です。よろしくお願いします。
0959デフォルトの名無しさん
2007/06/23(土) 19:51:28> [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;}
0960デフォルトの名無しさん
2007/06/23(土) 19:53:26#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;
}
0961デフォルトの名無しさん
2007/06/23(土) 19:53:53すごくスマートだ
0963852
2007/06/23(土) 20:26:34入力データ http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4361.txt
出力データ http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4362.txt
コンパイルのエラーは取れたのですが、
計算や出力がうまくいっていないようです(´・ω・`)
修正ポイントなどご指摘お願いします。
0964デフォルトの名無しさん
2007/06/23(土) 20:40:09似た処理が続いてるのをコピペで済ますなよ(2、3個程度ならまだいいが)
0965852
2007/06/23(土) 20:41:420966デフォルトの名無しさん
2007/06/23(土) 20:42:37input()内のfscanfは使用必須なんですか?
これ使わないで自分でフィールドを分割した方がいいかなと思う。
0967デフォルトの名無しさん
2007/06/23(土) 20:43:410968852
2007/06/23(土) 20:44:02fscanfでやるっていっちゃったので・・・
0969デフォルトの名無しさん
2007/06/23(土) 20:44:56誰に。「やっぱやめました」で済む話じゃねぇの
0971デフォルトの名無しさん
2007/06/23(土) 20:53:27SBJ_PROG,
SBJ_EXP,
・・・・
SBJ_ENG3
MAX_SBJ
}
//学生データの構造体
struct data{
char id[8]; //学籍番号
char name[50]; //氏名
int marks[MAX_SBJ];
int sum; //合計点
int ave; //平均点
};
0972デフォルトの名無しさん
2007/06/23(土) 20:54:21おまえのプログラムのデバッグをするスレじゃない。
0973デフォルトの名無しさん
2007/06/23(土) 20:58:54y=1 にすると2桁目が変わるようだが?
0974852
2007/06/23(土) 20:59:270975852
2007/06/23(土) 21:00:080976852
2007/06/23(土) 21:00:25enum {
SBJ_PROG,
SBJ_EXP,
・・・・
SBJ_ENG3
MAX_SBJ
}
これって何でしょうか?
0977デフォルトの名無しさん
2007/06/23(土) 21:03:15「変数xのyビット目」をどう解釈するかだよね。
0978デフォルトの名無しさん
2007/06/23(土) 21:08:49[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] その他の制限: (ポインタを習ってるレベルです)
0979デフォルトの名無しさん
2007/06/23(土) 21:11:41> main(int argcchar , int argv[]){
main(int argc, char *argv[]){
に汁
0980デフォルトの名無しさん
2007/06/23(土) 21:12:010981デフォルトの名無しさん
2007/06/23(土) 21:14:25#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;
}
C/C++の宿題を片付けます 91代目
http://pc11.2ch.net/test/read.cgi/tech/1182607405/
0983デフォルトの名無しさん
2007/06/23(土) 23:16:53[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] その他の制限: 番兵法
0984デフォルトの名無しさん
2007/06/23(土) 23:17:46(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++;
}
0985984
2007/06/23(土) 23:19:53strcpy(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 でいい
0986984
2007/06/23(土) 23:21:08struct 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()も同様
0987デフォルトの名無しさん
2007/06/23(土) 23:36:21(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;
}
0988デフォルトの名無しさん
2007/06/23(土) 23:47:31#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;
}
0989852
2007/06/23(土) 23:55:340990852
2007/06/24(日) 00:04:020991デフォルトの名無しさん
2007/06/24(日) 00:07:510992852
2007/06/24(日) 00:08:080993852
2007/06/24(日) 02:47:280994デフォルトの名無しさん
2007/06/24(日) 02:51:34http://pc11.2ch.net/test/read.cgi/tech/1180856695/151
0995デフォルトの名無しさん
2007/06/24(日) 02:51:370996デフォルトの名無しさん
2007/06/24(日) 03:01:26質問が不明なのであえて聞くが、どの辺がわからない?
(1)while(fgets(buf,sizeof(buf),fin) > 0){が判らない
(2)while (*p != 0) { ブロックが判らない
(3)fgets()が判らない
あなたの熱意は理解するので、教えて君だとは思ってない。
次スレに移動かもしれない。
0997デフォルトの名無しさん
2007/06/24(日) 03:23:29Linux雑誌とか買うとCDからブートできるLinuxついてたりする
K Desktopとか
もしくはなんかネットでLinux手に入れて自分でブートCD作っちゃうとか
0998デフォルトの名無しさん
2007/06/24(日) 04:21:47字句解析の基礎だな
問題点は>>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;
}
0999デフォルトの名無しさん
2007/06/24(日) 04:27:441000デフォルトの名無しさん
2007/06/24(日) 04:31:29スマートというか他に書きようがない
10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。