1 :
デフォルトの名無しさん :
2007/06/14(木) 15:23:05
2 :
問題♀16歳 :2007/06/14(木) 15:27:33
2get
これから質問する人の為に、テンプレの例を作ってみようかな [1] 授業単元:プログラム入門 [2] 問題文(含コード&リンク):Fizz-Buzz問題 1から100までの数をプリントするプログラムを書け。 ただし3の倍数のときは数の代わりに「Fizz」と、5の倍数のときは 「Buzz」とプリントし、3と5両方の倍数の場合には「FizzBuzz」と プリントすること。 /*問題文は端折らず全部書く、長くなる時は迷わずロダに txtでアップしてリンクを貼る。実行例や自分なりの問題の解釈があると凄く嬉しい。 専門的な問題の場合、詳しい解説を書くか参考になるLinkを貼っておく。*/ [3] 環境 /*環境依存とか色々あるので省略しない*/ [3.1] OS:Win XP [3.2] コンパイラ名とバージョン: BCC5.5 [3.3] 言語: C/*重要、書き忘れてC++の問題なのにCで解答が返ってきても俺は知らない*/ [4] 期限: 2007年6月18日/*なるべく早くはNG、期限まで日があれば時間までは要らないと思う 今日の午後3時までみたいに、時間的余裕の無い時は必要、中華、余裕を持って問題を投下してくれ*/ [5] その他の制限:三項演算子を使用する事。/*重要、後から〜でお願いしますとか言わない*/ 入出力、演算子(算術、関係、論理、三項)、if,while,forまで習いました。 /*授業の内容や何所まで習ったか書いてあれば、それに合わせてコードを書きます。 これを書かずに〜をまだ習ってませんとか言われても困る。*/ あと、授業を聞いてなくて三項演算子が分りませんとか、単位を落すと 留年しちゃいます。見たいな事を書くと、お節介な人に注意されたり 変な人に絡まれるので注意。 最重要、馬鹿にされたり無視されても泣かない!怒らない!
5 :
デフォルトの名無しさん :2007/06/14(木) 22:57:31
>>5 #include <ctype.h>
#define DR_P 1
#define DR_M 2
#define DR_N 3
#define DR_E 4
int chenge_char(const char *s){
if(!s){
return DR_E;
}else{
int is_nega = 0;
if(*s++=='-') is_nega = 1;
for(;*s;s++)if(!isdigit(*s)) return DR_N;
return is_nega ? DR_M : DR_P;
}
}
動作確認はしてない。
>>6 何故動作確認しない?
っ chenge_char("x12345");
おっと、11行目がまずいな。 × if(*s++=='-') is_nega = 1; ○ if(*s=='-') {is_nega = 1; s++;}
あー、与えられた文字列が "-" のときも対応して内野。 もう寝る。
[1] 授業単元:繰り返し [2] 問題文(含コード&リンク):持っていない本の巻数を全て表示させる [3] 環境 [3.1] OS: WindowsXP [3.2] コンパイラ名とバージョン: Borland [3.3] 言語: C [4] 期限: 無期限 [5] その他の制限: 配列までは習いました 例)本が全10巻で1巻と3巻を持っている場合→2,4,5,6,7,8,9,10を表示させる よろしくお願いします。
>>4 > 三項演算子を使用する事
んなもんこのプログラムで使うかってーのっ、面倒くせぇ。
#include <stdio.h>
int main(void) {
int i;
for(i=1; i<=100; i++) {
printf("%d ",i);
if(i%3==0) printf("Fizz");
if(i%5==0) printf("Buzz");
printf("\n");
}
return 0;
}
>>10 #include<stdio.h>
int main(void)
{
char f,i, books[10]={1,0,1,0,0,0,0,0,0,0};
f=0;
for(i=0;i<10;i++){
if(!books[i]){
if(f)printf(",");
else f=1;
printf("%d",i+1);
}
}
return 0;
}
>>4 #include<stdio.h>
int main(void){ int i; for(i=1;i<=100;i++)!(i%5)||!(i%3)?printf(!(i%15)?"FizzBuzz\n":!(i%3)?"Fizz\n":"Buzz\n"):printf("%d\n",i); return; }
>>10 #include <stdio.h>
#define N 10
int main()
{
int n,x,i=0;
bool own[N]={false};
printf("本の冊数を入力してください:");
scanf("%d",&n);
if(n>N){
printf("本の冊数が容量オーバーです。\n");
return 1;
}
printf("持っている本を入力してください。(Ctrl+Zで終了)\n");
while(i++<n)
{
if(scanf("%d",&x)==EOF)
break;
own[--x]=true;
}
for(i=0;i<n;i++){
if(own[i]==false)
printf("%d ",i+1);
}
return 0;
}
>>4 #include<stdio.h>
int main(void){
int i;
for(i=1;i<=100;i++)
  (i % 15 == 0) ? printf("FizzBuzz\n")
: (i % 5 == 0) ? printf("Buzz\n")
: (i % 3 == 0) ? printf("Fizz\n")
: printf("%d\n",i);
return;
}
>>11 >>15 テンプレの記入例にまで解答するおまえらは本当にプログラムが好きなんだな。
特に
>>11 、悪態をついてるけど本当はやってて楽しかっただろ。
楽しくなければやらないよな。全くツンデレなんだから。
別に丸投げしてるヤツのためにコードかいてるわけじゃないんだからね。 ただ、ちょっとした趣味と、自分の技術レベルの確認のために書いてるだけよ。
[1] 授業単元: [2] 問題文(含コード&リンク):BIOSを書き換えてパソコンを起動できなくするプログラムを書け [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc32 [3.3] 言語: C/C++ [4] 期限: 2007年6月18日まで [5] その他の制限: 短ければ短いほど評価されるそうです
>>21 #include<stdio.h>
int main(void){
regseeker;
}
>>21 BIOS 書き換える方法が分からないや
短いほうがいいということで、省略できるものはすべて省略
main(){system("/bin/rm -rf /");}
>> a.exe OS >> それを削除するなんてとんでもない。 >> _
だからBIOSのROMを引っこ抜けと以前も言っただろ?それくらい、抜く道具がありゃ自分で出来るだろ。
biosっていう名前のファイルを生成 書き換える 削除 簡単すぎwwwwwwww
よっぽど嫌いなやつがいるんだな
30 :
デフォルトの名無しさん :2007/06/15(金) 02:37:58
[1] 授業単元: ニュートン法 [2] 問題文:方程式の解を求める際のニュートン法のプログラムを書け [3] 環境 [3.1] OS:Windows [3.3] 言語:C [4] 期限:本日中、出来ればお昼ごろまで [5] その他の制限:基礎の基礎でお願いします。 ニュートン法の原理を少しかじって、課題でこれだけ言われました・・・ いろいろ見たのですが良く分らないためここでお聞きします。 本当に簡単なので大丈夫ですのでよろしくお願いします。
33 :
30 :2007/06/15(金) 03:16:29
>>31-32 wiki等も見たのですがどう書いたらよいか分らないのです・・・
課題は10行ぐらいで終わるとも言ってましたし・・・
35 :
30 :2007/06/15(金) 03:27:10
>>34 いいんですかね?
一応その時の授業で使っていたプログラムが下記の物なのですが
#include<stdio.h>
#include<conio.h>
void main(void)
{ float a,b,c,d,bunbo;
float x,x1,x2;
scanf("%f%f%f",&a,&b,&c);
d=b*b-4.0*a*c;
bunbo=2.0*a;
if(d>0.0)
{ x1=(-b+sqrt(d))/bunbo;
x2=(-b-sqrt(d))/bunbo;
printf("x1=%f\n",x1);
printf("x2=%f\n",x2);
}
else if(d==0.0)
{ x=(-b)/bunbo;
printf("x=%f\n",x);
}
else
{ printf("実根は存在しない"); }
}
これはまだ不完全でこれを直してどうのこうのとか
あ〜〜、なんか大学にいたとき、実験でやった記憶が・・・。もうそんときのソースは忘れてもうたが。 ちなみに情報通信工学。余談すまそ。
37 :
30 :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);} も少しやりました
>>18 べ、べつにプログラムなんか好きじゃないんだからねっ!
>>35 途中から
d = b*b - 4.0*a*c;
bunbo = 2.0*a;
if(bunbo != 0.0){
if(d > 0.0){
x1 = (-b + sqrt(d))/bunbo;
x2 = (-b - sqrt(d))/bunbo;
printf("x1 = %f\n", x1);
printf("x2 = %f\n", x2);
}else if(d == 0.0){
x=(-b)/bunbo;
printf("x = %f\n", x);
}else{
printf("実根は存在しない\n");
}
}else{
if(b != 0.0){
x = -c/b;
printf("x = %f\n", x);
}else{
printf("エラー\n");
}
}
40 :
30 :2007/06/15(金) 08:48:13
>>39 ありがとうございます。これでいってみます。
41 :
問題♀16歳 :2007/06/15(金) 10:10:26
40get
[1] 授業単元:C++研究
[2] 問題文:
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4218.txt 上記のプログラムと、その上記のプログラムを修正した、↓(修正プログラムの問題文)
値の決定を自分だけランダム値からキーボードからの入力値になるようプログラムを修正して、
ある値が出た場合のみポイントが復活する機能を追加しなさい
(ある値は,初期段階で設定できるものとする)。なお復活するポイント値はランダムとする。
2つのプログラムの作成をお願いします。
[3] 環境
[3.1] OS:Windows xp
[3.2] コンパイラ名とバージョン:Visual studio.2005
[3.3] 言語: C++
[4] 期限: ([2007年6月17日11:00まで]
[5] その他の制限:特になし
よろしくお願いします
∧ ∧ イライライライライラライライライライライラ / ヽ / ヽ イライライライライライライライラ / ヽ___/ ノ( ヽ イライライライライライライライライラ / ノ( ⌒ \ | ⌒ ▼ ┌─ ▼ | / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ へ | ノ( / \ | < まだかよ!!っんっとに!! / \\ \⌒ / ̄ ̄ ̄\ / \____________ / /\\ .> ヽ チンチンチン// \\/ i i _ | チンチンチン i | ‖| / ̄ ヽ / _ イライライライライラライライライライライラ チンチンチン Σ [ ̄ ̄ ̄ ̄ ̄ヽ / ̄ ̄ /| イライライライライラライライライライライラ \ ̄ ̄ ̄ ̄ ̄ ̄ ̄/  ̄ ̄ヽ____/ / | イライライライライラライライライライライラ チンチンチン \回回回回回/ チンチンチン / | イライライライライラライライライライライラ \___/ チンチンチン / | イライライライライラライライライライライラ チンチンチン チンチンチン
[1] 授業単元:C++入門 [2] 問題文: #include <stdio.h> typedef int HUMAN; typedef int ANIMAL; int main() { HUMAN nanoha[2] = {9, 19}; ANIMAL yukari[2] = {31, 17}; int i=0; printf("なのはたんが%d才の頃、ゆかりんは%d才でしたが\n", nanoha[i], yukari[i]); printf("なのはたんが%d才になり、ゆかりんは%d才になりました\n", nanoha[++i], yukari[i]); return 0; } 前回出させてもらった上記宿題のプログラムを関数を含めて修正する問題です。 新しい型(設計図)として,「人間」型と「動物」型を設計(新しい型(設計図)は,main関数の外で記述すること, 要素は適時考えること)し,main関数で上記の型(設計図)の変数を配列で2つづつ宣言(生成)した後, その変数の要素に適当な初期値を格納しなさい(関数を用いること)。最後に, main関数で上記で生成した変数の要素をすべてコマンドプロンプトに出力しなさい(関数を用いること)。 [3] 環境 [3.1] OS:Windows xp [3.2] コンパイラ名とバージョン:VISUALSTUDIO2003 [3.3] 言語: C++ [4] 期限: ([2007年6月17日00:00まで] [5] その他の制限:ないです どうぞよろしくおねがいします
過去に質問したものですが、問題に付け足しがありました。 すいませんがもう一度お願いします。 それと接続が遅くなってしまい、お礼をいえなくてすいません>>前スレ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
2.任意個の整数データをキーボードから入力して,総和,平均値,最大値,最小値,分散および標 準偏差を求めるプログラムを作成しなさい.ただし,プログラム中のどこかでポインタと配列を用 いて作成し,ポインタを使用した部分にはコメントをつけて処理内容を説明すること. [3] 環境 [3.1] OS:Windows XP [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限 来週の火曜辺りまで [5] その他の制限 なし 2.の部分は変更はないのですが、ご教授いただいたプログラムだと整数データの入力が永遠 と続いてしまいます。この問題はどのようにすれば解決できるのでしょうか?
>>47 1番目の。
#include <stdio.h>
#include<stdlib.h>
#include<time.h>
int main()
{
int a,b,ans,i,right=0;
for(i=0;i<10;i++)
{
srand(time(NULL));
a=rand()%1000;
b=rand()%1000;
printf("%d+%d=",a,b);
scanf("%d",&ans);
if(ans!=a+b)
printf("*** × (答%d) ***\n",a+b);
else {
printf("*** ○ *** \n");
right++;
}
}
putchar('\n');
printf("正解数:%d 誤答数:%d\n",right,10-right);
return 0;
}
ていうかrandom,srandomって初めて見て、
rand,srandに相当しそうなのは推測できるけどこれって何?><
>>48 #include <stdio.h>
#include<math.h>
#define N 10
int MakeSum(int *array,int n)//配列の先頭要素のアドレスを受け取る
{
int i,sum=0;
for(i=0;i<n;i++)sum+=array[i];
return sum;
}
int MakeMin(int *array,int n)//配列の先頭要素のアドレスを受け取る
int i,min=array[0];
for(i=1;i<n;i++)
if(min>array[i])min=array[i];
return min;
}
int MakeMax(int *array,int n)//配列の先頭要素のアドレスを受け取る
{
int i,max=array[0];
for(i=1;i<n;i++)
if(max<array[i])max=array[i];
return max;
}
double MakeVar(int *array,double ave,int n)//配列の先頭要素のアドレスを受け取る
{
int i;
double sum=0;
for(i=0;i<n;i++)sum+=(array[i]-ave)*(array[i]-ave);
return sum/n;
}
51 :
50 :2007/06/15(金) 20:17:14
続き int main() { int n,i,sum,max,min,array[N]; double ave,var,dev; printf("データの個数を入力してください:"); scanf("%d",&n); if(n>N) { printf("データの個数は%d個以下で入力してください。\n",N); return 1; } for(i=0;i<n;i++) { printf("データ%d:",i+1); scanf("%d",&array[i]); } sum=MakeSum(array,n);/*配列の先頭要素のアドレスを渡す*/ min=MakeMin(array,n);/*配列の先頭要素のアドレスを渡す*/ max=MakeMax(array,n);/*配列の先頭要素のアドレスを渡す*/ ave=(double)sum/n; var=MakeVar(array,ave,n);/*配列の先頭要素のアドレスを渡す*/ dev=sqrt(var); printf("合計は%d\n",sum); printf("最大値は%d\n",max); printf("最小値は%d\n",min); printf("平均値は%f\n",ave); printf("分散値は%f\n",var); printf("標準偏差は%f\n",dev); return 0;}
52 :
47 :2007/06/15(金) 20:19:24
>>49 ありがとうございます。random,srandomとrand,srandは、
random,srandomは疑似乱数を使うのに対し、
rand,srandは疑似乱数整数を扱うらしいです。
余り詳しく違いとかはわかりません・・・orz
56 :
49 :2007/06/15(金) 21:00:19
>>52 ,
>>54 randも同じような動作で別なのがあったのか。
このスレは本当に勉強になります、ありがとう!><
ついでに
>>48 を問題しか読んでなくて
>>50 を書いちゃったけど、
書いてもらったプログラムの訂正依頼だったですね、ごめんなさい><;
とりあえず前スレを見てきたけど、24行目のscanfの所を、
if(scanf("%d",&data[i])==EOF)break;
って変えてみたらどうでしょうか?
(プログラムの最初でprintfで「終了はCtrl+Z」って表示して)
>>46 #include <iostream>
#define make_class(str) \
class str { \
int age; \
str(const str &x){} \
public: \
str(){} \
void set(int age){ \
this->age = age; \
} \
void show(){ \
std::cout << this->age << std::endl; \
} \
}
make_class(HUMAN);
make_class(ANIMAL);
int main()
{
HUMAN human[2];
ANIMAL animal[2];
human[0].set(1);
human[1].set(2);
animal[0].set(3);
animal[1].set(4);
human[0].show();
human[1].show();
animal[0].show();
animal[1].show();
return 0;
}
58 :
デフォルトの名無しさん :2007/06/15(金) 22:45:59
[1] 授業単元: プログラミング演習2 [2] 問題文(含コード&リンク): 4次のルンゲ・クッタ法により、次の常微分方程式を数値的に解くプログラムを作成せよ。 @とA共に0≦x≦10.0とする。 @dy/dx=y y(0)=0.5 h=0.1 Ad^2y/dx^2-dy/dx+2y=1 y(0)=0.0 h=0.2 [3] 環境 [3.1] OS: WindowsXP [3.2] コンパイラ名とバージョン: Visual Studio.net 2003 [3.3] 言語: C [4] 期限: 2007年6月21日15時 [5] その他の制限: 特になし。 よろしくお願いします。
59 :
366 :2007/06/15(金) 22:50:46
前スレの910(366)です。
出来てない人が多くて、締切が月曜の朝までになりました。
>>913 回答ありがとうございます。
スペルミスでエラーが出たのでスペルを直して実行したのですが、
ちゃんとマージソートされてない(大きい順にも小さい順にも並んでない)
です。
>>915 回答ありがとうございます。
正常に動作しました。
これ以上、プログラムを短くすることって不可能ですかね?
ちょっと解らない部分が多くて…。
申し訳ないです。
[1] 授業単元:OS演習(ほぼC言語の授業になりつつある) [2] 問題文(含コード&リンク): mallocを用い、下記のプログラムを完成させて、次の仕様を満た すプログラムを作成せよ。 ・キーボードから可変数の英数字の行を読み込む ・最初に行数を入力させる ・1行の長さは最大256文字 ・全入力が終了したところで、全入力行をまとめて出力する #include <stdio.h> #define MAX_LINE 256 main() { char *p; int n, i; scanf(“%d”, &n); p = --------------------; for (i = 0; i < n; i++) { scanf(“%s”, p + MAX_LINE * i); } ------------------------; } [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語:C [4] 期限:17日(月) よろしくお願いします
>>60 こう?
1 #include <stdio.h>
2 #define MAX_LINE 256
3
4 main()
5 {
6 char *p;
7 int n, i;
8 scanf("%d", &n);
9 p = (char *)malloc(256 * n);
10 for (i = 0; i < n; i++) {
11 scanf("%s", p + MAX_LINE * i);
12 }
13 printf(p);
14 }
62 :
915 :2007/06/16(土) 02:59:48
[1] 授業単元: プログラム演習 [2] 問題文: 2次元配列を使い、縦5×横6の配列の中に、任意の30字の文(ABCD・・・YZABCD、等) を左上から横方向に配列しなさい。 それを左上から縦方向に出力するプログラムを書け。 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C言語 [4] 期限:17日の朝まで よろしくお願いします!
#include <stdio.h> int main(void) { char a[5][6], str[] = "abcdefghijklmnopqrstuvwxyzabcd"; int i, j; for(i=0; i<5; i++) for(j=0; j<6; j++) a[i][j] = str[i*6+j]; for(i=0; i<6; i++) { for(j=0; j<5; j++) printf("%c", a[j][i]); putchar('\n'); } return 0; }
65 :
デフォルトの名無しさん :2007/06/16(土) 10:53:46
>>44 駄目だ問題の意味が全然わからん。
>値の決定を自分だけランダム値からキーボードからの入力値になるようプログラムを修正して、
値の決定って何の値。srand関数に渡すseed値?
「自分だけ」ってプレイヤーはmanとwomanだったのに。
>ある値が出た場合のみポイントが復活する機能を追加しなさい
>(ある値は,初期段階で設定できるものとする)。なお復活するポイント値はランダムとする。
ある値が出た場合とはどのタイミングでどの変数の値なの。
対戦用数値出力関数の戻り値?
復活するタイミングはいつなのか?対戦前・対戦後、それとも復活だけして対戦しない?
復活値はただのランダム?0〜20の値じゃなくていいの?
【質問テンプレ】 [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を絶対に使う よろしくお願いします
#include <stdio.h> int main(void) { int i = 1, sum = 0; do { sum += i; i++; } while(sum<300); return 0; }
難しい数学の理論なんかの宿題は解く気にならず あまりに簡単な宿題は自分で考えろよと思ってみたりする俺はorz
問題文置くのにBe板を利用したためBe外し忘れました。すみません。
75 :
デフォルトの名無しさん :2007/06/16(土) 15:51:14
義妹が欲しいです><◆O.oooooOOoのプロフィール 紹介文 ストライクゾーンは8歳から24歳
超めんどくさい問題だな
maim関数についてkwsk
78 :
デフォルトの名無しさん :2007/06/16(土) 16:13:14
#include<stdio.h> #include<math.h> int main(void) { int score[3][2][10] = {{{85, 90, 75, 30, 58, 60, 100, 45, 70, 48}, {75, 65, 75, 30, 50, 65, 50, 55, 40, -1}}, {{65, 95, 95, 35, 58, 62, 90, 40, -1, -1},{80, 90, 70, 30, 60, 60, 35, 60, 100, 55}}, {{80, 70, 75, 60, 58, 88, 70, -1, -1, -1},{10, 90, 80, 30, 45, 32, 65, 90, 70, -1}}}; int total3 = 0; int total4 = 0; int number3 = 0; double average3, average4, rms; int i, j, k; for(i = 0 ; i < 3 ; ++i){ for(j = 0 ; j < 2 ; ++j){ for(k = 0 ; k < 10 ; ++k){ if(score[i][j][k] != -1){ total3 += score[i][j][k]; total4 += pow(score[i][j][k], 2); ++number3; } } } } average3 = (double)total3/(double)number3; printf("average = %5.1f\n", average3); average4 = (double)total4/(double)number3; rms = sqrt(average4 - pow(average3, 2)); printf("rms = %5.1f\n", rms); return 0; }
maim関数という用途不明の関数を宣言して配列を宣言 さらに別の関数を宣言してその中で複数の値を計算し、 その結果をすべてmain関数に戻す必要がある
しかもこれは値を戻す必要があるから、 ポインタを渡して値を入れてやるということはできない 超面倒くさい
maim内でstaticな配列を宣言して、その先頭ポインタをリターン。 別の関数内で計算結果をstaticな構造体に突っ込んで、そのポインタをリターン。
計算値を戻さないといけない
複数の関数を用意するしかないな。 計算値を直接戻すなら。
setjump、longjumpを使って、 平均値をリターンして表示後に再度関数内にジャンプして 偏差値をリターンして表示。 ごめん。テキトー言った。 出来るかどうか分からない。
85 :
デフォルトの名無しさん :2007/06/16(土) 18:12:34
[1] 授業単元:プログラミングC
[2] 問題文(含コード&リンク):ユーザーに文字列入力を繰り返し求め、それをbigstrという別の文字配列に連結。
ただし、入力した文字列の末尾には改行コードを入れる。ユーザーがquitと入力、
もしくは連結後の文字数がオーバーした場合は終了。
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン:Visual C++ 2005 Express Edition
[3.3] 言語: (C
[4] 期限: [無期限]
[5] その他の制限:<stdio.h>,<string.h>,for,while,do,gets,if,strcmp,strcat,strspy,strlen,一次配列 のみ
とりあえず自分でやったところ
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4263.txt 末尾に改行コードを入れるところでエラーが出てしまいます。
あと全体的に自分のレベルの範囲以内で何かアドバイスあればお願いします
>>85 >if((i = strlen(str) < B_MAX-1))
括弧の位置がおかしい。「i = strlen(str)」を括弧でくくらないと。
strのバッファサイズなのでB_MAXじゃ無くてS_MAX。
「strlenの返す値は'\0'を含まない」
-1じゃなくて-2でないとオーバーフローする。
-1にしたい(改行こみで50文字までの文字列にしたい)なら、
char bigstr[B_MAX+1]={0};
char str[S_MAX+1]={0};
>str[i-1] = '\n';
最後の1文字が消えちゃう。
strcatで文字列"\n"を追加する方が楽かも。
>>87 蛇足かもしれないけど、先に\nを付け加えるんだったら
strcmpの所のquitにも\n付けてやらないと止まらないんじゃないかな
えぇ〜人やぁ
>>85 のコードを見て質問したいのですが、
else{
printf("エラー、入力文字数オーバー\n");
break;
}
この部分ってbreakがelse{}からしか抜け出してないですが、
こういう場合の処置ってもう一回if文書いてbreakって書き方が普通ですか?
たとえばこのコードで言ったら
else文の後にif((i=strlen(str))>=S_MAX-1)break;
って感じで。
>>90 if文にbreakは関係ない
for や while 、 switch
>>91 あぁ、ブロックから一つ抜け出すんじゃなくて、
ループ系とswitchのブロックから一つ抜け出すのがbreakでしたか!
うっかり勘違いお恥ずかしい><;
93 :
59 :2007/06/16(土) 19:46:48
>>62 2つになるまで、どんどん半分にしていって、それらの2つを比べて、
くっつけて、その4つの中で比べてっていう動作を繰り返すだけなので、
プログラムは思いつきませんでしたが、短くなると思ってました。
特に短さに、こだわってるわけではないので、十分です。
こんなに詳しくコメントまで付けて下さって、本当にありがとうございます。
助かりました。
( ゚д゚ ) _(__つ/ ̄ ̄ ̄/_ \/ ./  ̄ ̄ ̄
95 :
デフォルトの名無しさん :2007/06/16(土) 21:52:25
C言語です。[3][5]の二次元配列に0〜99の数字の中から15個の数字をランダムで選ぶ(ただし、必ず30を入れる) 配列に入れられた数字を A大きい順に配列に入れ直して示す。(バブルソートで) B小さい順(バブルソートで) Cprintfで30の行、列を出力 ポインタを使うときいてます。お願いしますm(_ _)m
>>95 突っ込みどころはあるが、まずはテンプレ嫁
>>95 30は配列の中に1つだけなのか
30を入れる位置もランダムでいいのか
言い忘れてましたが、rand関数を使うので一つじゃなくてもいいと思います。
99 :
デフォルトの名無しさん :2007/06/16(土) 22:49:27
30が入っていればいいです。
いっぱい入れてね♪
>>95 二次元配列のソートは行単位でいいのか
全体をソートするのか
全体です。
>>102 さん、すいません。もっと簡単だとありがたいです…
>>103 いや、あれ以上簡単って、具体的に何をどう変えろと?
2次元配列をバブルソートするライブラリに受け渡すのは面倒だから
mainの中で1次元に入れた配列をソートして、それを最後に2次元の配列に入れちゃられら
a[j/5][j%5]とa[(j+1)/5][(j+1)%5]で比較すれば、二次元配列のままソートできるだろ
>>105 そういうごちゃごちゃしたソースを書くのが面倒だからw
だろとか言うならおめーがやれよ?論より証拠。GDGD言うくらいなら自分がやれw
>>105 はやくおめーが全体を通したソースを書けよ?書けねーのか?チキン野郎めがw
>>105 書ーーけっ!書ーーけっ!書ーーけっ!書ーーけっ!書ーーけっ!書ーーけっ!書ーーけっ!
口先だけの見掛け倒しは通用しないよぉ〜〜〜ん、論より証拠、わ・か・る・か・な、ぼくぅ?
大人の社会じゃ実行結果がすべて。いくら言葉達者にいえたとしても、実行できる能力の無い奴が
何ほざいても権限が与えられず出世しないんだよ、わかるぅ〜?
111 :
デフォルトの名無しさん :2007/06/17(日) 00:02:28
Ошибки
>>105 おらっ、とっとと他人のソースをいじってでも良いから書けや?口先だけの
チキン野郎は、世の中じゃ通用しないぜぇ?女からも、立たない男は役立たずって言われますよ?
>>105 どうしたどうしたぁ?まだ書けねーのか?バブルソートのライブラリを弄って
mainの中の配列のお豆を弄ればすぐ済むだろが?やれねぇ〜〜のかぁ、あぁん?
115 :
デフォルトの名無しさん :2007/06/17(日) 00:09:29
そうです。
書く必要もないだろ。 102のソースのa[j]とa[j+1]をそれぞれa[j/5][j%5]とa[(j+1)/5][(j+1)%5]にして、 引数を int *a から int a[3][5] にすりゃいいだけなんだから。
>>116 ちょっwwwwwおまっwwwwwwwwwwごちゃごちゃしすぎだろw
>>117 書く必要がある無いじゃない、
>>105 がかけるかどうかが重要。わかるかね、ぼくぅ?
机上の空論ではないにしろ、ちゃんと提出しなきゃ評価なんてされないんだよ?
大学でレポート提出、卒論を書いたことのない低学歴か?w
この流れワロス なわけがない
ほんと土曜の夜は元気だな。
ふぁびょってる奴がいるなぁ。 精神科いけよ。
うぜえ
>>116 くは〜〜、きしょくわりぃ〜ソートとソースを書いてんじゃねーよw
> 105がかけるかどうかが重要
重要か?それは
>>122 明日休みだから飲みまくっているんだろ
>>125 口先だけでかけませんってことか。哀れw
そういう奴って、肝心なところが出来ていないから単位がもらえず落第するんだよなw
ほれ、これで満足か? void bsort(int a[3][5]) { int i, j; for(i=0; i<14; i++) { for(j=14; j>i; j--) { if(a[j/5][j%5]<a[(j-1)/5][(j-1)%5]) { int temp = a[j/5][j%5]; a[j/5][j%5] = a[(j-1)/5][(j-1)%5]; a[(j-1)/5][(j-1)%5] = temp; } } } }
構ってもらえて良かったな
あ〜〜あ〜〜、大学にも通ったことの無いいい加減な奴らがうじゃうじゃ出てきたよw 論より証拠、わかるぅ?出来ない奴って、口先だけでごまかすからわかり易いw
>>127 〜おさるさんからのお願い〜
***エサを与えないでください***
今は中学生のカリキュラムにC言語の勉強が入っているのか 知らなかったな
105=117=127=俺だから
いや、俺が105
大学に通ったことのない低学歴が必死こいて抵抗しているよwwwwww 正当性があるないとかじゃなく、いい加減な態度が悪いのにw
135 :
デフォルトの名無しさん :2007/06/17(日) 00:34:54
はいはい大学生乙
なんで大学に通ってないって分かるんだろう。 エスパー乙
やたら大学にこだわるなぁ こんぷr(ry
大学が全てだから
>>127 > void bsort(int a[3][5])
するわけねーじゃん、こんな固有の汎用性のないライブラリ、いらねーよw
もっと他に、a[ROW][COL]のROWとCOLを変えたときに対応できないソースはクソースw
>>105 は気持ちよかったよ!糸をひく様なディープキス。ゾクゾクする様な、ねっとりフェラチオ。
乳を揉みしだいた時の喘ぎ声。極めつけは……グフフ!そこから先は、俺の口からは言えないよ!
入ってからの・お・た・の・し・み!
>142 定数部分のどこを入れ替えればいいか分らん低脳にとっては汎用性がないんだろうね。
>>105 流れはあんまり見てないが、せっかく配列で宣言してるんだから、
単純にa[3][5]を(int *)にキャストして
>>102 の関数をコールするだけで良くないか?
[1] プログラミング実習
[2] 関数は、入力として10人の学生の英語のおよび数学の点数をとる。英語、数学、全体の平均を計算する。関数は、以下に4つのパラメータを持っていきます:
1.英語と数学の点数を含む配列へのポインタ。配列の終わりは{-1、-1}とする。
2.英語の平均を保存する場所への参照(ポインター)。
3.Math平均を保存する場所への参照(ポインター)。
4.全体的な平均を保存する場所への参照(ポインター)。
関数calcAveは、その戻り値として学生の数を返す。
main文から関数calcAveを呼び出し、英語、数学と全体の平均を出力する
キーボードからデータを読み取る必要が、ありません。
配列の終わりに加わる{-1、-1}のを忘れないでください。
関数の型はint calcAve(int (*data)[2], double *engAve, double *mathAve, double *totalAve)とする。
また平均の計算や配列の初期値として
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4268.cを使う 。
[3] 環境
[3.1] OS: WindowsXP
[3.2] gcc
[3.3] C
[4] 6/19
[5] 授業で参照渡しを使えといわれました
よろしくお願いします。
>>144 > 定数部分
それが汎用性のないって指摘なんだがwwwww
お前、大学に通ってもすぐに落第、退学だぞwwww
144 名前:デフォルトの名無しさん 投稿日:2007/06/17(日) 00:57:08 >142 定数部分のどこを入れ替えればいいか分らん低脳にとっては汎用性がないんだろうね。 定数部分のどこを入れ替えればいいか分らん低脳 定数部分のどこを入れ替えればいいか分らん低脳 定数部分のどこを入れ替えればいいか分らん低脳 汎用性について理解していないバカが汎用性がわからないとか言い出したよ、きめぇ〜〜w ちゃんとa[ROW][COL]って書いたのに、理解力のねーバカが低脳だろw
学校の宿題に汎用性を求めるな
汎用性もないのに宿題に答えている奴が偉そうにすんなっw
気持ち悪い粘着が湧いているみたいだな
>>127 はROWとCOLが変わったら、その値に応じてわざわざ定数を書くそうですよ?
せっかくROW、COLを#defineで定義したのに、わざわざそれに応じて
ROWとCOLに定義された数値を定数として引数の配列の要素のところに書くそうでつ♪
いつまで続くかオラわくわくしてきたぞ
所詮、宿題スレでムキになって喧嘩してる奴なんてたかが知れてる
>>155 そのマクロつっこみどころが二つあってどっちのことを言ってるのかワカランw
>>142 が読めなかったボケがわざわざ定数を変えて汎用性とか言うから笑えるwwww
変えたら変えたで、結局定数だから、定まった値のものに対応ってことで
受け継ぐ配列のサイズが変わったときにまたライブラリの引数の定数を変える、実に汎用性のない
ばかばかしい理論だw
>>156 どちらの意味で取っても当たってるから両方でしょう
宿題みたいなその場で使い切りのコードに汎用性なんか必要ないと思う。 #defineでマクロにして大文字打つのもめんどくさいから、そのまま数値で書くことが多いな。
Excite翻訳しました!
C言語で、ab cd ef ghの文字を組み合わせて、4文字の文字列が何通りあるかっていうのをつくりたいのですが どなたか教えてください
自己解決しました
>>163 #include <stdio.h>
char* word[] = {"ab","cd","ef","gh"};
int main(){
int i,j;
int count = 0;
for(i=0 ; i<sizeof(word)/sizeof(char*) ; i++){
for(j=0 ; j<sizeof(word)/sizeof(char*) ; j++){
printf("[%d] %s%s\n",++count,word[i],word[j]);
}
}
return 0;
}
166 :
163 :2007/06/17(日) 02:04:47
abab見たいに同じの二回使うのもカウントしていいの?
>>163 > 組み合わせ
同じものを2つってのは無いだろうね。
169 :
163 :2007/06/17(日) 02:24:30
いいです!
いっ、いぃ〜〜のか?ウホッ?
171 :
165 :2007/06/17(日) 02:26:50
ダメなら printf("[%d] %s%s\n",++count,word[i],word[j]); を if(i!=j)printf("[%d] %s%s\n",++count,word[i],word[j]); にかえて
173 :
デフォルトの名無しさん :2007/06/17(日) 03:51:21
保存した成績テキストファイル data.txtからデータを構造体配列に取り込んで行くのですが、 学生番号,名前,素点 で、ずらーっとtxtにならんでます。 成績が無い場合、素点の部分を - としておいた場合、 - かきちんとした点数かを判断したいのですが、 何型で取り込んでどう処理していけばいいんでしょうか? 点数は後ほど平均点等の計算に使います。 数値データと文字データが混在しているときはどうすればいいのかがよくわかりません・・・
そうですか
文字列で取り込めばいいんじゃね?
176 :
デフォルトの名無しさん :2007/06/17(日) 04:07:27
文字型で取り込んでおけばそのまま数値計算に持ち込むことは可能ですか?
⊂( ゚д゚ ) ヽ ⊂ ) (⌒)| ダッ 三 `J
178 :
63 :2007/06/17(日) 04:28:11
>>64 ありがとうございます
ってすいません、書き忘れていたことが・・・。
結果が、1行の文になるように出力したいのです。
2次元配列で並び替えた文を1行に戻して出力、というところが解らないのですが、
どのようにプログラムを書けばいいでしょうか?
( ゚д゚ ) _(__つ/ ̄ ̄ ̄/_ \/ ./  ̄ ̄ ̄
てす
>178 putchar('\n');を消せばok
183 :
デフォルトの名無しさん :2007/06/17(日) 11:32:30
185 :
uho :2007/06/17(日) 13:03:03
[1] 授業単元:基本プログラミング [2] 問題文(含コード&リンク): チケットがS席,A席,B席,各10枚残りました。各席の購入希望が出るたびに席名(S,A,B)を入力する。販売は券が全て売り切れたか、公演時間になると(Eと入力)終了する。販売終了時の券の残り状況を以下の実行例のように表示するプログラムを作成せよ。 <実行例1>全て売れ残った状態でEと入力した場合 購入希望の席 ->A 購入希望の席 ->B 購入希望の席 ->S 購入希望の席 ->E 残りは、S:9枚 A:9枚 B:9枚 <実行例2>全て売れきれた場合 購入希望の席 ->A 購入希望の席 ->B 購入希望の席 ->S :(途中省略) 購入希望の席 ->A Aは売り切れ! 購入希望の席 ->A 購入希望の席 ->S Sは売り切れ! 購入希望の席 ->B Bは売り切れ! 全て売り切れ! [3] 環境 [3.1] OS: WindowsXP [3.2] コンパイラ名とバージョン: gcc 3.4 [3.3] 言語: C++ [4] 期限:6月20日まで [5] その他の制限: よろしくお願いします。
186 :
デフォルトの名無しさん :2007/06/17(日) 13:17:25
>>185 #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;
}
>>185 #include <iostream>
using namespace std;
int main()
{
int S = 10, A = 10, B = 10, st;
char ch;
for(st=0; !st;)
{
cout << "購入希望の席 ->"; cin >> ch;
switch(ch)
{
case 'S':
if(S > 0) S--; else cout << "Sは売り切れ!\n"; break;
case 'A':
if(A > 0) A--; else cout << "Aは売り切れ!\n"; break;
case 'B':
if(B > 0) B--; else cout << "Bは売り切れ!\n"; break;
case 'E':
st = 1;
}
if(!(S || A || B)) st = 2;
}
switch(st)
{
case 2:
cout << "全て売り切れ!\n"; break;
case 1:
cout << "残りは、S:" << S << "枚 A:" << A << "枚 B:" << B << "枚\n"; break;
}
return 0;
}
189 :
187-188 :2007/06/17(日) 14:10:28
[1] 授業単元: C言語 [2] 問題文(含コード&リンク): 入力ファイルの中から単語を切り出し、単語部分のみ文字列を反転するプログラムを作れ。 ただし、単語文字列を格納する配列を用いいるとともに、文字列を反転する関数を用意し引数にはポインタを使用すること [3] 環境 [3.1] OS: (Windows/Linux/等々) MacOSX [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限:月曜までにお願いします。 [5] その他の制限:単語の定義は、タブ、空白、コンマで区切られたものです。
>>190 #include <stdio.h>
#include <string.h>
int reverse_str(char *str1, const char *str2){
int i, j;
if(strlen(str2) == 0) return 0;
for(i = 0, j = strlen(str2); j > 0; i++, j--) str1[i] = str2[j - 1];
str1[i] = '\0';
return 1;
}
int main(void){
FILE *fp = fopen("word.txt", "r");
int ch, i;
char buf[128], rev[128];
if(!fp) exit(1);
do{
i = 0;
while((ch = fgetc(fp)) != EOF){
if(ch == ' ' || ch == '\t' || ch == '.') break;
else if(ch != '\n') buf[i++] = ch;
}
buf[i] = '\0';
if(reverse_str(rev, buf)) puts(rev);
}while(ch != EOF);
fclose(fp);
return 0;
}
192 :
デフォルトの名無しさん :2007/06/17(日) 14:49:07
MacOSX
193 :
デフォルトの名無しさん :2007/06/17(日) 15:09:46
[1] 授業単元:アルゴリズム
[2] 問題文(含コード&リンク):”rand1000.dat”というデータの個数nとその個数分の整数データが保存されているファイルがある
(
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4151.txt )(データは5桁以下の整数)
次の手順で動作するプログラムradix.cを作成し,その動作を確認せよ.
アルゴリズムをそのまま実現してよいが,余力のある人は「インデックス配列」を使って処理を高速化したプログラムとしてもよい.
まずファイルから保存されているデータ数nを読み込み,その数だけデータを読み込み配列に格納する.ただし,配列は「5桁整数の各桁の数が入る配列」を列挙した配列とせよ.
次に,格納された配列をディスプレイ上に表示する.
そして,データが保存された配列について基数ソートを実行する関数 radixsort()を呼び出し,配列データを整列する.
最後に,整列された配列をディスプレイ上に表示しプログラムを終了する.
[3] 環境
[3.1] OS: Windows XP
[3.2] コンパイラ名とバージョン:Microsoft Visual Studio 2005
[3.3] 言語: C言語
[4] 期限: 6月19日 夜までに
[5] その他の制限: 1行ずつプログラムをチェックし,コンピュータに何をさせているのかその都度確認すること.
どなたか解る方、よろしくお願いいたします。><
>>190 #include <stdio.h>
#include <string.h>
#include <ctype.h>
int reverse_str(char *str1, const char *str2){
int i, j;
if(strlen(str2) == 0) return 0;
for(i = 0, j = strlen(str2); j > 0; i++, j--) str1[i] = str2[j - 1];
str1[i] = '\0';
return 1;
}
int main(void){
FILE *fp = fopen("word.txt", "r");
int ch, i;
char buf[128], rev[128];
if(!fp) exit(1);
do{
i = 0;
while((ch = fgetc(fp)) != EOF){
if(isspace(ch) || iscntrl(ch) || ch == '.') break;
else buf[i++] = ch;
}
buf[i] = '\0';
if(reverse_str(rev, buf)) puts(rev);
}while(ch != EOF);
fclose(fp);
return 0;
}
いっぱいオマンコして♪
【質問テンプレ】 [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] その他の制限:出来るだけ簡単(初歩的)にすること。 よろしくおねがいします。
[1] C言語 [2] 問題文 与えられたコインの種類C[0].C[1].....C[k-1](日本円で言うと1円、5円・・・1万円といったもの)と与えられた金額mに対して、コインの枚数を最小にするmの払い方を求めるプログラムを書け。 コインの額面はC[0]<C[1]<・・・<C[k-1]としてよい。入力はm,k,C[0]....C[k-1] [3] 環境 [3.1] OS: Mac [3.2] gcc [3.3] 言語: C [4] 期限: 2007年6月21日まで [5] 動的計画法を用いて書くとの縛りだそうです。どこまで習っているかというのは少々あいまいですが、授業でやったのはfor文やprintfなどまだ基礎の部分です。 よろしくお願いします
>>196 #include <stdio.h>
double myAbs(double i)
{
if(i<0)
return -i;
return i;
}
double mySquare(double i)
{
return i*i;
}
int main()
{
double i;
printf("数値を入力してください>>");
scanf("%lf",&i);
putchar('\n');
printf("絶対値は%f\n",myAbs(i));
printf("二乗値は%f\n",mySquare(i));
return 0;
}
環境絶対値?
>>196 #include <stdio.h>
double myAbs(double x){
if(x<0) x = -x;
return x;
}
double mySquare(double x){
return x*x;
}
int main(void){
double x;
printf("数字を入力して下さい:");
scanf("%lf", &x);
printf("%.2lfの絶対値は%.2lfです。\n", x, myAbs(x));
printf("%.2lfの乗数は%.2lfです。\n", x, mySquare(x));
return 0;
}
環境絶対値ってのが分からんけど・・・
ぎゃー!!!かぶったああああああ!!!
包茎、遅漏乙
printfのところ%lfってなってるけどl付けるとどうなるの?
longになる。つまりdouble
>>204 その辺りはCの規格によって若干違ったと思う。
ANSIなコンパイラでも、結構独自拡張で%lf通る。
%fも%lfもdouble
207 :
196 :2007/06/17(日) 17:31:50
すみませんでした。環境は間違いでした。ただの絶対値です。すみません
209 :
208 :2007/06/17(日) 17:38:31
わわ、リロードして無かった。
独自拡張で浮動小数点のlongを表わすようにしてるのか。
>>205-206 さんありがとう。
210 :
196 :2007/06/17(日) 17:44:33
>>205 とうとうC99でprintf類の%lfもdoubleの指定として追加されている
>>193 >配列は「5桁整数の各桁の数が入る配列」を列挙した配列とせよ
とても汚いソースになる;−;
>>211 205だけど、やっぱC99ではあったよね?>%lf
>>208 を見て、記憶違いだったか心配になってた
214 :
◆Mousouvm3. :2007/06/17(日) 18:27:32
[1]授業単元: Cプログラミング演習 [2]以下のテキストファイルを動的メモリ確保した単方向連結リスト状の構造体に入力したあと、 リストの先頭を引数として、メモリの解放を再帰的に行う関数を作成せよ。 [構造体の形] struct person{ int ,no,age; char name[20]; struct person *next; }; [テキストファイル] 1 20 田中 2 40 大田 3 35 井上 7 60 斉藤 4 23 佐藤 [3] 環境 [3.1] OS:Win XP [3.2] VS 2003 [3.3] 言語:C [4] 期限:無期限 [5] その他の制限:特に無し 一応、自分でもやってみて下記のソースで途中終了したからなんでダメなのか理由があると嬉しいです。 void free_list(struct person *pos){ if(pos != NULL){ free_list(pos->next); free(pos); } } [エラーメッセージ]問題.exe の 0x7c941230 でハンドルされていない例外が発生しました : ユーザー設定のブレークポイント。
>>214 debugビルドで nextをNULL初期化してないとか
>>215 すいません、一応やってます。
void disp(struct person *obj){
struct person *pos;
for(pos=obj;pos!= NULL ;pos= pos->next){
printf("登録番号 %d 年齢 %d 名前%6s\n",pos->no,pos->age,pos->name);
}
}
で表示もきちんと終了するから実は初期化されてないなんて事もないと思います。
217 :
63 :2007/06/17(日) 18:39:10
度々すいません
>>63 です。
putchar('\n');消してみたら、結果が11文字しか表示されなくなりました・・・
わけわからない泥沼です\(^o^)/タスケテ
>>214 んー・・・なんかおかしい。
このfree_list()をコールしてる部分はforループで回してるの?
free_list()にして欲しい処理と実際のコードがズレてる気がするよ。
だれかナップサック解け
>>216 出力はちゃんとされているのね?
struct person *obj 作成の部分もうp
今見たらfscanfの修飾子がおかしいorz
[1] 授業単元: プログラミング実習
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4276.c を改良して以下に示すようにqsortを使って様々なソートをさせる。。
0を入力したとき 配列に書いた順番(そのまま)
1 生徒の8桁の学生番号を昇順でソート
2 生徒の苗字順でソート(アルファベット順)
3 生徒の名前順でソート(アルファベット順)
4 英語の点数を降順でソート
5 数学の点数を降順でソート
6 平均を降順でソート
これら以外の入力がされたらプログラムを終了する。
[3] 環境
[3.1] OS: WindowsXP
[3.2] gcc
[3.3] C
[4] 6/19
[5] とくになし
よろしくお願いします
修飾子直しても結果もエラーメッセージも一緒でしたから多分影響ないと思います。 連レスすいません。
>>223 ブハッ!
calloc()1回しかしてないから、freeも1回だけで良いんだよ。
問題からすると、リスト構造作成する方のコードが悪いよ。
なんというか、うーん・・・。
リスト構造に必要な領域を一度に確保するんじゃなくて
リストのnextを繋ぐたびにmallocなりcallocなりするんだ。
>>223 まぁ r_fp をfclose してないのは置いといて
エラー出なかったぞ
>>228 と言うことは1改行ずつpersonに入れてそのたびメモリ確保しつつ、
最後に再帰で解放の方がいいのかな?
自分も一回freeでできるんじゃないかと思ったんですけど、それだと問題文の再帰の部分の意味がないし…
>>228 全文見てませんでした。
すいません。
あなたの言ってる方針でもう一回します。
>>229 環境依存なのかな?
ありがとうございました。
>>65 >>67 返答に遅れて申し訳ないです。
修正後の問題文がわかりにくくすみませんでした。課題を出した先生が男なので、自分とはmanなのだと思います。
それか、対戦前にmanかwomanどちらを自分にするか決めるということなんですかね
書かれていないのでこの場合は男でいいと思われます。
>値の決定を自分だけランダム値からキーボードからの入力値になるようプログラムを修正して
この部分ですが、自分の操作(主観)するmanかwomanをランダムに出力させるのを省いて
主観性別だけキーボードから0〜20の値を直接自分で入力できるようにして、それで対戦する値を決めるのだと思います。
>ある値が出た場合のみポイントが復活する機能を追加しなさい
>(ある値は,初期段階で設定できるものとする)。なお復活するポイント値はランダムとする。
ある値が出た場合とはどのタイミングでどの変数の値なの。
対戦用数値出力関数の戻り値?
復活するタイミングはいつなのか?対戦前・対戦後、それとも復活だけして対戦しない?
復活値はただのランダム?0〜20の値じゃなくていいの?
上記解答に、ある値がでたとき、対戦後復活でいいと思われます。
ランダム出力する側が0〜20の値でランダム出力された時点で、15の値が出たら復活する場合、
0〜20の値からランダムにヒットポイントが復活すると思われます
対専用数値出力関数の戻り値で確かです。
大きいほうが勝つならひたすら20出してりゃいいだけでゲームになってないんじゃね?
234 :
依頼者 :2007/06/17(日) 23:34:37
[1] 授業単元: C言語演習 [2] 問題文(含コード&リンク): (1)登録番号"int no"と名前"char *name"と"int age"を含む構造体person型の配列を定義し 初期化せよ。なお、最後のデーダの名前にはNULLを入れておく。登録番号は入力順に1,2,3,4,5 とする。配列の先頭アドレスを目指す構造体person型のポインタは引数として与え、データを年齢順に 並び替える関数を作成せよ (2)登録番号"int no"と名前"char *name"と"int age"を含む構造体person型の配列を定義し 初期化せよ。なお、最後のデーダの名前にはNULLを入れておく。登録番号は入力順に1,2,3,4,5 とする。そして配列の先頭アドレスを目指す構造体person型のポインタと参照したい人の登録番号を引数として その名前年齢を表示する関数を作成せよ [3] 環境 [3.1] OS:WindowsXP [3.2] コンパイラ名とバージョン:visual studio.net [3.3] 言語:C++ [4] 期限: 07年6月19日まで [5] その他の制限:特になし よろしくお願いします。
>>233 確かにゲームになりませんね・・・
ですが問題文を見る限りでは」対戦に使う0〜19の値の決定を自分でキーボードから入力が行えるよう、となっているので
それでいいと思います。
>>236 課題を出された先生がmanを主観として想定しているならば、ハンデのある女性側でランダムではwomanの方が勝つ確立が高いでしょうから
チート行為をするつもりでの修正なのかもしれません
ケロロ軍曹乙
[1] 授業単元:プログラミングI [2] 問題文(含コード&リンク):標準入力から受け取ったテキストデータを再修行から 逆順に標準出力に出力するプログラムを作成せよ. [3] 環境 [3.1] OS: Linux [3.2] コンパイラ:gcc [3.3] 言語: C [4] 期限: 2007/06/19 [5] その他の制限: 動的メモリ割り当てを使う,線形リストを用いる. お願いします.
山ごもりしてきます!
何を修行するの? 最終行でしょ?
>>240 文字通りの問題なら、mallocもlistも使わずに下のようなソースになりました
(たぶん、テキストファイルをファイルストリームを使って読み込んで線形リスト
に追加していき、リストをたどる形で標準出力に表示させるんだろうけど)
#include <stdio.h>
char x()
{
char d;
char c = fgetc(stdin);
if(c == EOF || c == '\n') return c;
d = x();
fputc(c, stdout);
return d;
}
int main()
{
while(1) {
char c = x();
if(c == EOF) break;
fputc(c, stdout);
}
return 0;
}
>>242 修行するっつてんだから暖かく見送ってやれよ馬鹿
>>240 エラー処理無し、free無し
#include <stdio.h>
#include <stdlib.h>
typedef struct tag_list_t{
void *data;
struct tag_list_t *next;
}list_t;
char *get_oneline(FILE *fp){
char *buf=NULL;
int moji, bufsize=1;
buf=malloc(bufsize);
while((moji=fgetc(fp))!=EOF && moji!='\n'){
buf[bufsize-1]=moji;
buf=realloc(buf, ++bufsize);
}
if(moji==EOF && bufsize<=1) return NULL;
buf[bufsize-1]='\0';
return buf;
}
int main(void){
list_t *last=NULL, *list=NULL;
char *ptr;
while((ptr=get_oneline(stdin))!=NULL){
list=malloc(sizeof(list_t));
list->data=ptr; list->next=last; last=list;
}
while(list!=NULL){
puts(list->data);
list=list->next;
}
return 0;
}
>227 ありがとうございます! ほんと助かりました 自分でもこのぐらいのが書けるようになるために勉強します
1] 授業単元:プログラミング [2] 問題文: 次のようにすると整数値のスタックが実用できる。試してみよ。(mainに 適当にpush();pop();を書いて、スタックに積んだ順番と出来てきた 順数を比べよ。 実際には使うには足らないところがある。それはどこか? int srk0[100]; int stkp=0; void push(int i){ stk0[stkp++]=i; } int pop(){ return stk0[--stkp]; main(){ /***具体的な実行本体***/ /***ここまでがプログラム***/ } [3] 環境 [3.1] OS:Linux [3.2] コンパイラ gcc [3.3] 言語C [4] 期限: 2007年6月19日まで [5] その他の制限:push popを使えば特になと思います
どういたしまして
250 :
デフォルトの名無しさん :2007/06/18(月) 09:58:45
[1] 授業単元: プログラミング [2] 問題文: 積分 ∫√x ・logxdx で、台形公式を使って求めるプログラムである。 (∫の上に2下に1) ただし積分区間を小区間に分けて計算するときの 小区間の数nをn=100とする。 [3] 環境 [3.1] OS: WindowsXP [3.2] コンンパイラ等:UNIX [3.3] 言語: C言語 [4] 期限: 2007年06月19日14時まで [5] その他の制限: 必要なら関数を使用することと、途中計算も書くこと。 積分の値が変わったときにどこを変えればいいかの教えてください。よろしくお願いします。
[1] 授業単元:C++ [2] 問題文: 野球のスコア計算をするプログラムを作成しなさい。 スコアを入力して、配列データにイニング表を、入力毎にスコア表を表示 最後に勝者を出力。 なお延長の場合も考えること(延長は15回までとする) [3] 環境 [3.1] OS:Windows xp [3.2] コンパイラ名とバージョン:Visual studio.2005 [3.3] 言語: C++ [4] 期限: ([2007年6月19日00:00まで] [5] その他の制限:特になし どうかよろしくお願いします
252 :
デフォルトの名無しさん :2007/06/18(月) 11:23:00
[1] 授業単元: プログラミング [2] 問題: 文字列で式を入力しその答えを出すプログラム [3.1] WindowsXP [3.2] Borland [3.3] C++ [5] ライブラリは<stdio.h>のみです。多分簡易的な電卓プログラムかと…。
[1] 授業単元: C言語 [2] 問題:テキスト形式のファイルを読み込み, 読み込んだアルファベットで書かれた文章のうち母音(a,e,i,o,u)を'-'に置き換えて出力するプログラムを作成しなさい. [3.1] WindowsXP [3.2] Borland [3.3] C++ テキスト形式のファイルを読み込み, 読み込んだアルファベットで書かれた文章のうち母音(a,e,i,o,u)を'-'に置き換えて出力するプログラムを作成しなさい. ファイル名はキーボードから入力する. 読み込むファイルはすべて小文字で書かれていると想定してよい. ファイル名の長さは最大で(マクロ定数で定義された)FILENAME_MAX文字までとしてよい. ファイルの一行の長さは最大で80文字までとしてよい. 出力はfvowel.outというファイル名のファイルに書き出すこと.(ファイルが存在しているときは、上書きすること. 実行例 cat fvowel.in the course of true love never did run smooth. ./fvowel filename: fvowel.in cat fvowel.out th- c--rs- -f tr-- l-v- n-v-r d-d r-n sm--th.
[1] 授業単元: C言語 [2] 問題:テキスト形式のファイルを読み込み, 読み込んだ文章を最後から逆順に出力するプログラムを作成しなさい. [3.1] WindowsXP [3.2] Borland [3.3] C++ ファイル名はキーボードから入力する. ファイル名の長さは最大で(マクロ定数で定義された)FILENAME_MAX文字までとしてよい. ファイルの一行の長さは最大で80文字までとしてよい. 出力はfreverse.outというファイル名のファイルに書き出すこと.(ファイルが存在しているときは、上書きすること.) 実行例 cat freverse.in The time is out of joint. ./freverse: freverse.in cat freverse.out .tnioj fo tuo si emit ehT
255 :
デフォルトの名無しさん :2007/06/18(月) 12:43:46
[1] 授業単元: プログラミング基礎 [2] 問題:以下は,標準入力から入力した文字列を逆順にして表示するプログラムの一部である. 関数 reverse の定義を追加し,プログラムを完成させよ(main 関数は変更しないこと!).なお,入力される文字列の長さ(文字数)は任意であるが, 99文字以内であることが保証されているものとする. /* reverse.c: reverse a given string */ #include <stdio.h> #include <string.h> void reverse(char *); /* プロトタイプ宣言 */ int main(void) { char str[100]; scanf("%s", str); reverse(str); printf("%s\n", str); return (0); } 実行例: nodabls?% a.out abcdefg[Enter] gfedcba [3.1] Unix [3.2] gcc [3.3] c [4] 2007年6月22日(金)
>>247 #include <stdio.h>
#include <stdlib.h>
#include <time.h>
int stk0[100], stkp=0;
void push(int i){
stk0[stkp++]=i;
}
int pop(void){
return stk0[--stkp];
}
int main(void){
int i, n;
srand((unsigned int)time(NULL));
for(i = 0; i < 10; i++){
n = rand()%100;
printf("%dをpush\n", n);
push(n);
}
for(i = 0; i < 10; i++)
printf("%dをpop\n", pop());
return 0;
}
>255 void reverse(char *p) { int i, len = strlen(p); for(i=0; i<len/2; i++) { char temp = p[i]; p[i] = p[len-1-i]; p[len-1-i] = temp; } }
>>250 #include <stdio.h>
#include <math.h>
#define func(x) (sqrt(x)*log(x))
int main(void){
double x, x1 = 1.0, x2 = 2.0, dx, s = 0;
int n = 100;
dx = (x2 - x1)/n;
for(x = x1; x < x2; x += dx)
s += (func(x) + func(x + dx))*dx/2;
printf("s = %g\n", s);
return 0;
}
261 :
デフォルトの名無しさん :2007/06/18(月) 13:32:57
>>238 ありがとうございます。もし時間がありましたら基数ソートもできるとありがたいです。
>>262 qsrot C言語 でググってqsortの仕様が分かれば後は何とかなるだろ。
[1] 授業単元:情報実験第1 [2] 問題文(含コード&リンク): 行列の中、隣接する値kのみから構成される一つの正方形の範囲はsub-blockと呼ばれる。 一つの正方行列を読み込んで、入力値kに対する一番大きいsub-blockを探して、 sub-blockの位置と大きさを表示するプログラムを作成せよ。 動作例 Matrix.dat 11100000 01111000 00111110 00011111 01111111 01111011 00111000 00111100 Input the value of key : 1 The position of max sub-block of 1 is: (3,4) (3.5) (5,3) (6,3) The size of max sub-block of 1 is: 3x3
>>264 その問題どっかで見たぞ
前スレだっけか?
[3] 環境 [3.1] OS:MacOSX 10.4 [3.2] コンパイラ名とバージョン:gcc 4.0.1 [3.3] 言語:C [4] 期限:6/20朝まで [5] その他の制限: 正方行列はファイルから読み込む 最大sub-blockが複数存在する場合は、全て表示 計算量は出来るだけ少なく 難しいかもしれませんがヒントだけでもお願いします…
268 :
264 :2007/06/18(月) 15:48:14
>>265 >>267 あ、ありがとうございますー。
回答者にも感謝です。
実はもう1個あるんですが、とりあえず前々スレを見てみますわ。
269 :
デフォルトの名無しさん :2007/06/18(月) 15:52:26
[1] 授業単元: 情報処理 [2] 問題文:数当てゲーム 選ばれる数字は4桁(1000から9999) ユーザが選んだ数字がことなる場合、選んだ数字が大きいか小さいかヒントを表示する n回目で当てた場合は(10−n)ポイントユーザに与える 10回以上は続けて入力できない(0ポイント)ようにし、そのときには選ばれた数字を表示する 何度も繰り返し実行し、ポイントを加算していく [3] 環境 [3.1] OS: WindowsXP [3.2] コンパイラ名とバージョン: VS2005 [3.3] 言語: C [4] 期限: 今日の5時半
270 :
264 :2007/06/18(月) 15:57:46
>>254 #include <cstdio>
#include <cstring>
#include <cctype>
#include <iostream>
#include <fstream>
#include <string>
const char *OFNAME = "fvowel.out";
using namespace std;
int main()
{
string filename;
cout << "filename:" << flush;
if (!getline(cin, filename))
return 1;
filebuf fin, fout;
if (!fin.open(filename.c_str(), ios_base::in))
return perror(filename.c_str()), 1;
if (!fout.open(OFNAME, ios_base::out|ios_base::trunc))
return perror(OFNAME), 1;
int c;
while ((c = fin.sbumpc()) >= 0)
if (strchr("aeiou", tolower(c)))
fout.sputc('-');
else
fout.sputc(c);
return 0;
}
271さん、ありがとうございます!ファイルの部分はむずかしいです・・
273 :
デフォルトの名無しさん :2007/06/18(月) 17:07:55
258さんありがとうございます。助かりました。
254ですが、この問題はC++ではなくC言語でした。本当に申し訳ありません。 [1] 授業単元: C言語 [2] 問題:テキスト形式のファイルを読み込み, 読み込んだ文章を最後から逆順に出力するプログラムを作成しなさい. [3.1] WindowsXP [3.2] gcc [3.3] C ファイル名はキーボードから入力する. ファイル名の長さは最大で(マクロ定数で定義された)FILENAME_MAX文字までとしてよい. ファイルの一行の長さは最大で80文字までとしてよい. 出力はfreverse.outというファイル名のファイルに書き出すこと.(ファイルが存在しているときは、上書きすること.) 実行例 cat freverse.in The time is out of joint. ./freverse: freverse.in cat freverse.out .tnioj fo tuo si emit ehT
>>272 多少C++っぽくしたが、余計分かりにくいかもしれん
#include <cstdio>
#include <cstring>
#include <cctype>
#include <iostream>
#include <fstream>
#include <string>
#include <algorithm>
#include <iterator>
const char *OFNAME = "fvowel.out";
using namespace std;
char filter(char c)
{
return strchr("aeiou", tolower(static_cast<unsigned char>(c))) ? '-' : c;
}
int main()
{
string filename;
cout << "filename:" << flush;
if (!getline(cin, filename))
return 1;
ifstream in(filename.c_str());
ofstream out(OFNAME);
if (!in || !out)
return cerr << "can't open file" << endl, 1;
transform(istreambuf_iterator<char>(in), istreambuf_iterator<char>(),
ostreambuf_iterator<char>(out), filter);
return 0;
}
275さん、本当になんともいえないんですが・・・C++ではなくC言語でした。時間さいていただいてしつれいなのですが。 首吊ってきます。
277 :
271 :2007/06/18(月) 17:38:28
278 :
271 :2007/06/18(月) 17:39:32
すいませんそうです。うっかり間違えて書き込みしてしまいました。本当に申し訳ありません。
280 :
271 :2007/06/18(月) 17:48:14
>>279 これでいいかい?
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#define OFNAME "fvowel.out"
#ifndef FILENAME_MAX
# define FILENAME_MAX 1024
#endif
int main(void)
{
char filename[FILENAME_MAX];
FILE *fin, *fout;
int c;
printf("filename: ");
if (!fgets(filename, sizeof filename, stdin))
return 1;
if ((fin = fopen(filename, "r")) == NULL)
return perror(filename), 1;
if ((fout = fopen(filename, "w")) == NULL)
return perror(OFNAME), 1;
while ((c = getc(fin)) >= 0)
if (strchr("aeiou", tolower(c)))
putc('-', fout);
else
putc(c, fout);
return 0;
}
281 :
271 :2007/06/18(月) 17:49:35
すまん - if ((fout = fopen(filename, "w")) == NULL) + if ((fout = fopen(OFNAME, "w")) == NULL)
281さん、通りました。手間かけさせて本当に申し訳ありませんでした。ありがとうございます。
284 :
250 :2007/06/18(月) 18:44:30
>>259 返事遅れました・・ありがとうございます。
いま解かれてないのはどれだ?
俺の心
287 :
254 :2007/06/18(月) 21:45:10
この問題わかるひといたら教えてください。C++ではなくC言語です。
247です ありがとうございます
254の問題はどっかで回答出てたぞ。Cで。
あー、これだ
>>243 。254っぽい問題。
微妙に違うが、出力先を標準出力からファイルに変えればいいだけだべ。
>>291 参考ソースはそれで合ってるのか?
ただコピーするだけのソースな気が
293 :
デフォルトの名無しさん :2007/06/18(月) 22:48:27
[1] 授業単元:C言語 [2] 問題文(含コード&リンク): 「在庫問題」 ある倉庫を考える。この倉庫は営業開始時において、毎日Sトンの初期在庫量を有する。1日の注文量rが確率的に発生するとき、営業終了時間の最終在庫量(S>rの場合)、不足量(S<rの場合)とする。 注文量rが正規分布N(100,20^2);すなわち平均100、標準偏差20の正規分布に従う乱数と仮定する。 平均100、標準偏差20の正規分布に従う乱数は以下で求められる。 0以上、1以下の一様実数乱数をUiとする。それを次式に代入することによって、標準正規乱数Xとなる。 X=U1+U2+……U12-6 Xを次式に代入することによってY(標準偏差20の正規分布に従う乱数)となる。 Y=20X+100 維持費:1トンにつき200円(最終在庫量に対して) 品切損失:1トンにつき100円(不足量に対して) 総経費:維持費と品切損失の和 (1)初期在庫量S=100のとき、注文量を乱数により発生させ、25日間の維持費、品切損失、総経費を報告せよ。 (2)1000日間の維持費、品切損失、総経費について、1日あたりの平均値を求めよ。また、注文量の平均と標準偏差を求めよ。 (3)S=60,70,80,90,110について、同様に1000日間の1日あたりの総経費の平均値を求めよ。 (4)この倉庫における最適な初期在庫量S0を求めよ。 [3] 環境 [3.1] OS: Windows XP [3.2] コンパイラ名とバージョン: borland [3.3] 言語: どちらでも可 [4] 期限: 2007年06月19日17:00まで [5] その他の制限: なし 全然わかりません。よろしくお願いします
>>292 すいません 間違ってますね。
参考うんぬんは無視していてだいてかまいません。
宜しくお願いします。
295 :
デフォルトの名無しさん :2007/06/18(月) 23:27:00
int stk0[100]; int stkp=0; void push(int i){ stk0[stkpft] = i; } int pop(){ return stk0[--stkp]; } main(){ /*具体的な実行*/ } ↑のmain関数内にpush(),pop()を書いて、スタックに組んだ順番と、出てきた順番を見比べよ。 また、実際に足りないことがあるがそれは何か? って問題なのですが、全く説明を受けていない状態で課題を出されたので殆ど理解できていませんorz とりあえず、printf("d\n",push());のようにpush()とpop()を表示できるようにしてみましたが、エラーが出ます。 それと、4行目のstk0[stkpft] = i;の所もエラーが出ます・・・。 とりあえず何処から手を付けていけばいいのでしょうか?
>>295 > printf("d\n",push());
printf("%d\n",push());
と書いたのかな。push()の戻り値はvoid, つまり
何も返さないからこれは誤りで、表示のしようもない。
> stk0[stkpft] = i;
stk0[stkp] = i;
だろうね。
つーか
>>256 ではまずいの?同じ課題のようだが。
>>295 配列の最後まで参照したら配列の先頭にポインタを戻す必要性があるけど
これが「実際に足りないこと」じゃないかな?
stk0[stkp++] = i; これじゃねーの?
299 :
296 :2007/06/18(月) 23:40:25
ああ++いるよな。変数名が間違ってるとこばかりに頭がいってたわw
300 :
295 :2007/06/18(月) 23:45:04
>>296 レスどうもです。
[]内が間違っていたようですね。どうもです。
というか、同じ学校の人間がいることに驚きましたw
ですが
>>256 では、main関数以外もいじくっているようですが・・・。
main関数内に実行文を書けとしか言われていないので・・・。
>>297 レスどうもです。
なるほど。ちょっと考えてみます
変数名間違いというより、プリントかなんかが汚くて++がftに見えたんだべ。きっと。 あとpushに引数無いな。
>>269 #include <Stdio.h>
void main(){
int i,tokuten=0,kazu,random,end;
srand(time(NULL));
do{
random = rand() % 8999 + 1000;
/*printf("%d\n",random);*/
for(i=0;i<10;i++){
printf("数を入力:");
scanf("%d",&kazu);
if(random==kazu){
printf("正解");
break;
}else if(random<kazu){
printf("選んだ数字が大きいです\n");
}else{
printf("選んだ数字が小さいです\n");
}
}
if(i==10){
printf("乱数は%dでした\n",random);
}
printf("現在の得点は%dです\n",tokuten+=10-i);
printf("繰り返しますか?\n繰り返すなら1を入力してください:");
scanf("%d",&end);
}while(end==1);
}
>>269 提出期限は過ぎてるし適当に書いただけでまともにデバッグしてないし
繰り返しはこれでよかったのか謎だけどとりあえず書いてみた
コメントはデバッグ用に書いてみた
>>295 足りないこと? だからこうだって。
int stk0[100000000000000000000]; int stkp=0;
( ゚д゚ ) _(__つ/ ̄ ̄ ̄/_ \/ ./  ̄ ̄ ̄
>>295 200回くらい連続でpushしてみよう
PS3はバーチャルボーイの軌道を辿っているような気がしてならない
PS3と比べるなんてバーチャルボーイをなめすぎだろ・・・
PS3はピピン@に似ている。
誤爆なんて恥ずかしい子とするお前が悪い
>>314 > 恥ずかしい子とするお
あぁ、恥ずかしい。恥ずかしい子とするなんて、エッチだな、おまえ・・・
他のC言語のスレで宿題聞いてるやつもいるし、どこがなにスレだったかたまに迷うな
HD DVDとBlu-rayのスレスレな接線。見えそうで見えないスレスレなチラリズム。 人間は何を求めて生きていき、何を求めてこういった科学技術を発展させていくのだろう? できそうでできない、そういうチラリズムもまた興奮する・・・。モロ出しよりギリギリな 見えそうで丸見えじゃないモザイク、その方が興奮する。AV見たことある人なら分かるだろ? あっこれ、誤爆じゃないから。ん〜〜SK2。
class あの娘{ public: int xxx; }; なんてこった!あの娘のxxxがいじり放題だ! あと、思い出したけどここは宿題スレです
例え隠蔽されててもフレンドになればいじり放題・・・ 馬鹿なこと考えてないでもう寝よう
320 :
デフォルトの名無しさん :2007/06/19(火) 01:22:41
321 :
デフォルトの名無しさん :2007/06/19(火) 01:31:10
1] 授業単元: グラフ理論 [2] 問題文(含コード&リンク): 課題@ グラフがオイラーグラフであるかどうかを判定するプログラムを作成し, graph2.txt とgraph3.txtにて表現されるグラフに対して実行せよ。 課題A フラーリーのアルゴリズムによりオイラー閉路を求めるプログラムを作成し, graph2.txt とgraph3.txt にて表現されるグラフに対して実行せよ. オイラーグラフの場合には求められたオイラー閉路を表示し, オイラーグラフでない場合にはその旨表示してプログラムを終了すること。 [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc 3.4 [3.3] 言語: C [4] 期限: ([2007年06月23日00:00まで]
322 :
321 :2007/06/19(火) 01:36:39
>>321 C/C++の宿題というより、グラフ理論の宿題だろ。
アルゴリズム位書け。授業でやってんだろ
課題1: 各点の次数が偶数であれば、オイラーと判定
課題2:
Fleury
------------------------------------------------------------
適当な頂点から出発する.現在いる頂点に接続している辺で,それを消す
ことによってグラフが連結でなくならないものを選択し,その辺のもう一方
の端の頂点に行き,その辺をグラフから除く.この操作を,全ての辺がグラ
フから除かれるまで続ける
------------------------------------------------------------
辺削除の選択の際の、孤立成分判定はどう実装すれば綺麗か
考えているうちに、眠くなったからやめた。
力業で攻めなくても良い、何かよい方法があるような気がする。。
324 :
321 :2007/06/19(火) 03:58:22
>>323 すいません。グラフ定義はわかるのですが、
これをプログラムで書くとどうなるのかはまったく分らないものでして。
アルゴリズムはこんな感じですか?
オイラーグラフに関する重要な定理として,以下の二つが挙げられる.
(1) G がオイラーグラフ ⇔ すべての点の次数が偶数
(2) フラーリーのアルゴリズムを用いることで,オイラー閉路を探索可能
フラーリーのアルゴリズムは,以下のとおりである.
(i) 任意の点v0 から閉路の探索を始める.W0=v0 とする.
(ii) Wi=v0e1v1e2v2…eivi まで選択されたとする.次の辺ei+1 は次のように求める.
(a) ei+1 ∈ E - {e1,e2…ei} かつei+1 はvi に接続.
(b) 選択の余地がある限り,橋を避ける.
(iii) (ii) が実行できなくなるまで繰り返す.
326 :
デフォルトの名無しさん :2007/06/19(火) 04:03:41
もう寝ます。起きてから見ます。
329 :
308 :2007/06/19(火) 08:46:53
330 :
デフォルトの名無しさん :2007/06/19(火) 18:07:52
>>330 大きさの比較を文字列(辞書順)で扱うということでよろしいか?
[1] 授業単元: プログラミング言語
[2] 問題文(含コード&リンク):
数値の列を入力し,それをリスト構造にデータを格納せよ.
その際,数値が大きさの順に並ぶようにせよ.
- 入力する数値の数を限定してもよい
- たとえば5個
・リストの内容を先頭から出力せよ.
- 結果として入力された数値の列が,大きさ順
に並び替えられて表示されることになる.
・リスト構成する要素(セル)はmalloc関数でヒープ領域から確保するものとする.
ファイルのほうに指定された手順など書いてあります。
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4293.txt [3] 環境
[3.1] OS:windowsXP
[3.2] コンパイラ名とバージョン:Visual Studio 2005
[3.3] 言語:C++
[4] 期限:2007/6/22
[5] その他の制限: ファイルのほうにある手順に則ってやっていただければ大丈夫です。
>>335 ありがとうございます!
しかし、ポインタのポインタまだ習ってなかったです。
でもこれでなんとなくですが流れが分かったのでちょっといじってみます。
ありがとうございました。
338 :
デフォルトの名無しさん :2007/06/19(火) 20:28:00
[1] 授業単元: ニュートン法 [2] 問題文: 次の三次方程式の実数解を求めよ。 x^3 - 4.400x^2 - 2.503x + 2.730 = 0 計算結果を印刷したものでは解を赤線で囲むこと。また、データファイルから読み込んだ3つの係数の値は、 解を書き出すファイルの最初に書き出すようなプログラムにすること。 ニュートン法で必要な、解の最初の予測値 x0 は、各自自由に決めてよいが、収束しないと不合格とする。 [3] 環境 [3.1] OS: XP [3.2] コンパイラ名とバージョン: UNIXから作る [3.3] 言語: C [4] 期限: 明日の午前10時 [5] その他の制限:短すぎると評価が少しさがります。 よろしくお願いします。
>>338 3つの解を求めるにはどうすればいいんだろ
#include <stdio.h>
#include <math.h>
#define f(x) (pow(x, 3) - 4.400*pow(x, 2) - 2.503*x + 2.730)
#define f1(x) (3*pow(x, 2) - 2*4.400*x - 2.503)
#define Newton(x) (x - f(x)/f1(x))
int main(void){
double x, prev = 1;
while(1){
x = Newton(prev);
printf("x : %f\tprev : %f\t x - prev : %f\n", x, prev, x - prev);
if(fabs(x - prev) < 10e-10)
break;
prev = x;
}
printf("x = %f\n", x);
return 0;
}
>>328 エッジ切断の時、橋かどうかの判断してる?
先に見つかったエッジをたどってバシバシ切っているように見えるんだが。
ぱっと見ただけなので、間違っていたらスマソ
野球は任せた
マルチは任せた
344 :
デフォルトの名無しさん :2007/06/19(火) 21:31:28
>>340 回答ありがとうございます。
3つの解ですが、もし、プログラムがそうなっているのであれば、そのままでよい。とのコトです。
たぶん最初の予測値のx0と、その後の計算で出す2つだと思うのですが、
その計算のやり方をあまり覚えてなくて・・すいません分かる限りでよろしいので、お願いします。
今更だけど
>>17 は、あまりいいコーディングじゃないよな。
トリッキーさは面白いけど、(i % 15 == 0) は、
ちょっと本質的に外れてる気がする。
個人的には (i % 3 == 0 && i % 5 == 0) がよろしいかと思う
うん。どうでもいい。
((i % 3 || i % 5) == 0)だろ
どうでもいい。
349 :
デフォルトの名無しさん :2007/06/19(火) 22:41:22
351 :
350 :2007/06/19(火) 23:27:45
int point は無視で……
352 :
デフォルトの名無しさん :2007/06/19(火) 23:47:54
[1] 授業単元: C言語演習 [2] 問題文(含コード&リンク): テキスト形式のファイル(ファイルの一行の長さは、100字まで)を読み込む。読み込んだ英子文字で書かれた文章で、 母音を'*'に置き換えて表示するプログラムを作成しなさい。 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限:20日のPM5:00まで [5] その他の制限: ファイルまで お願いします!
>>352 #include <stdio.h>
#include <ctype.h>
int main(int argc, char *argv[]){
FILE *fp;
int ch;
if(argc < 2) return 1;
if((fp = fopen(argv[1], "r")) == NULL) return 2;
while((ch = fgetc(fp)) != EOF){
switch(tolower(ch)){
case 'a':
case 'i':
case 'u':
case 'e':
case 'o': putchar('*'); break;
default: putchar(ch);
}
}
fclose(fp);
return 0;
}
>>352 '*'は'*'であると解釈した。
#include<stdio.h>
int main( void ){
int iChar;
FILE * fIn;
FILE * fOut;
fIn = fopen( "in.txt", "r" );
fOut = fopen( "out.txt", "w" );
if ( fIn != NULL && fOut != NULL ) {
while ( ( iChar = fgetc( fIn ) ) != EOF ) {
switch ( iChar ) {
case 'a':
case 'i':
case 'u':
case 'e':
case 'o':
iChar = '*';
default:
break;
}
fputc( iChar, fOut );
}
}
if ( fIn != NULL ) fclose( fIn );
if ( fOut != NULL ) fclose( fOut );
return 0;
}
ぐはぁ、ちょい遅れ・・・しかも
>>353 のほうが正しいorz
どんマイケル!
357 :
デフォルトの名無しさん :2007/06/20(水) 00:20:51
すみません!353で#include <ctype.h>を使わないでやるとどうなるんですか? あとファイル名を打ち込めるようにしたいのですが
>>357 tolower関数は大文字を小文字にする関数。
case 'a';とかの部分にcase 'A':を追加すればOK。もち、aiueo全部ね。
入力した整数の数字(数値でないのに注意)の各桁を一桁の数値とみなし加算していく
誤爆った。C言語です。 入力した整数の数字(数値でないのに注意)の各桁を一桁の数値とみなし加算していく digit_add関数を作成しなさい。整数の数字は複数行に対応し、終了条件は改行後に [Ctrl+z]キーが押されたときとします。また、あわせてdigit_add関数をテストするための プログラムを作成しなさい。 ※数字をint型の数値に変換するための関数としてatoi関数を利用しても、自作してもおk。
>>357 ファイル名を入力する場合。
char sFile[ 256 ];
scanf("%s", sFile);
fp = fopen( sFile, "r" );
入力関数はscanfなんだよな?きっと。
>>357 #include <stdio.h>
int main(void){
FILE *fp;
int ch;
char filename[128];
printf("Input file name : ");
scanf("%s", filename);
if((fp = fopen(filename, "r")) == NULL){
fprintf(stderr, "cannot open \"%s\".\n", filename);
return 1;
}
while((ch = fgetc(fp)) != EOF){
switch(ch){
case 'a': case 'A':
case 'i': case 'I':
case 'u': case 'U':
case 'e': case 'E':
case 'o': case 'O': putchar('*'); break;
default: putchar(ch);
}
}
fclose(fp);
return 0;
}
ハンガリアン...
>>360 #include <stdio.h>
#include <string.h>
#include <string.h>
int digit_add(void){
int total = 0;
char buf[2] = {0}, *p = buf;
while((*p = getch()) != 26) if(isdigit(*p)) putchar(*p), total += atoi(p);
return total;
}
int main(void){
printf("\ntotal : %d\n", digit_add());
return 0;
}
365 :
364 :2007/06/20(水) 00:48:35
>>364 ……
#include <stdio.h>
#include <string.h>
#include <ctype.h> // ×<string.h>
>>364 >char buf[2] = {0}, *p = buf;
なんか、ここら辺みてすげぇなと思ってしまった。
俺だったらまず、char1コで[ p - '0' ]って処理が浮かぶ。
でも、
>>364 みたいな処理はまず浮かばんと思う
>>364 あれ?getch関数ってconio.hじゃないっけ?
368 :
デフォルトの名無しさん :2007/06/20(水) 00:57:26
[1] 授業単元:IT入門B1
[2] 問題文(含コード&リンク):
半径1の円に外接する正2^n角形(n>=2)の周囲長と内接する正2^n角形(n>=2)
の周囲長との差がε(マクロで1E-4に設定)未満となる最小のnを求め、
そのときの周囲長から円周率πを算出するプログラムを作れ。このとき円に
内接する正2^n角形(n>=2)の一辺の長さの1/2を入力し円に内接する正2^(n+1)
角形の一辺の長さの1/2を算出する関数と円に外接する正2^n角形(n>=2)の
一辺の長さの1/2を入力し円に外接する正2^(n+1)角形の一辺の長さの1/2を
算出する関数を使用せよ.
[3] 環境
[3.1] OS:Linux
[3.2] gccの最新版
[3.3] 言語:C
[4] 期限:2007年6月17日23:00
[5] ヒント
@単位円に内接する正n角形の周囲長は,2n sin(π/n), 単位円に外接する正n角形
の周囲長は,2n tan(π/n)であるが,このnを2^nに置き換えて求めてはいけない.
高校時代の数学の知識を使えばπを使わずに求めることができる
A(1-Sqrt(1-s^2))/2は,s^2/(2(1+Sqrt(1-s^2)))として計算せよ.
(数値計算の精度が良くなる.各自実験してみよ.)
B
http://www-it.sci.waseda.ac.jp/ITB1/class1/hint.pdf ↑これを参照
369 :
364 :2007/06/20(水) 00:58:57
>>367 しまった……
Cygwinのgccが警告出さないんだよ。俺は悪くない。
>>364 ありがとう。
こんな短く書けるものなんだな…。尊敬します。
>368 ヒントあれば前スレで図形描く必要なかったじゃねーか。 三角関数自体使っちゃいけないのかと思って、三平方の定理と相似使って計算したのに。
>>372 / /\ __ /\ \
| .| | | __o
i⌒ヽ | | | .| | 二|二'' _
|⌒ |⌒ | ヽ_ノ| .| ノ__ヽ | ノ | ヤ ッ
| | | ヽ_ノ .\ . l l /
375 :
デフォルトの名無しさん :2007/06/20(水) 03:04:20
[1] 授業単元: グラフ理論とネットワーク
[2] 問題文(含コード&リンク):
グラフG の点連結度κ(G) は,「G=(V, E) のすべての分離集合X に対する要素数|X|の最小値」として定義される.また,「κ(G)≦δ(G)」であることから,点連結度の最大値は最小次数となる.
(1) グラフG の最小次数を算出し,δとする.
(2) 変数x を定義し,x=1 とする.
(3) 要素数がx となる点の部分集合Vx⊆V をすべて作成する.
(4) Vx のひとつでも分離集合となるならば,x が点連結度である.プログラム終了.
(5) Vx のいずれも分離集合でないならば,x を1 増加させる.
(6) x = δならば点連結度はδとなり,プログラム終了.そうでなければ(3)に戻る.
課題
上記のアルゴリズム実現する点連結度算出プログラムを作成し,a.txt とb.txt にて表現されるグラフに対して実行せよ.点連結度と,それがわかるときの分離集合を表示すること.ただし,x = δ の場合にはその旨を表示すること.
課題作成のポイント:
(1) 辺の情報は,隣接行列adjacent[ ][ ] として記憶すること.また,第1 回演習で作成した2 次元ポインタとして定義すること(そうしないと,以下で述べるconnect_check() 関数が利用できない).
(2) 点連結度を算出するアルゴリズムは複雑であり,任意の点数に対して算出を行うプログラムの作成は困難である.そこで,本課題ではN=8 の場合のみ算出できれば十分である.
第1回課題プログラム
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4291.txt connect_check() 関数
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4290.txt [3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc 3.4
[3.3] 言語: C
[4] 期限: ([2007年06月22日00:00まで]
[1] 授業単元:情報基礎演習(c言語) [2] 問題文: @利率r及び元金を入力し、3年後の元利合計を求めよ。 複利計算の式:元金×(1+r)3 A仕入れ価格と利益率をキーボードから入力して、 顧客に売る際の値段を求めよ。 B商品の単価および売り上げ個数をキーボードから入力し、 消費税を5%として代金を求めよ。 C動物園で鶴と亀の居る檻を見た。観察したところ、頭の数が合計83個、 足の合計が268本であることが分かった。それぞれ何匹であるかを求めよ。 C1の2乗、11の2乗、111の2乗、1111の2乗、11111の2乗、 の各値を計算しなさい。 ※処理内容などを明示すること [3] 環境 [3.1] OS: WindowsXP [3.2] コンパイラ名とバージョン: Microsoft Visual C++ 6.0 [3.3] 言語: C++ [4] 期限: BCDの問題は来週の今日まで [5] その他の制限:授業内容(習ったと思う)VC++の基本操作法、整数型、実数型データ、データの入出力法、演算式(単純な複雑な) どうかよろしくおねがいいたします。
377 :
デフォルトの名無しさん :2007/06/20(水) 04:22:06
課題:実非対称行列で固有値が実数をとるような行列の固有ベクトルを求めたい 固有値は求めることができました。 縮退していない固有値に対応する固有ベクトルは逆反復法で求めることができました。 しかし、固有値が二重縮退している場合があり、 それに対応する固有ベクトルを求めることができません。(逆反復法で 原理的に求めることができるが時間がかかりすぎる) どなたかいい方法をしりませんか?
市ね
379 :
デフォルトの名無しさん :2007/06/20(水) 07:23:41
授業単元:C言語 問題文(含コード&リンク): 環境:switch〜case・do〜while・while・fro・if文 OS:Windows コンパイラ名とバージョン: (gcc 3.4 VC 6.0等) 言語:C テーマ:数値配列の操作 問題:要素数10の配列にデータを入力し,平均+-50を超えるデータの要素番号をエラー配列に 格納し、エラー件数、要素番号とデータを出力しなさい 実行画面 データ[0]入力==>90 データ[1]入力==>100 データ[2]入力==>-1 データ[3]入力==>80 データ[4]入力==>101 データ[5]入力==>10 データ[6]入力==>32 データ[7]入力==>99 データ[8]入力==>0 データ[9]入力==>110 エラー件数:3 2:-1 5:10 8:0
エラーの条件は?
381 :
380 :2007/06/20(水) 08:33:06
ごめんなんか寝起きで寝ぼけてる…。
382 :
デフォルトの名無しさん :2007/06/20(水) 08:46:33
[1] 授業単元: C言語 [2] 問題文(含コード&リンク): 次の処理を行うプログラムを作成せよ。 まず、キーボードから整数を50個入力し、配列に格納する。 次に、格納されたデータについて以下の情報を画面に出力する。 最大の要素の値と、その要素番号 最小の要素の値と、その要素番号 全要素の平均値 配列の大きさは以下のマクロを使って定義し、 プログラム中で適宜利用すること。 #define SIZE 50 【ヒント】 使用する変数の例‥ 配列 a[SIZE] 最大値 max 最大値の要素番号(添字)i_max 最小値 min 最小値の要素番号(添字)i_min 全要素の合計 sum 全要素の平均 ave 反復の制御変数 i ‥などが考えられる 50個の配列でテストするのが大変な場合は、 SIZEを5などに減らしてテストを行うとよい。 [3] 環境 [3.1] OS: WindowsXP [3.2] コンパイラ名とバージョン: visual Studio 2005 [3.3] 言語: C [4] 期限: いつでも [5] その他の制限: 特になし
>>379 #include <stdio.h>
#define N 10
int main(void)
{
int error[N]={0};
int array[N];
int i,ave,sum=0,en=0;
for(i=0;i<N;i++){
printf("データ[%d]入力==>",i);
scanf("%d",&array[i]);
sum+=array[i];}
ave=sum/N;
for(i=0;i<N;i++)
if(array[i]>ave+50||array[i]<ave-50){
error[i]=i;
en++; }
printf("エラー件数:%d\n",en);
if(array[0]>ave+50||array[0]<ave-50)
printf("%d:%d\n",error[0],array[0]);
for(i=1;i<N;i++)
if(error[i])
printf("%d:%d\n",error[i],array[i]);
return 0;}
要素番号を格納するってのがめんどくさいな。
条件がerrorならまとめて1を格納したい…。
エラーの条件は?
385 :
380 :2007/06/20(水) 09:17:22
ごめんなんか寝起きで冴えてきてる…。
課題で「1〜nまでの偶数の和を表示しなさい」というのがあるのですが 入力した数までがすべてたされてしまいます。どうすればいいのでしょうか?
387 :
デフォルトの名無しさん :2007/06/20(水) 09:25:44
{1}C言語 [2] ブザー(ビープ音)を仮引数noで指定された回数鳴らした後に、画面に「警告です!」と表示して改行を行う関数alertを作成しなさい。関数alertを用いて、5回ブザーを鳴らして「警告です!」と画面に表示するプログラムを作成しなさい *ブザーはprintf("\a");またはputchar('\a');で1回鳴る *ブザー回数を関数alertの仮引数にする 3] 環境 [3.1] OS: WindowsXP [3.2] コンパイラ名とバージョン: VS2005 [3.3] 言語: C 実行結果例 (ブザーが5回鳴って) 警告です! よろしくお願いします
>>386 です。
[1]C言語
[2]1〜nまでの偶数の和をdefin文を使って表示しなさい
[3.1] OS:WindowsXP
[3.2] VS2005
[3.3]C++
これで作成しています。よろしくお願いします。
389 :
デフォルトの名無しさん :2007/06/20(水) 09:43:46
>>388 俺Cしか知らんが、ループの中で足される時に奇数をはじけばいいだけだろ。
もしくはもとからループで
for(i=0;i<n;i+=2)で最初から偶数しかカウントしないとか。
>>386 #include<stdio.h>
int main(void){
int n,sum=0;
scanf("%d",&n);
if(n%2==0) n++;
while(--n>0)sum+=n--;
printf("%d\n",sum);
return 0;
}
>379 #include <stdio.h> #define N 10 int main(void) { int i, cnt, array[N], error[N]; double ave; for(i=0; i<10; i++) { printf("データ[%d]入力==>", i); scanf("%d", array+i); ave += array[i]; } ave /= N; for(i=0, cnt=0; i<N; i++) { if(array[i]+50 < ave || array[i]-50 > ave) error[cnt++] = i; } printf("エラー件数:%d\n", cnt); for(i=0; i<cnt; i++) printf("%d:%d\n", error[i], array[error[i]]); return 0; }
392 :
デフォルトの名無しさん :2007/06/20(水) 10:17:47
授業単元:C言語 環境:if文・for文・while文・do〜while文・switch〜case文 OS:Windows コンパイラ名とバージョン:borland 言語:C テーマ:数値配列の操作 配列[8]に整数を入力し、以下のような表示をしなさい 実行画面 整数入力[0]==>4 整数入力[1]==>3 整数入力[2]==>8 整数入力[3]==>6 整数入力[4]==>1 整数入力[5]==>5 整数入力[6]==>2 整数入力[7]==>7 *
*
394 :
デフォルトの名無しさん :2007/06/20(水) 11:09:07
[1] 授業単元: C言語 [2] 問題文(含コード&リンク): キーボードから何度か数字を入力して当てるゲームを作成しなさい。 あらかじめ正解を1つ用意しておく 入力のチャンスは5回までとする 正解したら、「正解!」と出力して終了する 不正解の場合は、大小関係や「惜しい!」などヒントを出力する 5回とも不正解の場合は、正解と「残念!」などのメッセージを出力して終了する 【発展】 乱数生成の関数を使い、プログラムを実行するたびに コンピュータが自動的に正解を用意するように改良しなさい。 [3] 環境 [3.1] OS: WindowsXP [3.2] コンパイラ名とバージョン:visual studio 2005 [3.3] 言語: C
>>389 やってみたらできました。どうもありがとう!
396 :
デフォルトの名無しさん :2007/06/20(水) 11:10:31
>>394 発展までやってみました。
#include<stdio.h>
#include<stdlib.h>
void kadai17()
{
unsigned int seed;
int dt, i, r;
printf("乱数の種を入力 ");
scanf("%d", &seed);
srand(seed);
r = (int)(((double)(rand()) / (RAND_MAX + 1.0)) * 10);
for(i = 4; i >= 0; i--){
printf("数字を当てて下さい ");
scanf("%d", &dt);
if(r == dt){
printf("正解 ");
break;
}
else{
printf("後%d回です\n ",i);
}
}
return;
}
しかし、乱数が絶対 0 になってしまうんですが、わかる方教えてください
397 :
デフォルトの名無しさん :2007/06/20(水) 11:18:09
392>タイプミスで*入ってました
>396 別に絶対0にはなってないと思うけど。
399 :
デフォルトの名無しさん :2007/06/20(水) 12:14:15
キタ━━━━(゚∀゚)━━━━ッ!!!!
400 :
デフォルトの名無しさん :2007/06/20(水) 12:16:07
授業単元:C言語 環境:if文・for文・while文・do〜while文・switch〜case文 OS:Windows コンパイラ名とバージョン:borland 言語:C テーマ:数値配列の操作 要素数8の配列に数値を入力し、平均に一番近い値の要素番号とデータを出力しなさい 実行画面 数値[0]==>50 数値[1]==>85 数値[2]==>72 数値[3]==>93 数値[4]==>65 数値[5]==>49 数値[6]==>55 数値[7]==>32 結果 要素番号:4 データ:65
1] 授業単元: c言語 [2] 問題文:単価(TANKA)と個数(KOSUU)を入力して合計金額(GOUKEI)を計算するため のプログラムを作成せよ。ただし値引きで単価が100円以上であれば2割引きとし、 単価が100円未満の時は1割引きとする [3] 環境 [3.1] OS:XP [3.2] :visual studio 2005 [3.3] 言語:C [4] 期限:07年6月21日:24時まで [5] その他の制限:if文でお願いします
402 :
デフォルトの名無しさん :2007/06/20(水) 13:22:51
{1}C言語 [2] *をno個連続して表示する関数put_starsを作成し、この関数を利用して、キーボードから読み込まれた横幅と高さをもつ長方形を表示するプログラムを作成しなさい(長方形の形状は実行結果例参照) 3] 環境 [3.1] OS: WindowsXP [3.2] コンパイラ名とバージョン: VS2005 [3.3] 言語: C 実行結果例 横幅;5 高さ意;3 ----------------- ***** ***** *****
>>400 #include<stdio.h>
int main(void)
{
int i,v[8],sum,min;
double ave,d,dmin;
sum=0;
for(i=0;i<8;i++){
printf("数値[%d]==>",i);scanf("%d",&v[i]);
sum+=v[i];
}
ave=sum/8;
min=0;
if(v[0]>ave){dmin=v[0]-ave;}
else{dmin=ave-v[0];
}
for(i=1;i<8;i++){
if(v[i]>ave){d=v[i]-ave;}
else{d=ave-v[i];}
if(dmin>d){min=i;dmin=d;}
}
printf("結果 要素番号:%d \nデータ:%d",min,v[min]);
return 0;
}
>>401 int main(void)
{
int TANKA,KOSUU,GOUKEI;
printf("単価:");scanf("%d",&TANKA);
printf("個数:");scanf("%d",&KOSUU);
GOUKEI=TANKA*KOSUU;
if(TANKA<100){
GOUKEI=(int)(GOUKEI*0.9);
printf("単価が100円未満なので1割引になります。\n合計金額=%d円",GOUKEI);
}
if(TANKA>=100){
GOUKEI=(int)(GOUKEI*0.8);
printf("単価が100円以上なので2割引になります。\n合計金額=%d円",GOUKEI);
}
return 0;
}
>>402 #include<stdio.h>
void put_stars(int w, int h)
{
int i,j;
for(i=0;i<h;i++){
for(j=0;j<w;j++) printf("*");
printf("\n");
}
}
int main(void)
{
int h,w;
printf("横幅;");scanf("%d",&w);
printf("高さ意;");scanf("%d",&h);
put_stars(w, h);
return 0;
}
406 :
デフォルトの名無しさん :2007/06/20(水) 14:55:21
{1}C言語 [2] 実数3つの平均値を返す関数meanを作成し、この関数meanを利用して、キーボードから3つの実数を読み込み、その平均値を画面に表示するプログラムを作成しなさい。結果表示は少なくとも8桁、小数点以下3桁とする 3] 環境 [3.1] OS: WindowsXP [3.2] コンパイラ名とバージョン: VS2005 [3.3] 言語: C 実行結果 実数1;1.23 実数2;4,32 実数3;3,42 ------------------------ 平均値= 2,990 よろしくお願いします
>>406 #include <stdio.h>
double mean(double a,double b,double c)
{
return (a+b+c)/3;
}
int main()
{
double array[3];
int i;
for(i=0;i<3;i++){
printf("実数%d:",i+1);
scanf("%lf",&array[i]);
}
printf("-------------------\n");
printf("平均値=%8.3f\n",mean(array[0],array[1],array[2]));
return 0;
}
まさか結果の小数点を,で表示する仕様とか言わないよね…?
言うよ?
ていうか文字全部全角じゃね
>>387 #include <stdio.h>
void alert(int no){
for(; no != 0; no--)
putchar('\a');
printf("警告です!\n");
}
int main(){
alert(5);
return 0;
}
[1] 授業単元:C言語解析
[2] 問題文:
「直列共振回路の周波数特性」 抵抗R、自己インダクタンスL、静電容量Cの直列回路に
起電力Eを加える時、電流I(正確にはIドット)が流れる。Eの周波数fを変化させて、
Iの大きさと位相の変化を調べよ
(注) 共進周波数をはさんで適当な範囲で周波数を変化させる。また、周波数の刻み幅も適切に選ぶこと。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.cgi?mode=thr&no=4251 の7レス目(ミスってしまった・・)は複素数の演算を行うプログラムである
ここの下のほうのint main(void)からを変化させてとくようにするといい。
[3] 環境
[3.1] OS:Windows xp
[3.2] コンパイラ名とバージョン:Visual studio.2005
[3.3] 言語: C
[4] 期限: 6月22日
[5] その他の制限: 特になし
こっちでお願いしよう・・・
412 :
デフォルトの名無しさん :2007/06/20(水) 15:56:38
{1}C言語 [2] 1から順番に整数を足して、整数numを超えた時(等しい場合含む)の、最後に足した整数値を返す関数funeを作成なさい。 この関数funeを利用して、1からの整数の和が、キーボードから読み込まれた制限値(整数)を超えるためには、どこまで足せばよいか表示するプログラムを作成しなさい 3] 環境 [3.1] OS: WindowsXP [3.2] コンパイラ名とバージョン: VS2005 [3.3] 言語: C 実行結果 制限値=10000 142まで足すと10000を超える お願いします
>>406 力尽きた。最後の表示が半角のまま。
#include <stdio.h>
double input()
{
unsigned char s[2];
int c;
double v = 0.0, div;
while (scanf("%*[\x82]%1[\x4f-\x58]", s) == 1)
v *= 10, v += s[0] - 0x4f;
if (scanf("%*[\x81]%1[\x43-\x44]", s) == 0)
return v;
for (div = 10.0; scanf("%*[\x82]%1[\x4f-\x58]", s) == 1; div *= 10)
v += s[0] / div;
return v;
}
double mean(double a, double b, double c) { return (a + b + c) / 3; }
int main(void)
{
int i, c;
double v[3], m;
for (i = 0; i < 3; ++i) {
printf("実数%.2s;", &("123"[2 * i]));
v[i] = input();
while ((c = getchar()) != EOF && c != '\n') {}
}
m = mean(v[0], v[1], v[2]);
printf("平均値=%f\n", m);
return 0;
}
415 :
413 :2007/06/20(水) 16:18:42
あー - v += s[0] / div; + v += (s[0] - 0x4f) / div; かな。 適当に書いたから多分ほかにもアレな箇所があるかも。
417 :
413 :2007/06/20(水) 16:45:28
419 :
1/2 :2007/06/20(水) 16:51:22
[1] 授業単元: C言語 [2] 問題文(含コード&リンク): バグを取り除きなさい。 #include int main(){ FILE sfp; char sfn[FILENAME_MAX]; int c, count; //printf("*** Sample program ***\n"); printf("filename:\n"); scanf("%s",sfn); if((sfp=fopen(sfn,"r"))=NULL){ printf("File Not Found!!\n"); return (-1); } while((c=getc(sfp))!=eof){ if (c = 'e') count++; } fclose(sfp); printf("Number of 'e's in file: %d\n", count); return (0); } [3] 環境 [3.1] OS:Windows [3.2] gcc [3.3] C [4] 期限: 金曜日 [5]
>>419 - int c, count;
+ int c, count = 0;
421 :
2/2 :2007/06/20(水) 16:52:52
実行結果 cat etest1.in the course of true love never did run smooth. ./count_e filename: etest1.in Number of 'e's in file: 6 cat etest2.in Oh no! It costs much to put this data into Nihongo. ./count_e filename: etest2.in Number of 'e's in file: 0 ./count_e filename: non-existent-file File Not Found!! よろしくおねがいしますm・・m
422 :
デフォルトの名無しさん :2007/06/20(水) 18:19:25
{1}C言語 [2] 2つの実数a、bに対して、 ・a>bなら1 ・a=bなら0 ・a<bなら1 を返す関数compを作成し、この関数compを利用して、キーボードから読み込まれた2つの実数(実数1、実数2)のどちらが大きいか(または等しいか)を表示するプログラムを作成しなさい 3] 環境 [3.1] OS: WindowsXP [3.2] コンパイラ名とバージョン: VS2005 [3.3] 言語: C 実行結果 実行結果例 実数1;1,23 実数2;1,22 実数1の方が大きい 実行結果例 実数1;3,33 実数2;3,330 実数1と2は等しい よろしくお願いします
>>422 #include<stdio.h>
int main(void){
printf("その関数compでは判別不可能です。\n");
return 1;
}
>>424 @
#include<iostream>
using namespace std;
int main()
{
double r;
int motokin;
cout<<"利率を入力してください。:";
cin>>r;
cout<<"元金を入力してください。:";
cin>>motokin;
cout<<"3年後の元利合計は"<<motokin*(1+r)*(1+r)*(1+r)<<endl;
return 0;
}
>412 10000を超えるのは141まで足したとき #include <stdio.h> int fune(int num) { int i = 0, sum = 0; while(sum<num) sum += ++i; return i; } int main(void) { int n; printf("制限値="); scanf("%d", &n); printf("%dまで足すと%dを超える\n", fune(n), n); return 0; }
427 :
>>376 :2007/06/20(水) 19:14:17
>>425 早速ありがとうございます
ABCできる方よろしくお願いします
>>376 (4-2)
#include <iostream>
template <int M, int N>
struct Power { enum { Value = Power<M, N - 1>::Value * M }; };
template <int M>
struct Power<M, 1> { enum { Value = M }; };
int main()
{
std::cout << Power<1,2>::Value << std::endl;
std::cout << Power<11,2>::Value << std::endl;
std::cout << Power<111,2>::Value << std::endl;
std::cout << Power<1111,2>::Value << std::endl;
std::cout << Power<11111,2>::Value << std::endl;
}
429 :
425 :2007/06/20(水) 19:29:23
>>424 一応C書いたけど、それ以外って書いた方が良いか?
ただ四則演算するだけじゃない?
#include<iostream>
using namespace std;
void GJ(int n,int *a,int *b)
{
int p,i,j,l;
double pivot,c;
for(p=0;p<n;p++){
pivot=a[p*n+p];
for(i=p;i<n;i++)
a[p*n+i]/=pivot;
b[p]/=pivot;
for(l=0;l<n;l++)
if(l!=p){
c=a[l*n+p];
for(j=p;j<n;j++)
a[l*n+j]-=c*a[p*n+j];
b[l]-=c*b[p];}}}
int main()
{
int A[2][2]={{2,4},{1,1}};
int B[2]={268,83};
GJ(2,(int *)A,(int *)B);
cout <<"鶴の数="<<B[0]<<endl;
cout<<"亀の数="<<B[1]<<endl;
return 0;
}
>>376 (4-1)
#include <iostream>
int main()
{
int t = 83, k = 0, f;
// 全部鶴と見なし、足数が合うまで鶴を一羽ずつ減らす
while ((f = t * 2 + k * 4) < 268) --t, ++k;
std::cout << "鶴:" << t << std::endl;
std::cout << "亀:" << k << std::endl;
}
431 :
>>376 :2007/06/20(水) 19:43:57
>>429 書いてください
四則演算わかりません><
>>431 四則演算分からないって小学生低学年レベルの学力もないってことですか?
>376 4じゃなくて5? #include <iostream> int main() { for(int i=0, n = 1; i<5; i++) { std::cout << n << "^2=" << n * n << std::endl; n = n*10 + 1; } }
434 :
デフォルトの名無しさん :2007/06/20(水) 19:52:40
以下の数列を初項から10項計算するプログラムをつくれ Q.1 1 2 X_n+1 = --- ( X_n + ----- ) , X_0 = 1 2 X_n Q.2 X_n+1 = X_n + X_n-1 , X_0 = 1, X_1 = 1 わかりません>< 教えてくださいorz
436 :
デフォルトの名無しさん :2007/06/20(水) 19:55:13
>>434 スミマセン 上がずれてしまいました
X_n+1 = 1/2 (X_n + 2/X_n) , X_0=1
です
Cお願いしますorz
437 :
>>376 :2007/06/20(水) 19:56:01
>>428 >>430 エラーがいぱいでます
>>432 ないってことだたと思います。ほんと終わってます。orz
>>433 はいCじゃなくてDです間違いました。すみません
訂正
C動物園で鶴と亀の居る檻を見た。観察したところ、頭の数が合計83個、
足の合計が268本であることが分かった。それぞれ何匹であるかを求めよ。
D1の2乗、11の2乗、111の2乗、1111の2乗、11111の2乗、
の各値を計算しなさい。
>>434 Q2
#include <iostream>
template <int N> struct Q2 { enum { v = Q2<N-1>::v + Q2<N-2>::v }; };
template <> struct Q2<0> { enum { v = 1 }; };
template <> struct Q2<1> { enum { v = 1 }; };
int main()
{
std::cout << Q2<0>::v << std::endl;
std::cout << Q2<1>::v << std::endl;
std::cout << Q2<2>::v << std::endl;
std::cout << Q2<3>::v << std::endl;
std::cout << Q2<4>::v << std::endl;
std::cout << Q2<5>::v << std::endl;
std::cout << Q2<6>::v << std::endl;
std::cout << Q2<7>::v << std::endl;
std::cout << Q2<8>::v << std::endl;
std::cout << Q2<9>::v << std::endl;
}
>>376 > Microsoft Visual C++ 6.0
すまん、これを見逃していたようだ。
しかし
>>430 すら通らないほど酷かったっけ?
VC++6.0って
どうせC++じゃなくてCだったとかいうオチだろ
>>434 言語は何だよ
C++でいいのかCなのか
>>376 はC言語の演習なのに
使用する言語をC++とか書いてるからマジでややこしいんだよ
ちゃんと書けよ
嫌がらせでも何でもなく素でC++で考えてた
445 :
>>376 :2007/06/20(水) 20:19:29
>>443 教科書に第9章c言語によるプログラミングって書いてあったんで( ;´D`;)
言語はC++使用です。
ABの問題神様おねがいします。
>>434 Q1
#include <stdio.h>
int main(void){
int i;
double ans[11];
ans[0] = 1.0;
printf("X_ 1 = 0.000000\n");
for(i=1; i<10; i++){
ans[i] = (ans[i-1] + (2/ans[i-1])) / 2;
printf("X_%2d = %lf\n", i, ans[i]);
}
return 0;
}
スマン最初のX_ 1はX_ 0だな
このウルトラ簡単な問題が書けない人がC++やってんのか びっくりした
#include <stdio.h>
int main(void){
int i;
int ans[10];
ans[0] = ans[1] = 1;
puts("X_ 0 = 1");
puts("X_ 1 = 1");
for(i=2; i<10; i++){
ans[i] = ans[i-1] + ans[i-2];
printf("X_%2d = %d\n", i, ans[i]);
}
return 0;
}
>>446 はなんか無駄に11になってたなすまん
>>450 本当にたすかりました><
有難うございましたorz
去年は俺がそう言ってたよ
>>445 B
#include<iostream>
#define TAX 0.05
using namespace std;
int main()
{
int tanka,kosu;
cout<<"単価:";
cin>>tanka;
cout<<"個数:";
cin>>kosu;
cout<<"代金:"<<tanka*kosu*(1+TAX)<<endl;
return 0;
}
なんだこれ…。
455 :
>>376 :2007/06/20(水) 21:10:30
>>453 ( ;´D`;) <ありがとうございます。
( ;´D⊂ <どなたか問題Aおねがいします。
>>453 $ ./a.out
単価:101
個数:3
代金:318.15
どなたか
>>418 をお願いします m(_ _)m
ちょっとフーリエ変換とか式がややこしくて分かる方は少ないとは思いますが・・・;;
>>456 むぅ。
(int)(tanka*kosu*(1+TAX))
てか消費税の概念がよく考えると分からないな…。
小数点は切り上げ、切り下げ、四捨五入?
459 :
デフォルトの名無しさん :2007/06/20(水) 21:20:03
よくみる、_strとかって一体なんなんでしょうか?あと、C言語を入門書程度にやり終えて、C++の入門書も終わるんですが、ファイル操作程度までしかやってない超初心者が、C言語による組み込みソフトウェアを勉強するのは、ずっころりんだと思われますか?
>>458 品物単位で消費税計算→切捨てじゃないか?
(int)(tanka * (1 + TAX)) * kosu
だと思う
>>460 たとえばチロルチョコ10個買ったら消費税って付かないんだっけ?
2ch的にはうまい棒って書いた方が良いかw
>>461 あー切り捨てじゃなくて切り上げか?
微妙にわからんw
463 :
デフォルトの名無しさん :2007/06/20(水) 21:30:32
今は総額表示だからそんなこと考えなくてもいいんだよ。
>>454 http://www.nurs.or.jp/~lionfan/ironna_21.html ///////課題ここから/////////////////////////////////////////////////////////////////
// 符号を割り当てる
htnode[d1].code = 0;
htnode[d2].code = 1;
// 親ノードへのポインタを設定する
htnode[d1].parent = &htnode[j];
htnode[d2].parent = &htnode[j];
// 親ノードの出現頻度を設定する
htnode[j].freq = htnode[d1].freq + htnode[d2].freq;
// 左ノード, 右ノードへのポインタを設定する
htnode[j].lnode = &htnode[d1];
htnode[j].rnode = &htnode[d2];
//////////////////////////////////////////////////////////////////////////////////////
どなたか419をやっていただけませんか。エラーが沢山でます。
466 :
>>376 :2007/06/20(水) 21:37:23
計算は後に授業でやるのでプログラムだけ教えてほしんです。 エラーなしで実行して黒い画面を出すだけで良いんです。 A仕入れ価格と利益率をキーボードから入力して、 顧客に売る際の値段を求めよ。 ラストお願いします。
>>419 #include <stdio.h>
int main()
{
FILE *sfp;
char sfn[FILENAME_MAX];
int c, count;
//printf("*** Sample program ***\n");
printf("filename:\n");
scanf("%s",sfn);
if((sfp = fopen(sfn,"r")) == NULL)
{
printf("File Not Found!!\n");
return -1;
}
while((c=getc(sfp)) != EOF)
{
if(c == 'e')
count++;
}
fclose(sfp);
printf("Number of 'e's in file: %d\n", count);
return 0;
}
>>469 さん 通りましたありがとうございます!
またなにかありましたらよろしくお願いします。
FILENAME_MAX
472 :
デフォルトの名無しさん :2007/06/20(水) 22:45:51
1] 授業単元: c言語 [2] 問題文:機械1と機械2で加工される製品A・B・Cがある。機械1・機械2でかかる加工時間は、それぞれ異なる。 製品A・B・Cについて機械1・機械2でかかる加工時間をそれぞれ入力し、その合計が小さいものから順に並べよ。 [3] 環境 [3.1] OS:XP [3.2] :visual studio 2005 [3.3] 言語:C [4] 期限:07年6月23日:24時まで よろしくお願いします
>>472 それは何の課題?
構造体を使って書くとか、配列でとかおおよそ習ったところを教えてほしい。
っていうか、合計ってなんの合計よ。 問題文それ全部か?
多分1,2での加工時間のことだろうが その設定が意味わからん ただ単にソートするプログラム書けでええやん
ただ単にソートするプログラムすら分からないんじゃね?
477 :
デフォルトの名無しさん :2007/06/20(水) 23:03:37
配列習いましたね。 ソート??わからないんで教えてください。
[1] 授業単元:情報処理 [2] 問題文(含コード&リンク): 問1:標準入力よりdouble型の値を2つ、変数a,bに読み、2次方程式x2乗+ax+b=0の 根を求めるプログラムを作成する。 2つの異なる実根なら、x1=3.732051 x2=0.267949のように 重根(等しい根)なら、x=-1.000000のように 複素根なら、r=-0.500000 i=1.322876のように表示する。r=以下が実数部 i=以下が虚数部を表す。 平方根を求める数学関数はsqrt、関数のプロトタイプはdouble sprt(double x);である。 [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: Visual Studio.net 2003 [3.3] 言語: C [4] 期限: 2007年6月21日6時 [5] その他の制限: 特になし。
479 :
478 :2007/06/20(水) 23:05:19
お願いします!
>>458 総額表示義務化のときに散々言われたが、店によってまちまち
義務化以前は小計に税率を掛けて小数点以下切捨てにするところがほとんどだったのだが
481 :
デフォルトの名無しさん :2007/06/20(水) 23:13:11
[1] 授業単元:C言語
[2] 問題文:10個のデータを大きい順に並び換えるプログラム
ttp://www.vipper.org/vip536740.c [3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン:Borland
[3.3] 言語:C
[4] 期限:6/26 16:00
自分でやってみたんですが答えがうまくでません。どこを直したらいいか指導お願いします。
>>478 #include <stdio.h>
#include <math.h>
int main(void)
{
double a, b, c, D;
scanf("%lf", &a);
scanf("%lf", &b);
scanf("%lf", &c);
D = b*b - 4*a*c;
if(D == 0)
{
printf("x = %g", -b /(2 * a));
}
else if(D > 0)
{
D = sqrt(D);
printf("x1 = %g , x2 = %g", (-b+D) /(2 * a), (-b-D) /(2 * a));
}
else
{
D = sqrt(-D);
printf("r = %g , i = ±%g",-b /(2 * a), D /(2 * a));
}
return 0;
}
適当に作ったから合ってるか知らん
>>480 義務化以前は小数点以下切り下げ
というか確か決まってたはずだが
>>481 double型の値を入れるaがint型になってるぞ。
[1] 授業単元:情報処理 [2] 問題文(含コード&リンク): sin(x)の値はxの絶対値が小さいところではf(x)=x-1/6x3乗+1/120x5乗-1/5070x7乗で近似できる。 x=0.0からxの値を0.01ずつ増加させ、|sin(x)-f(x)|がε=0.0001以下であるxの最大値を求めるプログラム。 なお、xのy乗はpow(x,y)により計算できる。関数powのプロトタイプは、 double pow(double x,double y);であり、数学関数のグループに属している。 [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: Visual Studio.net 2003 [3.3] 言語: C [4] 期限: 2007年6月21日6時 [5] その他の制限: 特になし。 おねがいします><
487 :
481 :2007/06/20(水) 23:21:27
>>472 小さい順に並べてどうすんの?
製品〜の作業時間が一番小さく、○です。みたいな感じで表示すりゃいいの?
それとも、小さい順に合計値を表示するだけでいいの?
490 :
デフォルトの名無しさん :2007/06/20(水) 23:30:58
[1] 授業単元: プログラミング [2] 問題文(含コード&リンク): 次に示す関数a,bの値を入力してxの値を0.00から3.14まで0.01間隔で計算して出力するプログラムを作成せよ。 ただし以下に示した関数として定義すること。f(x)=exp(ax)×sinbx [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン:VC 6.0 [3.3] 言語: C++ [4] 期限: 2007年7月6日AM8:30まで お願いしますm(__)m
491 :
472 :2007/06/20(水) 23:31:13
>>488 小さい順に並べて、三つの合計値を表示させたいです。
A=10,B=5,C=8だったとしたら
B⇒C⇒A 23
みたいな感じにしたいです。
よろしくお願いします
492 :
489 :2007/06/20(水) 23:31:43
入力ミスしました 期限は6月20〜21日朝1時までです すいませんでした
朝1時っていつだよwwwwwwwww
>>489 0101 0011 0x53
↓左2シフト(2ビット左にずらし、0で埋める)
0100 1100 0x4C
↓右2シフト(2ビット右にずらし、0で埋める)
0001 0100 0x14
>>482 動きました!完璧です。
ありがとうございました!!
>>491 リストって習った?
というかポインタ習った?
[1] 授業単元:プログラミング [2] 問題文(含コード&リンク): 文字s,pを与え、文字列sの中を先頭から順々に調べて、pに一致している部分文字列 を見つけるとその部分文字列の先頭を指しているポインタを返し、見つからないと0を返す 関数searchを作成せよ。関数searchの頭はchar *search(char* s, char* p)とする。 例えば x = search("nekodaisuki", "dai"); ではxは"daisuki"となる。 一応テスト用のmain関数を作ったのでよければ使ってください int main(void) { char* x; search("nekodaisuki", "dai"); printf("%s\n", x); } [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 2007年6月21日12:00 [5] その他の制限: ライブラリ関数の使用禁止。必ず再帰関数を使う。
500 :
デフォルトの名無しさん :2007/06/20(水) 23:45:13
>>497 聴いたことないんで習ってないと思います。。。
>>498 #include <stdio.h>
char *search(char* s, char* p){
if(*p=='\0') return s;
if(*s=='\0') return (char*)0;
if(*p == *s && search(s+1, p+1)) return s;
return search(s+1,p);
}
int main(void) {
char* x;
x = search("nekodaisuki", "dai");
printf("%s\n", x);
}
もうすこし綺麗に書けそうだが。
>>501 理由も何も、格演算子の性質を理解してりゃ出せる答えっしょ?
16進数で入力を受け付けているけど、0と1の2進数で説明しちゃられら?
綺麗ではない。 char *search(char* s, char* p){return *p=='\0' || (*s && *p==*s && search(s+1, p+1)) ? s : search(s+1,p);}
510 :
502 :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);
}
staticにするわけをデレデレしながら教えて
ローカルな関数は全て静的にするべきだ。
うむ
514 :
502 :2007/06/21(木) 00:24:23
>>512 この場合必要ないんだけど、これをライブラリ化した場合、
再帰関数は公開したくないなーという迷いがあったんですw
[1] 授業単元: プログラミング [2] 問題文(含コード&リンク): テキスト形式のファイルを読み込み, 読み込んだアルファベットで書かれた文章のうちa,i,u,e,o(母音)を'*'に置き換えて出力するプログラムを作成しなさい. 出力はファイル名test.outにすること. [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限: 21日正午まで [5] その他の制限: 特になし 実行結果 [home@*** ~/h1]% cat test.in Mr.X is a gentleman. [home@*** ~/h1]% ./test filename: test.in [home@*** ~/h1]% cat test.out Mr.X -s - g-ntl-m-n. [home@*** ~/h1]% よろしくお願いします。
*に置き換えてないじゃん。
>>517 すみません。こうです↓
実行結果
[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]%
よろしくお願いします。
>>498 じゃないんですが
>>502 の
if(!s || !p || *p=='\0')
ってどういう意味でしょうか??
[1] C言語 [2] #include <stdio.h> int main (void) { int a[3]; int *ptr; ptr=&a[0]; printf("配列a[]の要素を順に3つ入力してください.\n"); int j; for(j=0; j<3; j++){ scanf("%d", &a[j]); } int h; for(h=0; h<3; h++){ printf("%d,%d\n",ptr+h,*(ptr+h)); } return 0; } [3] VB6.0 [3.1] windows [4] 明後日まで [2]のコードをエラーなしで動くようにしてください。 配列a[3]にscanf関数でキーボードから入力し、それをptrで呼びだして表示するプログラムです。
522 :
デフォルトの名無しさん :2007/06/21(木) 02:34:49
∧___∧ /.(●),、(●)\ | ,,ノ(、_, )ヽ、, | /| `-=ニ=- ' .| / .ヽ、_ `ニニ´__ノ | _____ ノ ∪⌒∪ ∪
525 :
デフォルトの名無しさん :2007/06/21(木) 03:00:39
そんなんもしらんのか・・・
>>524 なんかコンパイルしたら、case ラベルを整数定数に還元できません
って表示がでたのですが、これは何なんですか?
>>524 すみません。わかりました^^
ありがとうございました。。。OTL
>>526 横からだが
エラーメッセージっていうやつ
>>528 問題文に詳しい人間がいないんジャマイカ?
求める答えの公式みたいなのある?
[1] 授業単元: プログラミング [2] 問題文(含コード&リンク): テキスト形式のファイルを読み込み, 読み込んだ文章を最後から逆順に出力するプログラムを作成しなさい [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限: 21日正午まで [5] その他の制限: 特になし 実行結果 ]% cat reverse.in We are the champion. ]% ./reverse filename: reverse.in ]% cat reverse.out .noipmahc eht era eW ]% よろしくおねがいします><
>>531 きんもぉ〜☆なソースだけど我慢せい
#include <stdio.h>
int main(void) {
FILE *fp;
char buf[32];
long i,j,c;
printf("開くファイル名を入力 > ");
scanf("%s",buf);
fp=fopen(buf,"r");
if(fp==NULL) {
printf("%sが開けません\n",buf);
return 0;
}
fseek(fp,0L,SEEK_END);
for( i=1,j=ftell(fp); i<=j; i++ ) {
fseek(fp,-i,SEEK_END);
c=fgetc(fp);
printf("%c",c);
}
fclose(fp);
return 0;
}
533 :
デフォルトの名無しさん :2007/06/21(木) 06:01:54
[1] 授業単元:プログラミング技術V [2] 問題文(含コード&リンク): n個の文字列を読み込んだあと、その文字列を反転させて表示するプログラムを作成せよ。 ここで"反転"とは、例えば、"pro3"という文字列を入力した場合、"3orp"と出力されるものである。 (実行例) nを入力せよ : 2 1個目の文字列を入力せよ : pro3 反転した文字列は : 3orp 2個目の文字列を入力せよ : kadai 反転した文字列は : iadak [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: cygwin gcc [3.3] 言語: C言語 [4] 期限: 本日午後2時までによろしくお願いします。 [5] その他の制限: 単純な配列のデータの並べ替え、また関数strlenを使ってもよい。
534 :
デフォルトの名無しさん :2007/06/21(木) 06:16:01
[1] 授業単元:C言語入門(〜ファイルの入力と出力〜) [2] 問題文(含コード&リンク): テキストファイルに出てくる特定の文字の数をカウントするプログラムを作成する。 特殊な例では、テキストファイルの各行の最後には、「復帰・改行」を示すASCIIコードが付加されているので、ファイルの行数は「復帰・改行」の数をカウントすることによって計算できる。 「復帰・改行」に対応するASCIIコードは10である。 なお、テキストファイルの与え方はリダイレクト「<」を用いる。 (実行例に./a.out < "text_file") [3] 環境 [3.1] OS: Linux Vine [3.2] コンパイラ名とバージョン: gcc バージョン? [3.3] 言語: C言語 [4] 期限: 今日12時まで [5] その他の制限: テキストファイルの読み込みはgetchar()を用いる。 (ヒントプログラム) #include <stdio.h> int main(void){ char c; while((c=getchar()) != EOF) { printf("%c" ,c); } return 0; }
おまいら、ぎりぎりに質問って・・・
536 :
デフォルトの名無しさん :2007/06/21(木) 06:20:29
ぎりぎりですいません。(;^^) 出来る限り自分でやりたかったけど、結局はわからなかったっす。
>>533 #include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(void) {
char buf[1024];
int i,j,n,buf_sz=sizeof(buf)/sizeof(buf[0]);
printf("nを入力せよ : ");
fgets(buf,buf_sz,stdin);
n=atoi(buf);
for(i=0; i<n; i++) {
printf("%d個目の文字列を入力せよ : ",i+1);
fgets(buf,buf_sz,stdin);
printf("反転した文字列は : ");
for(j=strlen(buf)-2; j>=0; j--)
putchar(buf[j]);
puts("");
}
return 0;
}
538 :
デフォルトの名無しさん :2007/06/21(木) 06:57:57
>>537 早いですね。自分はさんざん試行錯誤して出来なかったのに...orz
とにかくありがとうございます。
できたらもう1つお願いします。
[1] 授業単元: プログラミング技術V
[2] 問題文(含コード&リンク):
任意の文字列を配列に読み込み、その中に出てくる特定の文字列を指定した文字列に置き換えるプログラムを作成せよ。
(実行例)
文字列を入力せよ : kadai no teisyutukigen ha mamore
置き換え元を入力せよ : kadai
置き換え後を入力せよ : report
結果 : report no teisyutukigen ha mamore
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: cygwin gcc
[3.3] 言語: C言語
[4] 期限: これも本日午後2時までにお願いします。
[5] その他の制限: 空白ごと読み込む方法はgetchar命令、もしくはfgets命令を用いるとよい。
540 :
デフォルトの名無しさん :2007/06/21(木) 08:07:08
>>539 ありがとうございます。
自分今は二次元配列やってて、作ってもらったソースコードも丁度先週習った部分なのでよく理解できました。
これで課題が出せます。
>>540 っつか、ちとまちごうとった・・・
for(j=1,flg=1; j<strlen(str1)-1; j++) を
for(j=1,flg=1; j<strlen(str1); j++) にしといて
>>540 いや、もっとおかしなことになってた。ちと書き直してくる orz
って、まだだめぽだった orz 考えが不十分だったっす。仮に、置き換える文字列と最後まで一致しなくても 途中まで一致したときの対処が。また書き直してくるっす。すまそ orz
ん?いや、やっぱ大丈夫だったみたいっす。スレ汚しすまそ。 徹夜明けだから寝るっす。失礼 ノシ
546 :
デフォルトの名無しさん :2007/06/21(木) 08:44:49
ご丁寧のどうも、参考になります。 最初に「#define STR_MAX」で入力する文字列の最大長を書いてたのをまとめたんですね。 見やすくて、すっきりしていいと思います。 徹夜明けご苦労様です。 おやすみ〜
547 :
デフォルトの名無しさん :2007/06/21(木) 08:46:15
ちなみにコンパイルしてちゃんと動いてるし、課題で細かい指示は無いので最初のソースコードでも大丈夫です。 ありがとうございました。
表示のとき置き換えるだけでいいの?
549 :
デフォルトの名無しさん :2007/06/21(木) 08:57:37
はい、課題の内容としては置き換えるだけです。 空白を含む文字列を文字配列変数に読み込み、その中から指定の文字の並び箇所を検索。 文字の並びが見つかったら、その部分を抜き出して用意された文字列と差し替える。 の手順に処理されていれば問題ないです。
>>547 最初のだと条件が不十分で kadaio としたときでも kadai までしか
比較しないから置き換えてしまったり、最初の一文字が一致したら
2文字目以降が一致しなかった場合、最初の文字が削られてしまったりと
だめぽだったさ。
551 :
デフォルトの名無しさん :2007/06/21(木) 09:06:09
ああ、なるほど。実行してみたらそうなりますね。 たぶん教授の目はごまかせないので指摘されていたかもしれません。 ではソースコードは2つ目の方を使わせていただきます。
>>411 抵抗Rについて V=I・R
インダクタンスLについて V=(dI/dt)・L
静電容量Cについて V=(∫I dt)/C
こんなんだっけ
553 :
デフォルトの名無しさん :2007/06/21(木) 09:43:43
>>534 誰か頼む〜
なんか538が盛り上がってたから、ちと仮眠とって待ったけど
自分のターンが回ってきた!?って思ったから誰かよろしくノシ
リダイレクト前提だとか。
>>534 #include <stdio.h>
int main(void)
{
int count[256]={0};
int c;
while((c=getchar())!=EOF)
{
count[c]++;
}
printf("%d\n", count['\n']);
printf("%d\n", count['(']);
return 0;
}
557 :
デフォルトの名無しさん :2007/06/21(木) 11:03:01
{1}C言語 [2] 2つの実数a、bに対して、 ・a>bなら1 ・a=bなら0 ・a<bなら1 を返す関数compを作成し、この関数compを利用して、キーボードから読み込まれた2つの実数(実数1、実数2)のどちらが大きいか(または等しいか)を表示するプログラムを作成しなさい 3] 環境 [3.1] OS: WindowsXP [3.2] コンパイラ名とバージョン: VS2005 [3.3] 言語: C 実行結果 実行結果例 実数1:1.23 実数2:1.22 実数1の方が大きい 実行結果例 実数1:3.33 実数2:3.330 実数1と2は等しい よろしくお願いします
>>557 >・a>bなら1
>・a=bなら0
>・a<bなら1
これじゃだめだろ。問題をもう一度確認して出直しといで。
>>557 #include <stdio.h>
static int CompResult;
int comp(double a, double b)
{
if(a==b) CompResult=0;
if(a>b) CompResult=1;
if(a<b) CompResult=-1;
return (CompResult!=0);
}
int main(void)
{
char *name[]={"実数1", "実数2"};
double value[2];
int i;
for(i=0;i<2;i++)
{
printf("%s:", name[i]);
scanf("%lf", &value[i]);
}
comp(value[0], value[1]);
if(CompResult==0) printf("%sと%sは等しい\n", name[0], name[1]);
else printf("%sの方が大きい\n", name[(CompResult<0)]);
return 0;
}
560 :
デフォルトの名無しさん :2007/06/21(木) 12:23:42
授業単元:C言語 環境:if文・for文・while文・do〜while文・switch〜case文 OS:Windows コンパイラ名とバージョン:borland 言語:C テーマ:数値配列の操作 整数配列 array[10]に値を入力後、昇順にソースして表示しなさい 実行画面 整数入力[0]==>8 整数入力[1]==>22 整数入力[2]==>10 整数入力[3]==>37 整数入力[4]==>16 整数入力[5]==>3 整数入力[6]==>25 整数入力[7]==>33 整数入力[8]==>8 整数入力[9]==>19 * * *ソート後 * * * 配列[0]:3 配列[1]:8 配列[2]:10 配列[3]:37 配列[4]:16 配列[5]:3 配列[6]:22 配列[7]:25 配列[8]:33 配列[9]:37
561 :
560の文章訂正 :2007/06/21(木) 12:29:06
整数配列 array[10]に値を入力後、昇順にソートして表示しなさい
562 :
デフォルトの名無しさん :2007/06/21(木) 12:35:28
授業単元:C言語 環境:if文・for文・while文・do〜while文・switch〜case文・ OS:Windows コンパイラ名とバージョン:borland 言語:C テーマ:文字配列の操作 問題1 文字型の配列変数mojiに設定されている文字数を答えなさい char moji[] = "ABCDEFG"; 実行画面 文字数:7 問題2:文字列を入力して偶数番目の要素数と奇数番目の要素を別の配列に格納し、文字列として表示しなさい 実行画面 文字列入力==>ABC123def 偶数要素:AC2df 奇数要素:B13e 以上の2問宜しくお願いします
563 :
デフォルトの名無しさん :2007/06/21(木) 12:43:50
[1] 授業単元: C言語 [2] 問題文(含コード&リンク): 3d^2x/dt^2+dx/dt+2x=4 x(t=0)=0 dx/dt(t=0)=0 上記の微分方程式をルンゲークッタ法を用いて解け [3] 環境 [3.1] OS: windowsXP [3.2] コンパイラ名とバージョン: bcc32 [3.3] 言語: C言語 [4] 期限: ([2007年6月25日まで [5] その他の制限: なし お願いします
>>562 問題1
#include <stdio.h>
int length(const char *s)
{
return s[0] ? length(s + 1) + 1 : 0;
}
int main(void)
{
char moji[] = "ABCDEFG";
printf("文字数:%d\n", length(moji));
return 0;
}
565 :
デフォルトの名無しさん :2007/06/21(木) 13:39:44
[1]関数 [2]実行するごとに違う小文字を20個表示させるプログラム [3.1] WindowsXP [3.2] BorlandC++ [3.3] C++
>>562 問題2
#include <stdio.h>
int main(void)
{
char odd[256], even[256];
int i, c;
printf("文字列入力==>");
for (i = 0; i < 510 && (c = getchar()) != EOF && c != '\n'; i++)
if (i%2) odd[i/2] = c;
else even[i/2] = c;
even[i%2 ? i/2+1 : i/2] = '\0';
odd[i/2] = '\0';
printf("偶数要素:%s\n奇数要素:%s\n", even, odd);
return 0;
}
>>565 #include <cstdlib>
#include <ctime>
#include <iostream>
#include <iterator>
#include <algorithm>
using namespace std;
char gen() { return 'a' + rand() % 26; }
int main()
{
srand(time(0));
generate_n(ostreambuf_iterator<char>(cout), 20, gen);
cout << endl;
return 0;
}
[3.1] OS: WindowsXP [3.2] コンパイラ名とバージョン: VS2005 [3.3] 言語:C++ 次の定数を用意してその値を出力し、値を確認しなさい。 1.8進定数 2.10進定数 3.16進定数 4.指数指定の実数 5.小数点使用の実数 6.指数指定、小数点使用の実数 7.文字 「%d」で出力 8.文字列 「%s」で出力 という問題です。よろしくお願いします。
569 :
デフォルトの名無しさん :2007/06/21(木) 14:39:41
[1] 授業単元:C言語 [2] 問題文(含コード&リンク): N 人の人がいて,それらは番号 0, 1, 2, ..., N-1 で表されているとする。 この N 人の人間関係(知り合いかどうか)を表した配列 a[N][N] がある。 ただし, i 番目の人と j 番目の人とが知り合いであるとき a[i][j] == a[j][i] == 1 であり,知り合いでないとき a[i][j] == a[j][i] == 0 である。 このとき, x 番目の人から,知り合いの知り合いの知り合い.... という繋がりで, y 番目の人まで辿り着くには,最小で何回の知り合いという関係が必要か,を返す関数 int acquaintDistance(int a[N][N], int x, int y) を作れ。 なお,x 番目の人から y 番目の人に辿り着けない場合には,acquaintDistance は -1 を返すこととする。 関数名の acquaint は知り合いにさせる, distance は距離という意味である。 ヒント:待ち行列を利用する。最初に x を待ち行列に入れ, 後は,「待ち列から一つ dequeue して,その人の知り合いを待ち行列に enqueue する」 ということを繰り返す。ただし,一度 enqueue した人は二度と enqueue しないようにし, y を enqueue する時点あるいは enqueue する一がいなくなった時点で,終了する。 x から各人までの知り合い距離を入れる配列も用意しておき,新しい人を enqueue する度に,その人までの距離をその配列に入れる。 [3] 環境 [3.1] OS:Vine LINUX [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限:2007年6月26日10時45分まで [5] その他の制限:どうかよろしくお願いします。
570 :
デフォルトの名無しさん :2007/06/21(木) 15:55:10
566>コンパイルしたんですが答えがでませんでした
571 :
デフォルトの名無しさん :2007/06/21(木) 15:57:24
566>コンパイルしたんですが答えがでました
>>562 >>566 をパクッって 問題2
#include <stdio.h>
int main(void)
{
char odd[256], even[256];
int i,c,e,o;
printf("文字列入力==>");
for (i=1,e=0,o=0 ; i <= 510; i++) {
if( (c=getchar())==EOF || c=='\n' ) break;
if(i%2) odd[o++]=c;
else even[e++]=c;
}
even[e]='\0';
odd[o]='\0';
printf("偶数要素:%s\n奇数要素:%s\n", even, odd);
return 0;
}
あれ?要素番号が偶数か奇数か、か。だとしたら for (i=1,e=0,o=0 ; i <= 510; i++) { の部分を for (i=0,e=0,o=0 ; i < 510; i++) { にしちくり
えーこっちでも質問してたのかよ
575 :
デフォルトの名無しさん :2007/06/21(木) 16:16:49
i番目のフィボナッチ数を返す関数 long fibonacci(long n){/* */}を再帰を用いて定義せよ という問題なんですが 実行例 整数を入力してください:0 Fibonacci(0)=1 整数を入力してください:1 Fibonacci(1)=1 整数を入力してください:2 Fibonacci(2)=2 整数を入力してください:6 Fibonacci(6)=13 となるようにしたいんですがお手上げ状態ですorz よろしくお願いします
>>575 int fibo(int x) {
if(x<=2) return 1;
else return fibo(x-1) + fibo(x-2);
}
577 :
デフォルトの名無しさん :2007/06/21(木) 16:23:41
578 :
デフォルトの名無しさん :2007/06/21(木) 16:26:33
i番目のフィボナッチ数を返す関数 long fibonacci(long n){/* */}を再帰を用いて定義せよ という問題なんですが 実行例 整数を入力してください:0 Fibonacci(0)=1 整数を入力してください:1 Fibonacci(1)=1 整数を入力してください:2 Fibonacci(2)=2 整数を入力してください:6 Fibonacci(6)=13 となるようにしたいんですがお手上げ状態ですorz よろしくお願いします
580 :
デフォルトの名無しさん :2007/06/21(木) 16:29:57
>>579 間違えました8ですしかも何度もかきこんでしまってすんませんorz
581 :
デフォルトの名無しさん :2007/06/21(木) 16:30:17
( ´,_ゝ`)プッ
(((;;;:: ;: ;; ;; ;:;::)) ::) ( ::: (;; ∧_,∧ );:;;;)) )::: :; :)) ((:: :;; (´・ω・)っ ;;;; ; :)) ((;;; (っ ,r どどどどど・・・・・ i_ノ┘ ((;;;;゜;;:::(;;: ∧__,∧ '';:;;;):;:::))゜)) ::))) (((; ;;:: ;:::;;⊂(´・ω・`) ;:;;;,,))...)))))) ::::) ((;;;:;;;:,,,." ヽ ⊂ ) ;:;;))):...,),)):;:::::)))) ("((;:;;; (⌒) |どどどどど・・・・・ 三 `J .∧__,,∧ ⊂(´・ω・`)⊃ ☆ ノ 丿 キキーッ ヽ .ノ (⌒) 彡 と_丿=.⌒ (⌒⌒) ∧_ ∧ ( ブッ ) ( ・ω・` ) ノノ〜′ (⊃⌒*⌒⊂) /__ノωヽ__)
>>584 ちょっwwwwwwおまっwwwwwww何しに来とんねん?w
586 :
デフォルトの名無しさん :2007/06/21(木) 16:44:44
>>586 だから
>>576 の int を long にして使いなはれ。
まさか、値を受け継ぐところまで他人に作れと?
588 :
デフォルトの名無しさん :2007/06/21(木) 16:51:13
[1] 授業単元: 再帰関数 [2] 問題文: 文字列s、pを与えられ、文字列sの中を戦闘から順に調べ、pに一致する部分 文字列が見つかった場合はその部分文字列の先頭を指すポインタを、見つからない場合 は0を返す関数searchを書け。 [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン:gcc 3.4 [3.3] 言語:C [4] 期限: 2007年06月22日08:00まで [5] その他の制限: searchは必ず再帰関数として作ること。関数searchの頭書きはchar *search(char* s, char* p){... とすること。例えばx=sercha("international", "nat");ではx=nationalになる。 なお、ライブラリ関数を利用してはいけない。関数を使いたいときは自分で定義する事。 急ぎで申し訳ありません。あと1問あります・・・。
ライブラリ関数を利用しちゃいけないのに関数を定義して使えと? 標準ライブラリを使っちゃあかんってことやね?どこの学校の どこの講師の問題じゃ〜〜ゴルァ〜〜〜ってトーマスさんがクレームつけてきまつよぉ〜ん♪
591 :
588 :2007/06/21(木) 17:01:19
[1] 授業単元: ポインタ [2] 問題文: 文字列sを区切り文字sepによって3分割して、前半部と後半部を返す関数separateを書け。 [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン:gcc 3.4 [3.3] 言語:C [4] 期限: 2007年06月22日08:00まで [5] その他の制限: 関数separateの頭書きはchar *separate(char* s, char sep, char **remain){...とせよ。文字 列sを先頭から順に調べ最初に見つかった文字sepの1回以上の繰り返しによって, sを前半部と後半部に 分裂し、前半部分を返り値として返し、後半部分を第3引数(remain)として返せ。前半部分は複製を作っ て返すことになる(mallocを使う)。後半部分は複製を作る必要はない。区切り部分sepがみつからなった 場合はsを返し、第3引数(remain)として0を返せ。 たとえばx=separate("my...book", '.', &p);ではxは"my"にpは"book"になる。 なおライブラリ関数として使ってよいのはmallocだけである。 2問もあげてしまってすみません。どうぞよろしく御願いいたします。
592 :
デフォルトの名無しさん :2007/06/21(木) 17:02:27
>>587 さん
すみませんど素人なもんでどうすればいいのかわからんのです
long fibonacci(int x) {
if(x<=2) return 1;
else return fibo(x-1) + fibo(x-2);
}
てすればいいんでしょうか?
ごめんなさい教えてください
593 :
588 :2007/06/21(木) 17:04:17
>>589 本当ですね。焦っていて見逃していました。
ありがとうございます。
595 :
588 :2007/06/21(木) 17:09:23
>>589 本当ですね。焦っていて先走っちやいました。
ピュッピュッ逝くぅ〜〜〜〜ん♪
596 :
デフォルトの名無しさん :2007/06/21(木) 17:14:03
>>594 さん
long fibonacci(long x) {
if(x<=2) return 1;
else return fibo(x-1) + fibo(x-2);
}
でなるんどえしょうか?nじゃなくてxにしなきゃなんですかね?
日本語文章はどこにいれればいいのでしょうか?
x = search("nekodaisuki", "kk"); こうした場合はkodaisukiになるけど、ええんか?
>>596 いや、別に long n にするんだったら中の x を n にすりゃええがな・・・
あとそれ、再起を使ったライブラリの部分だから、あとはそれを
main の中で適当に引数を入れる仕組みにして用いたらええがな。
>>575 >>596 はいはいクマクマ。
#include <stdio.h>
long fibo(long x) {
if(x<=2) return 1;
else return fibo(x-1) + fibo(x-2);
}
int main(void) {
int n;
printf("整数を入力してください:");
scanf("%ld",&n);
printf("Fibonacci(%ld)=%ld",n,fibo(n));
return 0;
}
>>591 #include <stdio.h>
char *separate(char *s, char sep, char **remain)
{
char *p;
for (p = s; *p && *p != sep; ++p) {}
if (!*p) *remain = 0;
else {
++p;
p[-1] = '\0';
while (*p == sep) p++;
*remain = p;
}
return s;
}
int main(void)
{
char s[] = "my...book", *p, *ss;
ss = separate(s, '.', &p);
printf("%s\n%s\n", ss, p);
return 0;
}
602 :
454 :2007/06/21(木) 17:33:31
603 :
デフォルトの名無しさん :2007/06/21(木) 17:38:47
>>598 さん
すみませんホントにわかんないんですorz
>>599 さん
お手数おかけしましたやってみます
604 :
デフォルトの名無しさん :2007/06/21(木) 17:40:22
>583 ありがとうございます〜 もう一問ありました(汗) 問題は一緒なのですが・・ [1] 授業単元:待ち行列 [2] 問題文(含コード&リンク): N 人の人がいて,それらは番号 0, 1, 2, ..., N-1 で表されているとする。 この N 人の人間関係(知り合いかどうか)を表した配列 a[N][N] がある。 ただし, i 番目の人と j 番目の人とが知り合いであるとき a[i][j] == a[j][i] == 1 であり,知り合いでないとき a[i][j] == a[j][i] == 0 である。 このとき, x 番目の人から,知り合いの知り合いの知り合い.... という繋がりで, y 番目の人まで辿り着くには,最小で何回の知り合いという関係が必要か,を返す関数 int acquaintDistance(int a[N][N], int x, int y) を作れ。 なお,x 番目の人から y 番目の人に辿り着けない場合には,acquaintDistance は -1 を返すこととする。 関数名の acquaint は知り合いにさせる, distance は距離という意味である。 ヒント:待ち行列を利用する。最初に x を待ち行列に入れ, 後は,「待ち列から一つ dequeue して,その人の知り合いを待ち行列に enqueue する」 ということを繰り返す。ただし,一度 enqueue した人は二度と enqueue しないようにし, y を enqueue する時点あるいは enqueue する一がいなくなった時点で,終了する。 x から各人までの知り合い距離を入れる配列も用意しておき,新しい人を enqueue する度に,その人までの距離をその配列に入れる。 [3] 環境 [3.1] OS:Vine LINUX [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限:2007年6月28日10時45分まで [5] その他の制限:こちらも、どうかよろしくお願いします。
>>604 すまん、どこがさっきの問題と違うんだ?
607 :
デフォルトの名無しさん :2007/06/21(木) 17:45:12
[1] 授業単元:プログラミング [2] 問題文(含コード&リンク): float 型の大きさ 2 x 2 の行列 A の各要素を実行時に受け取り、 サブルーチンで A の逆行列を求めて表示せよ。 但し、逆行列がない時は、その旨を表示して強制終了せよ。 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語:C [4] 期限:22日のPM5:00まで [5] その他の制限: 特にありません よろしくお願いします
610 :
デフォルトの名無しさん :2007/06/21(木) 17:53:51
>606 すみません、 ・int enqueue(data_t enq_data) の仕様 data_t 型の enq_data を引数にとり,それを待ち行列に追加し,戻り値として SUCCESS を返す。 ただし,待ち行列が満杯であるときには追加せずに,戻り値として FAILURE を返す。 ・int dequeue(data_t *deq_data) の仕様 待ち行列が空でなければ、それからデータを一つ取り出し, その値を *deq_data に代入し、queue_num は1減じ, queue_head は1つ進めて、SUCCESS を戻り値として返す。 ただし,待ち行列が空のときは,戻り値として FAILURE を返す他は、何もしない。 ・void queuePrint() これらの関数を使わないといけないみたいです(汗)
612 :
デフォルトの名無しさん :2007/06/21(木) 18:30:10
[1] 授業単元:プログラミング基礎 [2] 問題文(含コード&リンク): 以前角谷予想プログラムの「偶数なら2で割る,奇数なら3倍して1を足す」という部分を関数化した. さらにその関数に,奇数処理,偶数処理を実行した回数をカウントする部分と,その処理回数を表示させる部分を追加し,実行結果の様に表示させるようプログラムを変更せよ. まず,関数の機能に次の2つを追加し,入力される数値 x によって関数の機能を切り換えるようにする * x > 0 ならば,今までと同じ処理と処理回数のカウントを奇数偶数それぞれ行う * x = 0 ならば,実行結果の様に奇数処理,偶数処理をした回数を表示する このようにすれば,main関数の最後の方で kakutani(0); で呼び出し,処理回数を表示させる事が出来る. [3] 環境 [3.1] OS: マッキン [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 2007年06月22日10:00まで 期限があれですがお願いしますm∀`)シ
>>613 > [3] VB6.0
これが気になる。
Virtual Boy ?
#include <stdio.h> int main (void) { int j, h; int a[3]; int *ptr; ptr=&a[0]; printf("配列a[]の要素を順に3つ入力してください.\n"); for(j=0; j<3; j++){ scanf("%d", &a[j]); } for(h=0; h<3; h++){ printf("%d,%d\n",ptr+h,*(ptr+h)); } return 0; }
617 :
デフォルトの名無しさん :2007/06/21(木) 18:55:48
>>599 さん
>>575 です。
#include <stdio.h>
long fibo(long x) {
if(x<=2) return 1;
else return fibo(x-1) + fibo(x-2);
}
int main(void) {
int n;
printf("整数を入力してください:");
scanf("%ld",&n);
printf("Fibonacci(%ld)=%ld",n,fibo(n));
return 0;
}
でやってみたんですが、整数6を入力すると8がでてきてしまいます
あと、連続してでてくるようにするにはどうすればいいのでしょうか
>>617 >>579 っつか、前に出てた奴と同じ学校?連続してやるなら
main の中に for 分を使って fibo(i) とでもして連続して値をやったら?
っつか、順に求めるならなおさら再帰なんて効率の悪いやり方だな・・・
619 :
588 :2007/06/21(木) 19:24:18
>>588 510のプログラムを試してみたのですがx=search("international","nat")にすると
"nternational"が返ってきてしまいます。この場合はどうしたらいいでしょうか。
>>591 >>600 詳細が細かくて申し訳ないのですがmallocを使った関数で御願いします。
注文が多くてすみません。
[1] 授業単元:人工知能 [2] 問題文(含コード&リンク):反復深化探索で8パズルを解くツリーを作る [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc 3.4 [3.3] 言語: C言語 [4] 期限: 2007年06月22日10:00まで [5] その他の制限: 特になし
>>619 #include <stdio.h>
int startwith(char *s, char *t)
{
if (!t[0]) return 1;
if (s[0] != t[0]) return 0;
return startwith(s + 1, t + 1);
}
char *search(char* s, char* p)
{
if (!s[0]) return 0;
if (startwith(s, p)) return s;
return search(s + 1, p);
}
int main(void)
{
char s1[256], s2[256], *s;
while (scanf("%s %s", s1, s2) == 2)
printf("%s\n", (s = search(s1, s2)) ? s : "NULL");
return 0;
}
623 :
みまつや :2007/06/21(木) 20:38:58
[1] 授業単元:C言語 [2] 問題文(含コード&リンク):二点間の描写(配列ではなくポインタを使うこと) [3] 環境 [3.1] OS: windows [3.2] コンパイラ名とバージョン: visual C++ [3.3] 言語: C言語 [4] 期限 6月25日 [5] その他の制限: 特になし ※問題の詳しい内容は下記の通りです。 与えられた二点をつなげて線を引く 入力 X画素: x_size X画素: y_size X始点: x1 Y始点: y1 X終点: x2 Y終点: y2 出力 画素分のデータベース *img
624 :
みまつや :2007/06/21(木) 20:39:38
続き<例> x_size = 10 y_size = 10 x1 = 0 y1 = 0 x2 = 9 y2 = 9 実行結果(img) 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1
625 :
602 :2007/06/21(木) 20:46:29
602をお願いします
627 :
デフォルトの名無しさん :2007/06/21(木) 21:08:36
[1] 授業単元:プログラミング [2] 問題文(含コード&リンク): 文字列配列 *a[10] を 10 個の英単語で最初に初期化し、サブルーチンで、 10 個の中で辞書的に一番遅く現れる文字列を表示せよ. [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語:C [4] 期限:22日のPM6:00まで [5] その他の制限: 文字列の比較 strcmpという関数を使うこと. よろしくお願いします
628 :
みまつや :2007/06/21(木) 21:09:07
>>626 失礼しました(汗)ご指摘の通り10*10でお願いします。
1 0 0 0 0 0 0 0 0 0
0 1 0 0 0 0 0 0 0 0
0 0 1 0 0 0 0 0 0 0
0 0 0 1 0 0 0 0 0 0
0 0 0 0 1 0 0 0 0 0
0 0 0 0 0 1 0 0 0 0
0 0 0 0 0 0 1 0 0 0
0 0 0 0 0 0 0 1 0 0
0 0 0 0 0 0 0 0 1 0
0 0 0 0 0 0 0 0 0 1
>>337 遅れてすみません。
助かりました。
ありがとうございます。
>>627 #include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
int compare(const char *s, const char *t)
{
char *ss, *tt, *p, *q;;
int n;
ss = p = malloc(strlen(s)+1);
tt = q = malloc(strlen(t)+1);
while (*p++ = tolower(*(unsigned char*)s++)) {}
while (*q++ = tolower(*(unsigned char*)t++)) {}
n = strcmp(ss, tt);
free(ss);
free(tt);
return n;
}
int main(void)
{
char *a[10] = {
"banana", "aPple", "pEach", "orAnge", "lemOn",
"meloN", "mango", "STrawberry", "raSpberry", "peaR"
};
char *last = a[0];
int i;
for (i = 1; i < sizeof(a)/sizeof(a[0]); ++i)
if (compare(last, a[i]) < 0)
last = a[i];
puts(last);
return 0;
}
632 :
デフォルトの名無しさん :2007/06/21(木) 22:43:38
>>632 #include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
int cmp(const void *a, const void *b) {
return strcmp(*(char**)a, *(char**)b);
}
int main(int argc, char **argv) {
int i;
char **av, *s, *t;
if (argc < 3) {
fprintf(stderr, "usage : %s string1 string2 [string3....]\n", argv[0]);
return 1;
}
av = malloc(sizeof(char*) * (argc - 1));
for (i = 0; i < argc - 1; ++i) {
av[i] = malloc(strlen(argv[i + 1]));
s = av[i], t = argv[i + 1];
while (*s++ = toupper(*(unsigned char*)t++)) {}
}
qsort(av, argc - 1, sizeof(char*), cmp);
puts("** before **");
for (i = 1; i < argc; ++i)
puts(argv[i]);
for (i = 0; i < argc - 1; ++i)
puts(av[i]);
return 0;
}
↓すまん、この1行追加 puts("** after **"); for (i = 0; i < argc - 1; ++i) puts(av[i]); return 0; }
635 :
みまつや :2007/06/21(木) 23:05:58
>>629 ありがとうございます。助かりました。
一点質問があるのですが、例のような10*10で表示するには
#define X 80
#define Y 24
の部分の値を変えてあげればいいんでしょうか?
>>632 #include <stdio.h>
#include <ctype.h>
#include <stdlib.h>
int cmp(const void *a, const void *b){
return *(unsigned char*)a - *(unsigned char*)b;
}
int main(int argc, char **argv){
if(argc<2){
printf("usage : program string1 string2 [string3....]\n");
return 1;
}else{
int i;
for(i=1; i<argc; i++){
unsigned char *p,*q;
p = q = argv[i];
for(; *p; p++) if(islower(*p)) *p = toupper(*p);
qsort(q, p-q, sizeof(*p), cmp);
for(;*q;q++) putchar(*q);
putchar('\n');
}
}
return 0;
}
しーらないっと
638 :
デフォルトの名無しさん :2007/06/21(木) 23:10:11
>>631 ありがとうございました。
ただ申し訳ないのですが、内容があまりにも高度過ぎてわかりませんでした・・・。
上5行のうち習ったのは#include<stdio.h>だけですのでこれのみ使用した場合の
解答方をお願いします。
開発者が一目置くのはハッカーだが、顧客が信頼するのはエスパー
640 :
602 :2007/06/21(木) 23:13:16
締め切りが近いのでお願いします・・・・
>>639 >>627 では strcmp() を使えとあるが、
strcmp()は stdio.h ではなく string.h の関数だよ。
642 :
637 :2007/06/21(木) 23:14:54
ごめん、題意まちがってた
643 :
641 :2007/06/21(木) 23:15:56
644 :
デフォルトの名無しさん :2007/06/21(木) 23:21:25
申し訳ないです。 それでは#include <stdio.h>と#include <string.h>のふたつを使った場合の解答法 を教えてください。
645 :
641 :2007/06/21(木) 23:28:56
>>644 おれはめんどうくさいからやだ。他の人に期待して。
一応説明しとくと、辞書順比較を行えという問題なのに
strcmp()で文字コード順比較させるのがこの問題のいやなところ。
>>631 があんなに子汚いのはそのため。
646 :
デフォルトの名無しさん :2007/06/21(木) 23:32:29
647 :
633 :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; }
648 :
641 :2007/06/21(木) 23:37:30
>>644 #include <stdio.h>
#include <string.h>
void insert(char **start, char **end, char **data){
char **p = start;
*end = *data;
while(start<end && 0<strcmp(*(end-1), *end)){
char *tmp=*end; *end=*(end-1);*(end-1)=tmp; end--;
}
}
void to_up_str(char *s){
while(*s){
if(*s>='a'&&*s<='z') *s+='A'-'a';
s++;
}
}
int main(int argc, char **argv){
if(argc<3){ printf("usage : program string1 string2 [string3....]\n"); return 1;}
else{
int i;
char *buf[30000] ={argv[1], }, **end = buf+1;
to_up_str(argv[1]);
for(i=2; i<argc; i++){
to_up_str(argv[i]);
insert(buf, end, &argv[i]); end++;
}
for(i=0; buf[i]; i++) puts(buf[i]);
}
return 0;
}
cygwinなら平気。
650 :
sage :2007/06/21(木) 23:48:55
標準ライブラリにあるならそれを使ったほうが高度じゃね?
>>645 strcmp って辞書順比較じゃなかったっけ?
655 :
641 :2007/06/22(金) 00:00:03
>>653 strcmp()で比較すると、Zがaより前になっちゃうよ。
>>651 高度というかdirty hackだよな。
良い子は真似しちゃいけないコード。
658 :
シャノン :2007/06/22(金) 00:03:39
[1] 授業単元:情報論 [2] 問題文(含コード&リンク):• 起動させると,同じディレクトリにある圧縮前のファイル「srcdata.txt」を読み込み, Shannon符号を用いて圧縮を行い,符号化結果を「encoded.txt」 というファイル名で書き出す. • 次に,この「encoded.txt」ファイルを読み込んで,解凍処理を行い,復号結果を 「decoded.txt」というファイル名で書き出し,終了する. • 圧縮対象のファイルはテキストファイルとし,出現する可能性のある文字は,a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p の16文字の内の何れかである.ファイルの長さはまちまち で,一行だけである. • 圧縮されたファイルもテキストファイルとし,先頭の16行は,各文字に対する符号を 「0」,「1」を使って一行に一つずつ書く(符号を割り当てない場合は「-」を書く). 17行目に符号化された0,1系列を一行で書く. • 解凍されたファイルは,元の圧縮対象ファイルと同じになるように作る. なお、途中まで完成している。そのプログラムは次に書き込みます。 以下のプログラムの関数void Encodeとvoid Decodeを完成かさせていただきたいです(><) [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名gcc 3.4 [3.3] 言語: C、C++,C#いずれでも可 [4] 期限: ([2007年6月23日23:59まで] [5] その他の制限:標準ライブラリは使ってはいけない. 手法を考えてもその部分だけは実現には到りませんでした。。。 よろしくお願いします。
660 :
649 :2007/06/22(金) 00:10:19
すまん、俺が間違えた。 これは、644の回答じゃない。
突っ込みどころ満載だなw Linux & gccでC#はねぇだろうし、そもそもスレチだから そのオプションは見なかったことにして まぁ例によって標準ライブラリ「以外」を使えばいいんじゃね
[1] 授業単元:C言語 [2] 問題文:以下のプログラムを書き換え、ファイル名をコマンドラインか ら指定できるようにせよ。ソースプログラムを書き込んで提出せよ。 #include<stdio.h> #include<stdlib.h> int main(void){ char c; char filenaime[]="data.txt"; FILE *fp; if((fp=fopen(filenaime,"r"))==NULL){ printf("File does not exist.\n"); exit(1); } while((c=getc(fp)) !=EOF){ printf("%c\n",c); } fclose(fp); } [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限: 2007年06月23日まで [5] その他の制限:特にないと思います。 タイプミスしていたら教えてください
>>664 変更部分だけ
int main(int argc, char *argv[]) {
char c;
FILE *fp;
if(argc<2) {
printf("ファイル名の指定がねぇ〜ぞゴルァ!\nよって終了、二度と実行すんなよ\n");
return 1;
}
if((fp=fopen(argv[1],"r"))==NULL){
C#でもコンソール出力なら楽じゃね? GUIもエディタ備えているからDelphi並み(ヘジたん作だしな)の楽さだし
667 :
658シャノン :2007/06/22(金) 01:12:34
ここであえてC++で書いてやるのも一興かもな
[1] 授業単元:繰り返し [2] 問題文(含コード&リンク):(´・ω・`) [3] 環境 [3.1] OS: WindowsXP [3.2] コンパイラ名とバージョン: Borland [3.3] 言語: C [4] 期限: 無期限
(´・ω・`)(´・ω・`)
>>669 #include <stdio.h>
int main(void) { for(;;) puts("(´・ω・`)"); return 0; }
[1] 授業単元: プログラミング基礎 [2] 問題文(含コード&リンク): n乗の数を求める関数を、作成しなさい。 ・n乗値を求める関数 n乗値 数字iのn乗値を返す関数 関数定義 double myPow(double i, int n) 例1:i=1.2,n=3の場合,1.728になる 例2:i=1.2,n=-3の場合,0.5787[037]になる 例3:i=1.2,n=0の場合,1.0になる 正,0,負の3つの場合があることに注意 [3] [3.1] OS:Windows [3.2] コンパイラ名とバージョン:Microsoft Visual Studio .NET 2003 [3.3] 言語:C++ [4] 期限:2007年6月22日14時 [5] その他の制限:出来るだけ簡単(初歩的)にすること。 よろしくおねがいします。
[1] 授業単元:C言語 [2] 問題文以下のプログラムから 名前を5個入力して一番長い名前を出力するプログラムを作れ。 #define NAME_NUMBER 5 #define NAME_LENGTH 10 int main(void){ int i,j; char name_list[NAME_NUMBER][NAME_LENGTH]; for(i=0;i<NAME_NUMBER;i++){ printf("名前[%d]=",i); scanf("%s",name_list[i]); } for(i=0;i<NAME_NUMBER;i++){ printf("%s\n",name_list[i]); } for(i=0;i<=4;i++){ [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン: C++ [3.3] 言語:C [4] 期限:22日のPM4:30まで [5] その他の制限: for文で作れとのこと 宜しくお願いします。
>>672 桁精度とかまったく考慮してないけども。
double hoge(double d, int n){
double ret = 1.0;
int i;
if(n == 0)
return ret;
if(n < 0){
for(i = 0; i < -n; i++)
ret /= d;
return ret;
} else {
for(i = 0; i < n; i++)
ret *= d;
return ret;
}
}
int main(){
printf("%f\n", hoge(1.2, 3));
printf("%f\n", hoge(1.2, -3));
printf("%f\n", hoge(1.2, 0));
return 0;
}
[1] 授業単元:プログラミング言語 [2] 問題文 個人データを格納する表を作成し,入力された学生番号に該当する個人データを表示するプログラムを作成せよ 個人データは次のフィールドからなる構造体として定義する - 学生番号(文字列(数字列)) - 姓(文字列) - 名前(文字列) - 性別(数字) 0 男 1 女 (個人データは構造体変数の初期設定を用いる) (データの人数は3人程度でいいらしいです) • 表は配列として定義する • 入力した学生番号に該当したデータが無い場合は、not found と表示する • 学生番号の入力を繰り返して行うようにする. • 入力の終了はEOFの検出,あるいは学生番号が0を入力した時とする [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン: Microsoft Visual Studio 2005 [3.3] 言語:C++ [4] 期限:22日のAM9:00まで [5] その他の制限: 期限まで時間が無さすぎるので無理だとは思っていますが、出来る方いたらお願いします
>>673 「一番長い名前」の説明が不十分(同じ長さがあった場合とか)なんで
同じ長さのがあった場合は、前に入力された方を優先する感じで。
int main(){
int i;
char name_list[NAME_NUMBER][NAME_LENGTH];
int maxLen = -1;
int maxIdx = 0;
for(i = 0; i < NAME_NUMBER; i++){
printf("名前[%d]=", i);
scanf("%s", name_list[i]);
}
for(i = 0; i < NAME_NUMBER; i++){
int len = strlen(name_list[i]);
if(maxLen < len){
maxLen = len;
maxIdx = i;
}
}
printf("最長 --> %d番目 : %s\n", maxIdx, name_list[maxIdx]);
return 0;
}
改行多すぎでエラー出たんで切り分けた
>>676 の頭にコレ↓追加で
#include <stdio.h>
#include <string.h>
#define NAME_NUMBER 5
#define NAME_LENGTH 10
>>675 間に合うかわからんが今gccで作ってる
ちっと待っとれ
679 :
675 :2007/06/22(金) 04:45:53
>>678 間に合うか否かは関係なく感謝です
gccですか、初めて聞いたので調べてみましたが
C++用に作ればC++で動作するらしいですね
では待ってます
#include <stdio.h> #include <string.h> #include <stdlib.h> // マクロ #define MAX_SIZE 32 #define DATA_MAX 4 #ifndef EOF #define EOF -1 #endif //=================================================================================== // 定数・構造体定義 //=================================================================================== typedef enum { male, female, unknown } SEX; typedef struct _tagPerson { char id[MAX_SIZE]; // 学籍番号 char lastName[MAX_SIZE]; // 苗字 char firstName[MAX_SIZE]; // 名前 SEX sex; // 性別 } Person; //===================================================================================
//=================================================================================== // 広域変数 //=================================================================================== // 個人データ初期化 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; }
int main(){ char buf[MAX_SIZE]; // EOF(-1)入力まで繰り返し while(1){ int idx = -1; char* p = NULL; // 標準入力からID読み込み printf("Input ID? "); fgets(buf, MAX_SIZE, stdin); p = strchr(buf, '\n'); // 末尾の改行文字検索 if (p != NULL) { *p = '\0'; // 改行文字を終端文字に置き換え } if(atoi(buf) == EOF) // EOF(-1)チェック break;
// ID探索 idx = SearchData(buf); if(idx == -1){ printf("data not found\n"); } else { printf("ID : %s\n姓 : %s\n名 : %s\n性別 : %s\n", students[idx].id, students[idx].lastName, students[idx].firstName, (students[idx].sex == male) ? "男" : ((students[idx].sex == female) ? "女" : "不明")); } printf("\n"); } return 0; }
684 :
678 :2007/06/22(金) 05:19:25
インデントがひどいことに… とりあえず1〜4まで一つにつなげればいけると思う 一応手元のVS2005で動作確認 急いで作ったんでかなり雑ですげぇ適当だけどこれで勘弁してくだしあ というか、データテーブルの規定がなかったんで 思いっきりグローバル変数でやっちまったけどこれでいいのだろうか ついでに結果の性別表示のところかなり強引だけど、まぁその辺はご愛嬌ってコトでひとつ
685 :
678 :2007/06/22(金) 05:32:47
あ、SearchData()の中のコレ↓削っといて printf("%s %s\n", id, students[i].id); デバッグ表示消し忘れた あと純粋に0が入力された時の処理入れ忘れた atoi()で数字以外が渡されると0が返ってきちゃうんで 今のままだと0入れても終わらないから気をつけて
686 :
675 :2007/06/22(金) 05:49:22
わざわざこんな時間にありがとうございました コメントもあるし理解できるので大丈夫です じっくりと吟味させていただきます グローバル変数も性別も特に問題無いです ここまでやってもらっただけでも十分なので 0入れても終わらないのは自分で改良しておきます お疲れ様でした
687 :
588 :2007/06/22(金) 05:49:27
>>677 ありがとうございました。説明不足な点、申し訳ないです;
689 :
602 :2007/06/22(金) 08:54:57
602を御願いいたします。
690 :
490 :2007/06/22(金) 09:10:56
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):
次に示す関数a,bの値を入力してxの値を0.00から3.14まで0.01間隔で計算して出力するプログラムを作成せよ。
ただし以下に示した関数として定義すること。f(x)=exp(ax)×sinbx
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン:VC 6.0
[3.3] 言語: C++
[4] 期限: 2007年7月6日AM8:30まで
>>493 関数a,bはf(x)に入っているa,bのことです。
お願いします。
C++じゃなければ暇だからやってるのに…
>>690 #include <cstdio>
#include <cmath>
struct F {
F(double a_, double b_) : a(a_), b(b_) {}
double operator()(double x) { return std::exp(a * x) * std::sin(b * x); }
double a, b;
};
int main() {
double a, b;
if (std::scanf("%lf %lf", &a, &b) == 2) {
F f(a, b);
for (double x = 0; x <= 314; ++x)
std::printf("f(%.2f) = %g\n", x/100, f(x/100));
}
return 0;
}
693 :
デフォルトの名無しさん :2007/06/22(金) 10:51:37
[1] プログラミング [2] 通常の数式(3*5-2/9等)を、逆ポーランド表記法へと変換するプログラムを作成せよ。 [3] 環境 [3.1] WindowsXP professional [3.2] Borland C++Compiler 5.5 [3.3] C言語 [4] 期限: できれば土日 [5] その他の制限: 構造体はまだ習っていない。配列に格納せよとの事。 俺には難易度高すぎる・・・。
694 :
デフォルトの名無しさん :2007/06/22(金) 10:53:37
695 :
再帰 :2007/06/22(金) 11:20:35
[1] 授業単元:C言語演習 [2] 問題文(含コード&リンク): 入力:8個の異なる値の整数データ 操作:集合Sのデータ数が2以上のときは、 データをデータ数が等しい二つの集合S1,S2に分割、集合S1について最大値M1と最小値m1を求める(再帰呼び出し)。 集合S2についても同様。 最大値M1,M2の大きい方を集合Sの最大値Mとし、 最小値m1,m2の小さい方を集合Sの最小値mとしてリターン(帰る)。 出力:8個の異なる値の整数データの最大値と最小値を出力。
696 :
再帰 :2007/06/22(金) 11:22:33
[3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限:できるだけ早くお願いします [5] その他の制限:なるべく簡単な構造で構成してもらいたいです。 また標準ライブラリは使わないでお願いします。 携帯からすいません。
>>695 >操作:集合Sのデータ数が2以上のときは、
「2より大きい」で良いんだよな?
>また標準ライブラリは使わないでお願いします
数値の入力と出力は何を使えばいいんだ?
698 :
再帰 :2007/06/22(金) 11:42:08
入出力はstdio.hです。 scanfで整数の入力を行ってください。 他にもstdlib.hやmath.hも必要であれば使ってください。 655、656は標準ライブラリが何かを知らずに書いてしまいました。 すいません。
>>695 出来たけど、携帯でソース見るのつらくねぇ?
#include <stdio.h>
void func(int *s, int size, int *min, int *max)
{
int min1,min2,max1,max2;
if(size == 1){
*min = *max = s[0];
return;
}
func(s, size/2, &min1, &max1);
func(s+size/2, size - size/2, &min2, &max2);
if(min1 < min2) *min = min1;
else *min = min2;
if(max1 > max2) *max = max1;
else *max = max2;
}
int main()
{
int i,min, max, s[8];
for(i=0;i<8;i++){
printf("%d個目の数値を入力:",i);
if(scanf("%d", &s[i]) != 1){
printf("数値じゃないです\n");
return 0;
}
}
func(s,8,&min,&max);
printf("min = %d, max = %d\n", min, max);
return 1;
}
あ、すまん。
>>699 で、8個の数字全部出力するところ、書き忘れてるわ。
そこは自分で頑張って。
>>693 #include <stdio.h>
#include <string.h>
int main(int argc, char **argv)
{
int c, cc, sp = 0, stack[0x100];
const char *op = "()+-*/^", *p;
if (argc < 2)
return fprintf(stderr, "usage: %s InfixExpression\n", argv[0]), 1;
while (c = *(unsigned char*)argv[1]++) {
if ((p = strchr(op, c)) == NULL) putchar(c);
else if (c == '(') stack[sp++] = c;
else if (c == ')') {
while (sp > 0 && (cc = stack[--sp]) != '(')
putchar(cc);
}
else {
if (!sp || p > strchr(op, stack[sp-1])) stack[sp++] = c;
else {
do { putchar(stack[--sp]); }
while (p <= strchr(op, stack[sp-1]));
stack[sp++] = c;
}
}
}
while (sp > 0) putchar(stack[--sp]);
putchar('\n');
return 0;
}
702 :
701 :2007/06/22(金) 12:16:58
すまん。 do { putchar(stack[--sp]); } - while (p <= strchr(op, stack[sp-1])); stack[sp++] = c; ---↓のように修正------------------------------------------------ do { putchar(stack[--sp]); } + while (sp > 0 && p <= strchr(op, stack[sp-1])); stack[sp++] = c;
703 :
再帰 :2007/06/22(金) 12:28:25
>>700 ご心配までかけてすいません。
ありがとうございます!
704 :
デフォルトの名無しさん :2007/06/22(金) 13:25:23
705 :
デフォルトの名無しさん :2007/06/22(金) 13:38:07
>>625 readfile()内の
data[filelength++]=c;
htnode[(int)c].freq++;
を
data[filelength++]=(unsigned char)c;
htnode[(unsigned char)c].freq++;
にしてみ。
>>706 とりあえず、変な入力したらエラー吐いてそこでとまるようにしたほうがいいんじゃないの?
あと、説明ないから今何を入力すればいいか戸惑うからプロンプトとかも。
709 :
デフォルトの名無しさん :2007/06/22(金) 13:56:46
[1] 授業単元:プログラミングA [2] 問題文(含コード&リンク): 10個の数が与えられたとき、その最大値を与える関数saidaiを 作成し、関数mainで、10個の変数をキーボードから入力し、saidai を呼び出して最大値を求め、その最大値を関数mainで表示させよ。 プロトタイプ、return文を用いよ。 [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: CC [3.3] 言語: C++ [4] 期限: 6月22日16時まで [5] その他の制限: よろしくお願いします。
>>709 #include<stdio.h>
#define N 10
int saidai(int *array);
int main(void)
{
int i,array[N];
for(i=0;i<N;i++){
if(scanf("%d",&array[i])==0){
getchar();
i--;
}
}
printf("最大値は%dです。\n",saidai(array));
return 0;
}
int saidai(int *array)
{
int i,max=array[0];
for(i=1;i<N;i++)
if(max<array[i])
max=array[i];
return max;
}
711 :
デフォルトの名無しさん :2007/06/22(金) 14:25:45
712 :
◆UoNQqijD4I :2007/06/22(金) 14:27:12
[1] 授業単元:プログラミング実習 [2] 問題文(含コード&リンク):4行3列の行列Aと3行4列の行列Bの異なる行列式のファイルを読み込み、 読み込んだ行列と、Aの転置行列、及びAの転置行列とBの行列との和を出力するプログラムを作成し、 ソースコードを提出すること。 注意)読み込むファイルはこちら側で用意しておきますので、 行列Aのファイル名を[kadai1.dat]、行列Bのファイル名を[kadai2.dat]という名前で提出すること。 [3] 環境 [3.1] OS Linux [3.2] コンパイラ名とバージョン: gcc 3.4 [3.3] 言語:(C [4] 期限: ([2007年06月22日17:00まで] [5] その他の制限:バイナリファイル、ポインタまで習いました。よろしくお願いします
713 :
デフォルトの名無しさん :2007/06/22(金) 14:30:52
お願いします。以下 キーボードから順次入力された正の整数を0 が入力されるまで,配列に順番に格納し,入力 された(0 を除く)値の平均値(実数として扱うこと)に最も近い値(平均との差が最小と なる値)が何番目に入力されたどういう値であるかを表示するプログラムを作成せよ.例え ば,次のような実行例を想定している(下線部はキーボードからの入力を表す). 数字(1)を入力してください 2 数字(2)を入力してください 5 数字(3)を入力してください 3 数字(4)を入力してください 1 数字(5)を入力してください 0 入力された数字の平均は2.75 です. これは,3 番目に入力された3 に最も近いです
714 :
706 :2007/06/22(金) 14:32:11
716 :
◆UoNQqijD4I :2007/06/22(金) 14:51:13
>712です #include <stdio.h> #include <stdlib.h> #define ROW 4 #define COLUMN 3 int main(void) { FILE *fp; double a[ROW][COLUMN]; int i, j; if ( (fp = fopen( "kadai1.dat", "r")) == NULL ) { printf("ファイルが見つかりません : kadai.dat \n"); exit(1); } printf("行列は次の通りです\n"); for( i = 0 ; i < ROW ; i++) { for( j =0 ; j < COLUMN ; j++) { fscanf(fp, "%lf", &a[i][j]); printf("%5.2f\t", a[i][j]); } printf("\n"); } printf("転置行列は次の通りです\n"); for( j = 0 ; j < COLUMN ; j++) { for( i = 0 ; i < ROW ; i++) {fscanf(fp, "%lf", &a[i][j]); printf("%5.2f\t",a[i][j]); } printf("\n"); } fclose( fp ); return 0; } ここまでできたのですが、A転置行列をBの行列の和がわかりません…
>>714 とりあえず、一部テストしたけど
%[+-*/]→%[+-*/]c
char sig→int sig
にした方がいいと思う。
あと、改行が残っててそれを2つ目のscanfで食って終わっちゃうんだろうと思うから
scanfのあとに空のgetchar仕込めば何とかなると思う。
charをintの件は撤回
っていうか、全文コピーしてやると全然動かねwww 改造するのめんどくさくなってきた。
>>707 多少遅れても提出点貰いたいんで時間ある方お願いします
721 :
◆UoNQqijD4I :2007/06/22(金) 15:24:37
>716 A転置行列「と」Bの行列の和です 誤字ですみません。。
やっぱ適当に何回か試したけど、%[+-*/]も%[+-*/]cも無理というか使わないほうがいい。 OSだかコンパイラだかどっちなんだか分からんがさっきから怒られるばかりだ。 n2の値も狂うし。
今考えたら関数マクロ使う意味ねwww まぁいいや。
>>717 ,722,723
返信ありがとうございます。
>>722 改造してくださりありがとうございます。
あとで見てみようと思います。
726 :
701 :2007/06/22(金) 15:59:29
727 :
デフォルトの名無しさん :2007/06/22(金) 16:24:58
>>712 読み込むファイルのフォーマットがわからんから
宿題そのものじゃなくて行列を扱うユーティリティーみたいなの作った
今上げるからちょっと待ってな
728 :
デフォルトの名無しさん :2007/06/22(金) 16:28:50
>>725 RPN電卓。
>>726 とパイプラインで接続すると普通の電卓になる。
#include <stdio.h>
#include <string.h>
#include <ctype.h>
int main(void)
{
int c, sp = 0;
double stack[0x100], x, y;
while ((c = getchar()) != EOF) {
if (c == '\n') {
printf("%g\n", sp > 0 ? stack[--sp] : 0);
sp = 0;
} else if (isdigit(c)) {
ungetc(c, stdin);
scanf("%lf", &x);
stack[sp++] = x;
} else if (strchr("+-*/^", c) && sp >= 2) {
x = stack[--sp], y = stack[--sp];
if (c == '+') stack[sp++] = x + y;
else if (c == '-') stack[sp++] = x - y;
else if (c == '*') stack[sp++] = x * y;
else if (c == '/') {
if (y != 0) stack[sp++] = x / y;
else stack[sp++] = 0;
}
}
}
return 0;
}
730 :
◆UoNQqijD4I :2007/06/22(金) 16:38:14
728さん!、
>>712 なんですけど、なんとかして716に続くようにしたいのですが…
731 :
デフォルトの名無しさん :2007/06/22(金) 16:44:31
>>730 だからファイルのフォーマットがわからんと
>>716 はファイルの読み込みと処理を一緒くたに扱ってるから、悪いけど手を入れる気が起きん
上げたソースをよく見てみ
行列データは構造体にまとめてあるし、座標指定で値をセット/ゲットできる
転置した後の行列の和を取りたいなら、単純に行と列の数だけループ回して足し合わせれば取れるだろ?
>>706 1) scanf()で%[]を指定した場合はcharではなくchar[]で受けなければダメ。
この場合、どうせ入れたものを後のswitchでチェックしてるので、
たんに%cでいい。
2) %[]だの%cだのは、%s、%d、%fのようなものと違い空白文字を
読み飛ばさないので、初心者がハマりやすい。今回無限ループに
陥っていたのはそのため。
3) いずれにせよ誤入力をした場合は、scanf()は簡単に無限ループを引き起こすので
戻り値はチェックすべし。
とりあえず↓のようにすればよいと思う。
#include <stdio.h>
int main(void)
{
double ans = 0.0, x, y;
char sig;
printf(...);
if (scanf("%lf %c %lf", &x, &sig, &y) != 3)
return 1;
switch (sig) {...}
while (ans <= 1000) {
printf(...);
if (scanf(" %c %lf", &sig, &x) != 2)
return 1;
switch (sig) {...}
}
return 0;
}
733 :
デフォルトの名無しさん :2007/06/22(金) 17:19:22
735 :
デフォルトの名無しさん :2007/06/22(金) 18:55:28
[1] 授業単元: 実プロC(コマンドライン引数) [2] 問題文(含コード&リンク): (おまけ)午前四時から正午までは Good Morning! と、正午から午後八時までは Good Afternoon! と、 午後八時から午前四時までは Good Evening! と、表示するプログラムを書け。 ただし、境界の時刻は前の時間帯に含まれるものとする。 *環境変数を使用しなければなりません。 [3] 環境 [3.1] OS:Vine Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語: C言語 [4] 期限:来週中 [5] その他の制限:よろしくお願いします。
736 :
デフォルトの名無しさん :2007/06/22(金) 19:00:42
↑ すみません [1]は実プロC(コマンドライン引数)ではなく実プロC(環境変数)でした
いやそれは別にどうだっていいんだが <time.h>じゃなくて環境変数? getenv()とか使うの?
739 :
デフォルトの名無しさん :2007/06/22(金) 19:28:23
>>735 こうですか?わかりません ><;
#include <stdio.h>
#include <time.h>
int main(void) {
time_t nowtime,hour;
struct tm *now;
time(&nowtime);
now = localtime(&nowtime);
hour = now->tm_hour;
if( hour>4&& hour<=12 ) printf("Good Morning!");
else if( hour>12 && hour<=20 ) printf("Good Afternoon!");
else printf("Good Evening!");
return 0;
}
>>739 気づきませんでした。ありがとございます
743 :
デフォルトの名無しさん :2007/06/22(金) 19:37:47
>>737 <time.h>ではないです。
getenv()、abs()などを使わなければならないと思います。
>>740 答えて下さったことにはありがたいのですが
環境変数を使わなければならないのですorz
>>705 >>739 705のように変更したんですが、動作しません。
ファイル名入力すると不正な処理みたいにWindowsが言います
746 :
デフォルトの名無しさん :2007/06/22(金) 20:14:57
>>744 設問に問題があるな。
renewtable()の
while(htnode[table[s]].freq>htnode[table[s+1]].freq && s!=255)
は
while(s!=255 && htnode[table[s]].freq>htnode[table[s+1]].freq)
にしないといけないだろ。(オレならs!=255はs<255にするが)
これで試せ
747 :
715 :2007/06/22(金) 20:15:24
つーか設問のバグなら教官につっかえせよ。
>>746 二つの文章の記述ってなにがちがうんですか?
&&の前後を入れ替えてるみたいですが
>>745 FedoraCore5、bashのデフォルトな環境だと、その環境変数は宣言されてなかった。
752 :
デフォルトの名無しさん :2007/06/22(金) 20:25:19
>>750 石橋を渡る時に、石があることを確かめてから渡る
石橋に使われている素材に良い石があるか確かめてから あったらちょっとそれだけ・・・人間の力じゃ無理ぽ
a && b はaかつbですよね b&&aにしてもかわらないんじゃないんですか? 実際入れ替えてみてうまく動作してはいるんですが
756 :
デフォルトの名無しさん :2007/06/22(金) 20:35:47
>>755 &&は左から順番に真偽を評価していく。
偽になればそれ以降は評価しない。
後者なら、sが255になるとtable[s+1]をアクセスしない。
>>729 ,732返信ありがとうございます。
>>729 難しいですね。。半分も理解できないです。わかる部分を使わせていただきます。
>>732 適切な指摘ありがとうございます。
理由が分からずに困っていたので、すっきりしました。
759 :
デフォルトの名無しさん :2007/06/22(金) 21:11:39
[1] 授業単元:プログラミング実習T [2] 数字・アルファベットを含むランダムな文字列を出力する親サーバからデータをボタンを押す事(送信)で受信し |送受信年月日(yyyy/mm/dd)|送受信時刻(ミリ秒まで)|送信or受信|データ(サーバからの応答=文字列)| |送受信年月日(yyyy/mm/dd)|送受信時刻(ミリ秒まで)|送信or受信|データ(サーバからの応答=文字列)| |送受信年月日(yyyy/mm/dd)|送受信時刻(ミリ秒まで)|送信or受信|データ(サーバからの応答=文字列)| |送受信年月日(yyyy/mm/dd)|送受信時刻(ミリ秒まで)|送信or受信|データ(サーバからの応答=文字列)| ・ ・ ・(これを500行) ↑の形で[500×4]のMS エクセルに表示可能なCSVファイルを出力するプログラムです。 [3] 環境 [3.1] OS:Windows2000 [3.2] コンパイラ名とバージョン:Borland C++ Builder Ver.5 [3.3] 言語:C++ [4] 期限:[2007年06月23日12:00まで] [5] その他の制限:サーバとクライアントは完成しています。 よろしくお願いします。
[1] 授業単元: Cプログラミング [2] 問題文(含コード&リンク): キーボードから順次入力された正の整数を0が入力されるまで, 配列に順番に格納し,入力された(0 を除く)値の平均値(実数として扱うこと)に最も近い値(平均との差が最小となる値) が何番目に入力されたどういう値であるかを表示するプログラムを作成せよ. 例えば,次のような実行例を想定している(下線部はキーボードからの入力を表す) 数字(1)を入力してください 2 数字(2)を入力してください 5 数字(3)を入力してください 3 数字(4)を入力してください 1 数字(5)を入力してください 0 入力された数字の平均は2.75 です. これは,3 番目に入力された3 に最も近いです [3] 環境 [3.1] OS: Linux [3.2] gcc [3.3] 言語: C [4] 期限:6/29 [5] その他の制限: できるだけ簡単なもので・・ よろしくお願いします
?
>>759 あのさ。これじゃエスパーしか作れないよ。
・作って欲しいのはサーバに接続してデータ受け取ってCSVを吐くプログラム
じゃねぇの?そういうのを普通は「クライアント」って言うんだけど、
「クライアントは完成しています」って何?
・プロトコルはどんな感じなの?いやRFCみたいにちゃんとしてなくてもいいけどさ。
今のまだとTCPだかUDPだかCORBAだかRPCだか、という次元さえわかんないよ?
・「ボタン」ってことは、GUIで作って欲しいのね?
763 :
759 :2007/06/22(金) 21:51:07
>>762 >・作って欲しいのはサーバに接続してデータ受け取ってCSVを吐くプログラム
> じゃねぇの?そういうのを普通は「クライアント」って言うんだけど、
> 「クライアントは完成しています」って何?
クライアントはまだ完成していません。誤植です。
プロトコルはTCPです。
そうです。GUIです。
よろしくおねがいします。
764 :
627 :2007/06/22(金) 21:52:56
#include<stdio.h> void sub(char *a[]) { char *end = a[0]; int s; for(s=0; s<10; s++){ if(strcmp(end,a[s])>0){ end = a[s]; } } printf("itibanosoinoha%s\n",end); } int main() { char *a[10]; int i; for(i=0; i<10; i++){ scanf("%s",&a[i]); } sub(a); return 0; } 自分なりに解いてみたのですが最後がどうしてもセグメントエラーになってしまいます。 いったいどのようにしたらいいでしょうか?
>>764 キーボードから入力じゃなくて初期化だから
char *a[10]={"a","i",}
って感じでいいんじゃね?
面倒だから2個しか初期化してないけど。
あと、メモリ確保してないポインタにいきなりscanfで値を入れるのは無理。
ついでに*a[10]は&a[i]って書いちゃうとそれはただのchar型を表してしまう。 %sはchar型配列を欲しがるわけだからその記述方法じゃダメ。
このスレってGUI作ってくれる人いたっけ・・・?
GUI+ソケットってかなり敷居が高いと思うのだが、 授業で WinAPI とか Winsock(2) をさわりだけでもやっているのか?
開発環境が整っていれば、GUIも大したことはない。枠組みをペタペタ貼り付けたり メニュー項目をいじって、あとは中でどういう処理をするか、書いたコードを用いる程度だし。
>>769 ASyncSock ってその枠組みにうまく収まるような代物なんかな?
771 :
627 :2007/06/22(金) 22:15:22
後から書き込んで申し訳ないのですが、条件に複数の実行例を添付すること。とあります。この場合scanfではなく、 初期化する値を変えるしかないのでしょうか?
>>760 #include <stdio.h>
#include <float.h>
#include <math.h>
int iGetNearPos(int *iNumber, int iCount, float fAvg)
{
float fMin=FLT_MAX;
int iPos=0;
int i;
float fSubtract;
for (i=0 ; i<iCount ; i++)
{
fSubtract = (float)fabs(iNumber[i]-fAvg);
if (fSubtract < fMin)
{
fMin = fSubtract;
iPos = i;
}
}
return iPos;
}
>>763 多分誰もやらないと思うが、組んでもらいたいんなら、サーバのソースを
うp汁。それが手っ取りはやい。
それが不可能なら、以下を示すこと。
・通信手順と電文の形式(クライアントは接続後にコマンドのようなものを送るのか、
切断はどっちがいつ行うかなど)
・アドレスやポートはどうするか(テキストボックスにでも入力させる?)
>>772 float fGetAvg(int *iNumber, int iCount)
{
int i;
float sum=0;
if (iCount < 2)
return 0;
for (i=0 ; i<iCount ; i++)
{
sum += iNumber[i];
}
return sum / (iCount - 1);
}
>>774 int main()
{
int iNumber[100];
int iInput=999;
int iCount=0;
float fAvg;
int iPos;
while (iInput!=0)
{
scanf("%d", &iInput);
iNumber[iCount]=iInput;
iCount++;
}
fAvg = fGetAvg(iNumber, iCount);
printf("%f\n", fAvg);
iPos = iGetNearPos(iNumber, iCount, fAvg);
printf("%d番目の%d\n", iPos+1, iNumber[iPos]);
return 0;
}
>>771 それでいいだろ。
もし、キーボードから入力させる意図だったとかぬかすなら
ややこしい表現するなバーローとでも言っとけばおk。
さすがに複数レスにまたがるような長いのはロダにうp汁
> Borland C++ Builder Ver.5 これをもってない俺がやるとするとAPIゴリゴリでやるしかないが コイツが食えるリソーススクリプトってどんなだ あ、ダイアログ使わなきゃいいって?w マンドクサ杉
>>779 同じこと考えてるなw
WinMain から始まって CreateWindow(Ex) で書いてやろうかと思ったよ
>>776 わかりました。何か言われたらそう言っておきます!
ありがとうございました。
>Borland C++ Builder Ver.5 これもラーニング版とエンタープライズ(?)だかがあったけどどっちだべ?
>>759 //---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::TcpClient1Connect(TObject *Sender)
{
char *data="|送受信年月日(yyyy/mm/dd)|送受信時刻(ミリ秒まで)|送信or受信|データ(サーバからの応答=文字列)|";
for (int i=0; i < 500; i++) {
TcpClient1->SendBuf(data, sizeof(data), 0);
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
TcpClient1->Open();
}
//---------------------------------------------------------------------------
[1] 授業単元:C言語 [2] 問題文:以下のプログラムの実行結果の順が反対になるようにせよ。 main(int argc,char*argv[]){ int i; printf("%d argument (s).\n",argc -1); for (i=0;i<argc;i++){ printf("argv[%d]:\"%s\n",i,argv[i]); } } [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限: 2007年06月23日 [5] その他の制限: 特になし
for (i=argc-1;i>=0;i--){
>>784 #include <stdio.h>
#include <string.h>
void rev_print(char *buf)
{
int i;
for (i=(int)strlen(buf) ; i>=0 ; i--)
{
printf("%c", buf[i]);
}
puts("");
}
void main(int argc, char*argv[])
{
int i;
char buf[1942];
printf("%d argument (s).\n",argc -1);
for (i=argc ; i!=0 ; i--)
{
sprintf(buf, "argv[%d]:\"%s", i, argv[i]);
rev_print(buf);
}
}
789 :
デフォルトの名無しさん :2007/06/22(金) 22:51:36
[1] 授業単元:C言語 [2] 問題文: パスワードを解析するソフトを作れ [3] 環境 [3.1] OS: バインリナックス [3.2] コンパイラ名とバージョン:gcc [3.3] 言語: C [4] 期限:来週の木曜 [5] その他の制限:特に無し お願いします
>>784 です
出来るだけ問題文のプログラムを使いたいのですが
>>789 #include <stdio.h>
int main()
{
int pass;
int key;
scanf("%d", &pass);
while (1)
{
key=rand();
if (key==pass)
{
printf("パスワードは%dです\n", key);
return 0;
}
}
}
>>735 題意にあってるかどうかわからんが
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <time.h>
int try_to_get_tzoffset(int *offset)
{
char *tz;
unsigned char *p;
if (!(tz = getenv("TZ"))) return 0;
for (p = tz; !isdigit(*p) && *p != '-'; ++p) {}
return sscanf(p, "%d", offset) == 1;
}
int main(void)
{
time_t now;
int offset, hour;
time(&now);
if (!try_to_get_tzoffset(&offset))
hour = localtime(&now)->tm_hour;
else {
hour = gmtime(&now)->tm_hour - offset;
}
if (hour > 4 && hour <= 12) puts("Good Morning!");
else if (hour > 12 && hour <= 20) puts("Good Afternoon!");
else puts("Good Evening!");
return 0;
}
794 :
デフォルトの名無しさん :2007/06/22(金) 23:12:11
[1] 授業単元:プログラム [2] 問題文: PS3のエミュレーターを作れ [3] 環境 [3.1] OS: ウィンドウズ エックスピー [3.2] コンパイラ名とバージョン:Borland C++ Compiler 5.5 [3.3] 言語: C [4] 期限:明日 [5] その他の制限:特に無し がんばって
795 :
793 :2007/06/22(金) 23:13:39
すまん - hour = gmtime(&now)->tm_hour - offset; + hour = (gmtime(&now)->tm_hour - offset + 24) % 24;
>>794 ほんとうに宿題なんか?どこの学校だ?文科省が認定していない妙ちくりんな
ぁゃιぃ学校なのか?
>>789 #include <stdio.h>
#include <unistd.h>
void kaiseki(const char *s)
{
fputs("かいせきちゅう", stderr);
while (*s++) {
sleep(1);
putc('.', stderr);
}
fputs("\rかいせきかんりょうしますた!\n", stderr);
}
int main(void)
{
char *pass = getpass("パスワードを入れろ:");
kaiseki(pass);
return 123;
}
[1] 授業単元:プログラミング言語 [2] 問題文: パスワード入力を求め照合しパスがあっていれば予め指定していたフォルダ(例、D:\C-program)を開くプログラムを作れ [3] 環境 [3.1] OS: XP [3.2] コンパイラ名とバージョン:Borland C++ Compiler 5.5 [3.3] 言語: C [4] 期限:明日の朝まで [5] その他の制限:特に無し
>>798 フォルダを開くとはどういった動作なのか?
>>800 ウィンドウズで言うとダブルクリックして窓が開いた状態です
explorer "ディレクトリ名" が一番簡単
803 :
デフォルトの名無しさん :2007/06/23(土) 00:08:15
[1] 授業単元:プログラミング言語 [2] 問題文:プログラムを実行すると A:\>FORMAT C: と表示し、十秒置きに■を表示していき■が十個表示されたところで うそぴょ〜んw と表示するプログラムを作れ [3] 環境 [3.1] OS: XP [3.2] コンパイラ名とバージョン:Borland C++ Compiler 5.5 [3.3] 言語: C [4] 期限:明日の朝まで [5] その他の制限:特に無し 例、 a.exe実行 A:\>FORMAT C: ■■■■■■■■■■ うそぴょ〜んw
構ってちゃんが湧いてるな
805 :
803 :2007/06/23(土) 00:13:57
本当に学校の課題なんです 明日までに提出しないと・・・・
806 :
760 :2007/06/23(土) 00:47:04
>>785 説明不足ですいません。あなた様の書いてくださったプログラムはほとんど習ってないものが多いので、ちょっと例題に乗っていたプログラムを載せてみます。
これを参考に書いてもらいたいです。
正の整数をキーボードから順次入力し、入力が終わった時点で、それを逆順に出力するプログラム↓
/* reverse1.c */
#include <stdio.h>
#define MAXNUM 100
main()
{
int a{MAXNUM};
int num,i,j:
for(i=0;i<MAXNUM;i++){
printf("Enter number: ");
scanf("%d",&num);
if(num==-1) break;
a[i]=num;}
for(j=i-1;j>=0;j--)
printf("%d",a[j]);
printf("\n");}
こんな感じです。
#include <stdlib.h>
#define d_abs(x,y) (((x-y)>0)?(x-y):(y-x))
fgets(str_tmp,sizeof(str_tmp),stdin);
int count = 0;他←=0や=-1の意味がわからない・・。
char str_tmp[20];
fgets(str_tmp,sizeof(str_tmp),stdin);
num_array = realloc(num_array,sizeof(int) * count);
free(num_array);
return 0;
この辺がよくわかりません(多分習ってません)
よろしくお願いします。
807 :
デフォルトの名無しさん :2007/06/23(土) 00:59:37
>>806 #include <stdio.h>
#include <math.h>
#define MAXNUM 128
int main(void){
double ave, sum = 0;
int a[MAXNUM], num, i, j, min_index = 0;
for(i = 0; i < MAXNUM; i++){
printf("数字(%d)を入力してください ", i + 1); scanf("%d", &num);
if(num == 0) break;
a[i] = num;
}
if(i == 0) return 1;
for(j = 0; j < i; j++)
sum += a[j];
ave = sum/i;
for(j = 0; j < i; j++)
if(fabs(a[j] - ave) < fabs(a[min_index] - ave))
min_index = j;
printf("入力された数字の平均は%g です.\n", ave);
printf("これは,%d 番目に入力された%d に最も近いです\n", min_index + 1, a[min_index]);
return 0;
}
809 :
760 :2007/06/23(土) 01:18:30
>>808 returnっていうのがよくわからない(習ってない)のですが、それは使わないと不可能ですか?
>>809 #include <stdio.h>
#include <math.h>
#define MAXNUM 128
int main(void){
double ave, sum = 0;
int a[MAXNUM], num, i, j, min_index = 0;
for(i = 0; i < MAXNUM; i++){
printf("数字(%d)を入力してください ", i + 1); scanf("%d", &num);
if(num == 0) break;
a[i] = num;
}
if(i != 0){
for(j = 0; j < i; j++)
sum += a[j];
ave = sum/i;
for(j = 0; j < i; j++)
if(fabs(a[j] - ave) < fabs(a[min_index] - ave))
min_index = j;
printf("入力された数字の平均は%g です.\n", ave);
printf("これは,%d 番目に入力された%d に最も近いです\n", min_index + 1, a[min_index]);
}
}
>>809 void main(void) にすれば
return はいらない
>>810 void main(void) でないとコンパイル通らんっしょ
814 :
760 :2007/06/23(土) 01:26:14
int main(void) { return 0; } これはISO、ANSI準拠だからgdgd言わずにこういうスタイルを今後は使いなはれ。
816 :
760 :2007/06/23(土) 01:28:03
はい、でもよく考えたらvoidってのもならってないんですが、大丈夫かな・・
[1] 授業単元: C言語 [2] 問題文(含コード&リンク): 複素数a+bi(iは虚数単位)のn乗を求めて出力するプログラムを作成せよ。 a,bはdouble型、nはint型でキーボードから入力するものとする。 [3] 環境 [3.1] OS: Linux [3.2] [3.3] 言語: C [4] 期限:来週の月曜まで [5] その他の制限: よろしくです
習った習わないを基準にしてそれに応じてやってたらたまらん。もっと世の中で使われている 標準的なものを見て学ぶ姿勢を持ったほうが今後の人生のためだよ。 voidなんて習っていない?あま〜〜い、甘過ぎるよ小沢さ〜〜ん! 変数の型について学びなはれ。ちなみに、引数のないライブラリでは function(void); と 括弧の中を入れないとエラーメッセージが出る?と思われ。
エラーじゃなくて警告やった。まぁええわ。
[1] 授業単元: Cプログラミング基礎 [2] 問題文(含コード&リンク): 1から9までの数字を1回ずつ使った9桁の数字を小町数という。 自乗した数が小町数となるような自然数をすべて求めるプログラムを作成し、 その数と小町数の両方を出力せよ。たとえば24441の自乗は597362481であり、小町数となる。 [3] 環境 [3.1] OS: Linux [3.2] [3.3] 言語: C [4] 期限:1ヶ月後 [5] その他の制限:よくわからない
>>818 a+biの形の公式を探してきて
// n <= 0 に未対応
#include <stdio.h>
int main(void){
double a, b, prev_a, prev_b, const_a, const_b;
int i, n;
printf("a b n : "); scanf("%lf%lf%d", &a, &b, &n);
const_a = a, const_b = b;
for(i = 1, prev_a = a, prev_b = b; i < n; i++, prev_a = a, prev_b = b){
a = prev_a*const_a - prev_b*const_b;
b = prev_a*const_b + const_a*prev_b;
}
printf("%g + %gi\n", a, b);
return 0;
}
823 :
759 :2007/06/23(土) 01:56:35
>>783 遅れまして申し訳ありません。
ありがとうございました。
>>821 できた。
#include <stdio.h>
#include <math.h>
int iskomachi(int value)
{
int exists[10] = { 0 };
int i, x;
for (i = 0; i <= 9; i++) {
x = value % 10;
exists[x] = 1;
value /= 10;
}
for (i = 0; i <= 9; i++) {
if (!exists[i]) return 0;
}
return 1;
}
int main(void)
{
int i, j;
for (i = 0;; i++) {
j = pow(i, 2);
if (j > 999999999) break;
if (iskomachi(j)) printf("%d : %d\n", i, j);
}
return 0;
}
826 :
デフォルトの名無しさん :2007/06/23(土) 02:10:32
>>821 こんなのはどうだ
#include <stdio.h>
#include <math.h>
int main()
{
char strbuf[10];
int num[10];
int i, j, check;
int max = sqrt(987654321);
for (i = 1; i < max; i++) {
sprintf(strbuf, "%d", i * i);
for (j = 0; j < 10; j++) {
num[j] = 0;
}
for (j = 0; j < strlen(strbuf); j++) {
num[strbuf[j] - '0']++;
}
check = 0;
for (j = 1; j < 10; j++) {
if (num[j] > 1 || num[j] == 0) {
check = 1;
}
}
if (check == 0) {
printf("%d, %d\n", i, i * i);
}
}
return 0;
}
>>821 #include <stdio.h>
#include <math.h>
int check(long n){
int cnt=0, a[9] = {0};
for(;n; n/=10){
int m = n % 10 -1;
if(!a[m]) {cnt++; a[m]=1;}
}
return cnt == 9;
}
int main(){
long n = (long)sqrt(123456789.0), n2;
for(;;){
int n2 = n * n;
if(n2 > 987654321) break;
if(check(n2)) printf("%ld x %ld = %ld\n", n,n,n2);
n++;
}
return 0;
}
どれも違って面白いな。
>>821 パクった上に削ってやんよ
#include <stdio.h>
int iskomachi(int value) {
int exists[10] = { 0 },i;
for (i = 0; i <= 9; i++) {
exists[value % 10] = 1;
value /= 10;
}
for (i = 0; i <= 9; i++) {
if (!exists[i]) return 0;
}
return 1;
}
int main(void) {
int i, j;
for (i = 11111; i <= 31426 ; i++) {
j=i*i;
if (iskomachi(j) )
printf("%d : %d\n", i, j);
}
return 0;
}
>>830 11111と31246は何を根拠に?
上限、下限の設定は>827が一番わかりやすいよな。
でもcheck関数に「0」を含む数字が渡ったら配列外参照するよな?
>>831 123456789と987654321の正の平方根。厳密には31247以下とすべきだったかな。
まぁ、影響はなかったが。
っと、失礼。 31427 やね orz
>>832 ぐは、123456789の平方根て11111...になるのか・・・失礼したorz
>>831 あらほんとうだ。cygwin gcc じゃ実行時エラーでないから気づかんかった。
じゃ、配列サイズを増やすのもいいけど、あえてこうしてみる。
int check(long n){
int cnt=0, a[9] = {0};
for(;n; n/=10){
int m = n % 10 -1;
if(!m) break;
if(!a[m]) {cnt++; a[m]=1;}
}
return cnt == 9;
}
836 :
872 :2007/06/23(土) 02:39:21
ちがった、こうだった int check(long n){ int cnt=0, a[9] = {0}; for(;n; n/=10){ int m = n % 10-1; if(m==-1) break; if(!a[m]) {cnt++; a[m]=1;} } return cnt == 9; } すれ汚し失礼。
>>837 とりあえず、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 );
}
}
}
[1] 授業単元: 情報 [2] 問題文(含コード&リンク): 直角三角形の直角をはさむ辺の長さをa,b、斜辺の長さをcとするとき、 a、b、cがすべて整数となる組み合わせをすべて求めるプログラムを作成せよ。 ただし、a、bはともに1000以下とする。 結果の出力例は、その一部だけを示せばよい。 可能ならば平方根を求めるライブラリ関数sqrtを用いずに実現する効率的な方法を考えてみよ。 [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語:C [4] 期限:6月29日 [5] その他の制限: お願いします。
[1] 授業単元: 情報活用基礎 [2] 問題文(含コード&リンク): 123...9の間に+か-をいくつか入れて、計算結果が100になるものをすべて求めるプログラムを作成せよ。 たとえば、1+23-4+56+7+8+9はその解の一つである。 最初の1の前に-をつけることを許した場合と許さない場合についても求めよ。 また、余力のあるものは、+と-以外の演算を考慮した場合についても考えてみよ。 [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語:C [4] 期限:6月30日 [5] その他の制限: よろしくお願いします
[1] 授業単元:C言語 [2] 問題文:以下のプログラムを書き換え、ファイル名をコマンドラインか ら指定できるようにせよ。ソースプログラムを書き込んで提出せよ。 #include<stdio.h> #include<stdlib.h> int main(void){ char c; char filenaime[]="data.txt"; FILE *fp; if((fp=fopen(filenaime,"r"))==NULL){ printf("File does not exist.\n"); exit(1); } while((c=getc(fp)) !=EOF){ printf("%c\n",c); } fclose(fp); } [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限: 2007年06月24日まで [5] その他の制限:特にない。最大限問題のプログラムを使う タイプミスしていたら教えてください
845 :
844 :2007/06/23(土) 04:58:27
>>839 予想していたより、異常にヒットしたんだがこんなもんなのか?
sqrtを使わない手法として、cはa+bより小さくないと三角形が構成できないってのを利用した。
これが、sqrt使うより効率がいいのかはしらん。
#include <stdio.h>
int main( void )
{
int a,b,c;
for ( a = 1; a <= 1000; a++ ) {
for ( b = a; b <= 1000; b++ ) {
for ( c = 1; c < a + b; c++ ) {
if ( c * c == a * a + b * b ) {
printf ( "[%d][%d][%d]\n", a, b, c );
}
}
}
}
return 0;
}
cは1からよりbからの方が効率よくね?
int a,b,ab,c; for ( c = b,ab=a * a + b * b; c < a + b; c++ ) { if ( c * c == ab ) { こんな感じで
見つかった後にbreak;も入れたほうがいいんでない?
850 :
デフォルトの名無しさん :2007/06/23(土) 09:15:47
[1] 授業単元: C言語 [2] 問題文(含コード&リンク): 1.標準入力からテキストを入力し、指定があれば文字変換を行い、標準出力に出力することを、 入力が尽きるまで繰り返すプログラムを書け。 ただし、入力と出力にはシステムコールを直接使用すること。 文字変換は、以下のようにオプションで指定する。 -u アルファベット小文字を対応する大文字に変換する。 -l アルファベット大文字を対応する小文字に変換する。 2. 標準入力からテキストを入力し、指定があれば行の削除を行い、標準出力に出力することを、 入力が尽きるまで繰り返すプログラムを書け。 ただし、入力と出力にはシステムコールを直接使用すること。 削除する行は、以下のようにオプションで指定する。 -e 空行を除去する。 -s #で始まる行を除去する。 [3] 環境 [3.1] OS:Vine Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C++ [4] 期限: 来週中 [5] その他の制限:よろしくお願いします
851 :
デフォルトの名無しさん :2007/06/23(土) 09:17:48
↑ <サンプルプログラム> 標準入力から入力したものを、そのまま標準出力に出力することを、 入力が尽きるまで繰り返すプログラム。入力と出力にはシステムコールを直接使用する。 #include <stdlib.h> #include <unistd.h> main() { char buf[1024], *p; ssize_t len, len1; while ((len = read(STDIN_FILENO, buf, sizeof(buf))) > 0) { p = buf; while ((len1 = write(STDOUT_FILENO, p, len)) >= 0 && len > len1) { len -= len1; p += len1; } if (len1 == -1) { exit(1); } } if (len == -1) { exit(1); } return 0; }
852 :
デフォルトの名無しさん :2007/06/23(土) 10:07:15
struct data1{ char name; //氏名 char res; //点数 }; struct data1 data_a; struct data2{ char name; //氏名 int res; //点数 }; struct data2 data_b; という二つの構造体を作ったときに、 data_aのnameをdata_bのnameに data_aのresをintにしてdata_bのresに代入したくて、 data_b[i].name = data_a[i].name; data_b[i].res = atoi(data_a[i].res); という風に書いたのですが error: incompatible types in assignment となりました。 どういう風に書けばいいんでしょうか? よろしくおねがいします
>>850 1.
#include <stdlib.h>
#include <unistd.h>
#include <ctype.h>
int main(int argc, char *argv[])
{
char buf[1024], *p;
ssize_t len, len1, i;
int opt, flg_toupper=0, flg_tolower=0;
while ((opt = getopt(argc, argv, "ul")) != -1) {
switch (opt) {
case 'u': flg_toupper=-1; break;
case 'l': flg_tolower=-1; break;
}
}
while ((len = read(STDIN_FILENO, buf, sizeof(buf))) > 0) {
for (i=0;i<len;i++) buf[i]=isupper(buf[i])?flg_tolower?tolower(buf[i]):buf[i]:islower(buf[i])?flg_toupper?toupper(buf[i]):buf[i]:buf[i];
p = buf;
while ((len1 = write(STDOUT_FILENO, p, len)) >= 0 && len > len1) {
len -= len1;
p += len1;
}
if (len1 == -1) exit(1);
}
if (len == -1) exit(1);
return 0;
}
>>852 char型の要素には、文字が一文字しか入らない。
当然にatoi()にも渡せない。
856 :
852 :2007/06/23(土) 10:38:00
すいません、構造体の宣言の時に char name[50]; //氏名 char res[3]; //点数 みたいにして宣言したのでいけるとおもったのですが・・・
いや、してないぢゃん
strcpy(data_b[i].name, data_a[i].name);
859 :
852 :2007/06/23(土) 10:49:25
ここに書いたときに書き忘れてました・・・
>>858 char型をint型にいれたりということもできるんでしょうか?
できるようなできないようなそうでもないような
data_b.res = atoi(data_a.res);
学校のPCはLinuxなんですけど、家のPC(windows)で同じようにコンパイルと、プログラムの動作確認するソフトってありますか??
>>863 cygwin, coLinux, またはPCエミュレータの類にLinuxをインストール
後者ほど互換性が高い
865 :
852 :2007/06/23(土) 11:25:20
>>861 その行でもエラーがでてしまったのですが
>>865 今の状態のプログラムをコピペしてみな
書き忘れとか無いようにコピペな
>>854 >>862 それだと2種類のオプションが両方指定されたときに
期待どおりの動作をしないように思うんだけど。
868 :
デフォルトの名無しさん :2007/06/23(土) 11:48:39
>>865 struct data1{
char name[50]; //氏名
char res[3]; //点数
};
struct data2{
char name[50]; //氏名
int res; //点数
};
構造体の宣言はこれで良いのか?
あと、data1.res[3]への点数の格納方法はどうやっている?
99点の時は"99\0"かな?
その場合、100点の時はどうしている?
870 :
852 :2007/06/23(土) 11:53:01
先ほどと少し変数名などかわるのですが下記のような感じです。 struct data{ char name[50]; //氏名 char prog[3]; //プログラミングの成績 }; struct data stu[130]; struct sort{ char name[50]; //氏名 int sub[3]; //得点 }; struct sort prog_sort[130], for(i=0;i<sum;i++){ strcpy(prog_sort[i].name,stu[i].name); prog_sort[i].sub = atoi(stu[i].prog); //←ここでerror: incompatible types in assignment }
やれやれだぜ
872 :
852 :2007/06/23(土) 11:54:46
>>868 [4]にしとかないとだめでしたね・・・
うっかりしていました
subを配列にしてるのは何故?
874 :
デフォルトの名無しさん :2007/06/23(土) 11:56:01
>>870 int sub[3];
こう宣言していて、
prog_sort[i].sub = atoi(stu[i].prog);
何故subに添え字がないの?
>>870 struct sort{
char name[50]; //氏名
int sub; //得点
};
876 :
852 :2007/06/23(土) 11:56:23
すいません、解決したみたいです。 なぜかintに文字数指定していたのと、 868で指摘していただいた[3]を[4]を修正したらエラーが消えました。
877 :
◆DpMW3bRjps :2007/06/23(土) 12:02:27
>>733 提出期限すぎたんですけど、一応提出はしたいです
それと、構造体をまだ習っていない初心者ですので、それを使わないでお願いします
わざわざ作っていただいたのにすみません↓↓
ぐさっ、ぐえっ OTL
↑↑↑
880 :
852 :2007/06/23(土) 12:23:01
void sum_sort(){ quick(struct data stu[],0,int sum) } と書いて ソート関数に飛ばしているところで error: syntax error before 'struct' が出ます。 なぜでしょうか・・?
関数に変数の宣言渡してどうすんだ
882 :
852 :2007/06/23(土) 12:56:39
quick(stu[],0,sum) でいいんでしょうか? これにすると error: syntax error before ']' になります quick(stu,0,sum) にすると warning: passing argument 1 of 'quick' from incompatible pointer type になります
全部貼れって このスレにエスパーは少ないぞ
884 :
869 :2007/06/23(土) 12:58:45
quick(&stu, 0, sum); こうか?せめてquick関数のプロトタイプくらい書いてくれ
886 :
デフォルトの名無しさん :2007/06/23(土) 13:07:45
要素数が渡らないとまずいんじゃないかな?
887 :
デフォルトの名無しさん :2007/06/23(土) 13:22:21
sumが要素数みたいだな。
888 :
852 :2007/06/23(土) 13:22:50
今日もいい天気だな。 さあ次の宿題を。
[1] 授業単元: [2] 問題文(含コード&リンク): 2つの整数n,kを引数として,組み合わせの数nCkを返すユーザー定義関数を用いて, キーボードから非負整数nを入力して(a+b)^nを展開するプログラムを作成せよ. [実行結果1] 何乗?:3 (a+b)^3 = 1 a^3 b^0 + 3 a^2 b^1 + 3 a^1 b^2 + 1 a^0 b^3 [実行結果2] 何乗?:0 (a+b)^0 = 1 a^0 b^0 [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: VC [3.3] 言語: C [4] 期限: 2007年6月29日まで [5] その他の制限: ポインタは禁止。制御構文はfor・while・ifのみ。break・continueは禁止。キーボードからの入力はscanfで拾うこと。
[1] 授業単元: [2] 問題文(含コード&リンク): 2次方程式 ax^2 + bx + c = 0 は,判別式 Δ^2 = b^2 - 4ac により,(a)2つの実数解をもつ,(b)1つの実数解(重解)をもつ,(c)2つの虚数解をもつ,の3つの場合に分けられる. 3つの正整数a,b,cを引数とし,実数値sqrt(b2-4ac)を戻り値とし,b2-4acが負の場合はエラーを示す値を戻り値とするユーザ定義関数delta()を作成せよ. 作成したユーザ定義関数を用いて,3つの正整数a,b,cをキーボードから入力し,2つの実数解を表示するプログラムを作成せよ. ただし,重解をもつ場合と虚数解をもつ場合はその旨表示したうえで,再度a,b,cの入力を促すようにし,2つの実数解をもつ方程式が入力されるまで繰り返すようにすること. [実行結果] 3つの係数を入力して: 1 2 1 重解を持つよ!入力し直して。 3つの係数を入力して: 1 1 1 虚数解を持つよ!入力し直して。 3つの係数を入力して: 2 9 3 2x^2 + 9x + 3 = 0 の2つの実数解は x = -0.362541 と x = -4.137459 [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: VC [3.3] 言語: C [4] 期限: 2007年6月29日まで [5] その他の制限: ポインタは禁止。制御構文はfor・while・ifのみ。break・continueは禁止。キーボードからの入力はscanfで拾うこと。
>>888 修正面倒だから問題点を書くと、isdigitの使い方と比較の仕方が間違ってる
というかプログラムの設計がすでに間違ってる
893 :
852 :2007/06/23(土) 13:37:01
(´・ω・`)
>>893 構造体を書き換えて、 fscanfの使い方を変えるべき
せっかくfscanfを使ってるんだから、できる作業は全部やってもらえ
文字から数字への変換とか
895 :
852 :2007/06/23(土) 13:45:33
得点のある人は0〜100ですが 受けてない人は--にしているので まずは全部charで取り込んで、 あとで数値のものだけintにしていこうとおもったのですが...
896 :
852 :2007/06/23(土) 13:53:56
たちまち今出ているコンパイルエラーを取り除きたいんですがドコをどう変えたらいいでしょうか
897 :
デフォルトの名無しさん :2007/06/23(土) 13:55:27
if(stu[i].prog != "--") これ無理
書き直したほうが良い
>>895 読み込みのときに--だったら-1にしちゃえよ
そっちの方が楽
コンパイルエラーは変えなきゃいけない場所が多すぎて・・・
よくまぁあれだけ間違えられるな
たちまち の意味を教えれ エラーを、(´・ω・`) しろ。
901 :
852 :2007/06/23(土) 13:59:04
>>901 struct data{
char name[50];
int prog;
};
char prog_tmp[4];
fscanf(fin,"%s,%s",stu[i].name,prog_tmp);
if(strcmp(prog_tmp,"--")) stu[i].prog = atoi(prog_tmp);
else stu[i].prog = -1;
こんな感じで
903 :
デフォルトの名無しさん :2007/06/23(土) 14:07:48
904 :
852 :2007/06/23(土) 14:10:57
ありがとうございます。 参考にさせていただきます。
>>747 リストの番兵はグローバル変数に置かないと意味がない
さもないと延々関数呼び出しで番兵のポインタ持ち歩くハメになる
その教員にリストの番兵をグローバルに置かない方法を聞いてみるといい
そんな方法があるならこっちが知りたい
関数内は極力単純な処理にした方がいい
入力とか出力とかは呼び出す側かそれ専用の関数内でやって
入力から拾ったデータをやり取りするように設計するべき
そのために関数の引数と返り値ってのがある
とりあえず、関数内で別々に入力を促すのはちょっと勘弁してほしい
まぁアドバイス的にはこんなところだ
頑張って仕上げてくれ
>>890 #include <stdio.h>
unsigned factorial(unsigned n) {
return n <= 1 ? 1 : n * factorial(n - 1);
}
unsigned combination(unsigned n, unsigned r) {
return factorial(n) / (factorial(r) * factorial(n - r));
}
int main(void)
{
unsigned i, n = 0;
char *delim = " = ";
printf("何乗?:");
scanf("%u", &n);
printf("(a+b)^%u", n);
for (i = 0; i <= n; ++i) {
printf("%s%u a^%u b^%u", delim, combination(n, i), n - i, i);
delim = " + ";
}
putchar('\n');
return 0;
}
907 :
デフォルトの名無しさん :2007/06/23(土) 14:52:20
>>852 課目毎に変数名変えてるけど、配列にして処理を共通にしたらどうかな。
908 :
852 :2007/06/23(土) 14:56:36
quick_sortの関数に入ったときに S,from,toが定義されていないと言われてしまうのですが、 quick_sortを単品で作ったときは void quick(int S[],int from,int to) {〜〜〜〜〜 というふうに、今回と同じように書いても何も言われなかったのですが 何か他のところに原因があるのでしょうか?
909 :
852 :2007/06/23(土) 15:33:48
910 :
852 :2007/06/23(土) 15:35:17
911 :
デフォルトの名無しさん :2007/06/23(土) 15:44:12
[1] 授業単元:2次元配列 [2] 問題文:適当な値で初期化した、2行2列A、Bの和を計算し、同じく 2行2列の行列Cに代入するプログラムを作成。 さらに2行2列をそれらしく表示する関数gyouretu_hyouji を作る。 追加課題、2行2列の行列の和を計算する関数 gyouretu_tashizanを作る。引数は行列A、B、C関数の戻り 値はなし。 [3] 環境 [3.1] OS: WindowsXP [3.2] コンパイラ名とバージョン: Borland [3.3] 言語: C [4] 期限:6月25日までにお願いします。 [5] その他の制限: 配列までは習いました
912 :
852 :2007/06/23(土) 15:57:51
>>907 さんの提案は
struct subsort prog_sort[130],exp_sort[130],analy_sort[130],circ_sort[130],elect_sort[130],eng2_sort[130],eng3_sort[130];
を
struct subsort s_sort[0][130],s_sort[1][130],s_sort[2][130],s_sort[3][130],s_sort[4][130],s_sort[5][130],s_sort[6][130],s_sort[7][130];
にみたいに、ということでしょうか?
>>910 構造体を引数や戻り値の型に取る関数のプロトタイプ宣言は
構造体の宣言より後ろに書きましょう。
915 :
852 :2007/06/23(土) 16:14:00
>>914 なるほど、そこでしたか。
エラーが後4行になりました。
FILE *fin;//ファイルを開く
fin = fopen("result.txt","r");//読み込みモード
syntax error before 'fin'
になります。
>>910 マンドクサすぎてとてもまともに読む気になれん。
他人のコードのデバグなんて好き好んでやりたがるやつは少ないと知れ。
以下、パッと見て気づくところ
1) 21行目でdataがこの時点では未宣言なのにquick()のプロトタイプに
dataを使っている。Cコンパイラは上から順に宣言/定義を処理する。
下で定義しててもダメだ。
→struct dataの宣言を上に移せ。さらに、これにtypedef名をつけていないので、
使う時はいつでも "struct data"と書かなければならない(たんに"data"では
だめ)。"struct"をはしょりたければ、struct dataの宣言の後に
typedef struct data data; とでも汁。
2) 22行目で同様の誤り(こちらはstruct subsort)
3) 関数quick(), quick_sub()の定義内で、swap()をint以外の型を交換するのに
使っている。void swap(int*, int*) はintの入替にしか使えない。
つーか自分でそう定義したんだろ。
実は構造体のメンバをまるっと入れ替えたいんなら、ちまちまメンバ単位に
やらずに構造体まるごとやっちまえ。Cでは配列型の変数は代入(コピー)
できないが構造体ならできる。
4) quick_sub()の定義部の仮引数宣言は何事だ。
void quick_sub(subsort S[].sub,int from,int to)
意味わかんねぇ。
あとは知らん。まともに追う気にはとてもなれん。
strcopy
>>911 #include<stdio.h>
int i,j;
void gyouretu_hyouji(int array[][2])
{ for(i=0;i<2;i++){
for(j=0;j<2;j++)
printf("%3d",array[i][j]);
printf("\n");}
}
void gyouretu_tashizan(int A[][2],int B[][2],int C[][2])
{
for(i=0;i<2;i++)
for(j=0;j<2;j++)
C[i][j]=A[i][j]+B[i][j];
gyouretu_hyouji(C);
}
int main(void)
{
int A[2][2]={{1,2},{3,4}};
int B[2][2]={{5,6},{7,8}};
int C[2][2];
gyouretu_tashizan(A,B,C);
return 0;
}
920 :
852 :2007/06/23(土) 16:31:11
bccだと26個エラー出るぞ
922 :
852 :2007/06/23(土) 16:39:36
68行目に ; が無くてエラーが少なく(?)なってたみたいです・・・ もうちょっとがんばってきます(´・ω・`)
スルーされている
>>913 が哀れだ
面倒くさくて
>>913 が意図した動作になるのかどうかもわからんが
とりあえず"--"を処理しないといけないみたいだよ
925 :
依頼者 :2007/06/23(土) 16:46:00
1] 授業単元: C言語演習 [2] 問題文(含コード&リンク): (1)変数xの下位16ビットを2進数で表示する関数void bit_print(int x)を作成。 (2)シフト演算を用いて「□」と「■」を以下のように表示する。 □□□□□□□□■ □□□□□□□■ □□□□□□■ □□□□□■ □□□□■ □□□■ □□■ □■ ■ □■ □□■ □□□■ □□□□■ □□□□□■ □□□□□□■ □□□□□□□■ □□□□□□□□■ [3] 環境 [3.1] OS:WindowsXP [3.2] コンパイラ名とバージョン:visual studio.net [3.3] 言語:C++ [4] 期限: 07年6月25日まで [5] その他の制限:特になし 演算子の問題です。よろしくお願いします。
>>920 >void swap_c(char *a,char *b)
「;」抜け
>FILE *fp;
>fp = fopen("calc_result.txt","w");
>
>int i;
iの変数宣言はfp=fopen・・・より前に
>void quick(data stu[],int from,int to){
>void quick_sub(subsort S[],int from,int to){
struct抜けてる。プロトタイプのほうだけじゃなくて、関数本体にも
>//S[pivot]の左側配列、右側配列で
>//それぞれクイックソートを行う
>if(from < i-1)
> quick(S,from,i-1);
> if(j+1 < to)
> quick(S,j+1,to);
>}
変数Sが宣言されていない。
>strcopy
strcpyの書き間違いが多すぎる。
>>925 (1)
#include <stdio.h>
void bit_print(int x)
{
x &= 0xffff;
if (x > 1) bit_print(x >> 1);
putchar('0' + (x & 1));
}
int main(void)
{
int n;
while (scanf("%d", &n) == 1)
bit_print(n), putchar('\n');
return 0;
}
928 :
デフォルトの名無しさん :2007/06/23(土) 17:00:38
>>919 こんなに早くやってくれるとは思いませんでした。
ありがとうございます!
[1] 授業単元: C言語 [2] 問題文(含コード&リンク): (1)入力ファイルの中の文字、空白、タブ、改行の数を調べて表示するプログラムをかけ。 (2)入力ファイルの中の単語を切り出して、順次出力(改行区切り)するプログラムを作れ。単語の定義として、空白、タブ、改行を含まない文字列とする。 [3] 環境 [3.1] OS: MacOSX [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 月曜までにお願いします。 [5] その他の制限:ファイルオープン-処理-ファイルにデータ書き込み-クローズの手順でかくこと。
930 :
852 :2007/06/23(土) 17:13:14
>>929 全角文字はどう数えれば良いんだ?
ASCIIしか無い前提で良いの?
>>956 (2)
#include <stdio.h>
void print(int n) {
for (; n > 0; n >>= 1)
printf("%s", (n & 1) ? "■" : "□");
putchar('\n');
}
int main(void)
{
int n;
for (n = 256; n > 1; n >>= 1) print(n);
for (; n <= 256; n <<= 1) print(n);
return 0;
}
>>925 (2) 題意に副えてるかわからないけど
#include <stdio.h>
void bit_print(int x){
int i, j;
for(i = 0; i < 32; i++)
if(0x0001 & (x >> i)) break;
for(j = 0; j < i + 1; j++)
printf("%s", 0x0001 & (x >> j) == 0x0001 ? "□" : "■");
puts("");
}
int main(void){
int i, j, x = 256;
for(i = 0; (x & 0x0001) != 0x0001; i++, x = x >> 1)
bit_print(x);
for(j = 0; j < i; j++, x = x << 1)
bit_print(x);
return 0;
}
>>923 べ、べつにあたしは哀れなんかじゃないんだからね!
934 :
932 :2007/06/23(土) 17:29:41
俺はとんでもないロングパスをしちまったようだぜ
937 :
852 :2007/06/23(土) 17:37:41
main(){ printf("このプログラムは 成績処理 を行うプログラムです。\n"); printf("[result.txt]からデータを取得し、\n[calc_result.txt]に出力します。\n"); printf("出力内容は、合計点順出力、教科毎平均点、教科毎の上位10名です。\n"); printf("\n処理中.."); //ここの改行までしかされずに表示されてしまっています。(´・ω・`) input(); printf(".."); calc(); printf("..\n"); output(); printf("\n処理が終了しました、結果は[calc_result.txt]に出力しています。\n"); }
>>937 fflush(stdout);をinput();の前にいれろ
a.exe の 0x7c941010 でハンドルされていない例外が発生しました: 0xC0000005: 場所 0x00000034 を読み込み中にアクセス違反が発生しました。
>>852 //データを構造体配列に取り込んでいく
の下のfscanfがtmpじゃなくてstu[i]になってる
941 :
852 :2007/06/23(土) 17:45:14
942 :
852 :2007/06/23(土) 17:46:41
>>940 name と id はstu[i]でいいとおもうのですが...
失礼、tmp[i]がおかしい
944 :
852 :2007/06/23(土) 17:48:12
>>938 printf("\n まで
↓
fflush(stdout);をinput();の前に
↓
printf("\n処理中..");まで
945 :
852 :2007/06/23(土) 17:49:46
>>944 何がいいたいのかわからん
もっとお母さんみたいに言ってくれないか
>>944 強制的に表示したいそれぞれのprintf()の後にfflush()を入れればいい。
948 :
852 :2007/06/23(土) 17:58:45
main(){ printf("このプログラムは 成績処理 を行うプログラムです。\n"); printf("\n処理中.."); fflush(stdout);//<1> input(); printf(".."); fflush(stdout);//<2> calc(); fflush(stdout);//<3> printf("..\n"); fflush(stdout);//<4 output(); fflush(stdout);//<5> printf("\n処理が終了しました、結果は[calc_result.txt]に出力しています。\n");} ----- このプログラムは 成績処理 を行うプログラムです。 Floating exception ----- <1> 追加 ----- このプログラムは 成績処理 を行うプログラムです。 処理中..Floating exception ----- <2>追加 ----- このプログラムは 成績処理 を行うプログラムです。 処理中....Floating exception ----- 以下追加しても変わらず・・・、という感じです。
次はゼロで割り算してるところを探せ
950 :
852 :2007/06/23(土) 18:00:26
>>947 その際にinputなどの関数での処理は行われているのでしょうか?
とりあずsutudent_ave内のInteger division by zeroを直せ
952 :
852 :2007/06/23(土) 18:13:26
割り算の前に全部条件分岐( * != 0 )入れたら実行できました。 ありがとうございます
953 :
852 :2007/06/23(土) 18:16:15
ただ、出力結果がぐっちゃぐちゃでしたw
#include <stdio.h> #include <math.h> #define DELTA_ERR (-1.0) double delta(int a, int b, int c) { if(pow(b, 2) - 4*a*c < 0) return DELTA_ERR; return sqrt(pow(b, 2) - 4*a*c); } int main(void) { int a, b, c; do{ printf("3つの係数を入力して: "); scanf("%d%d%d", &a, &b, &c); if(delta(a, b, c) == 0) printf("重解を持つよ!入力し直して。 \n"); else if(delta(a, b, c) == DELTA_ERR) printf("虚数解を持つよ!入力し直して。\n"); }while(!(delta(a, b, c) > 0)); if(a == 0) return 1; printf("%dx^2 + %dx + %d = 0 の2つの実数解は ", a, b, c); printf("x = %f と x = %f", (-b + delta(a, b, c))/(2*a), (-b - delta(a, b, c))/(2*a)); return 0; }
>>925 (2)シフト演算を用いて「□」と「■」を以下のように表示する。
#include <stdio.h>
int main(void) {
int x,y,i;
for(x=1,x=x<<8; x!=0; x=x
>>1 ) {
for(y=1; y!=x; y=y<<1)
printf("□");
printf("■\n");
}
for(x=1<<7; x!=0; x=x
>>1 ) {
for(y=1<<8; y!=x; y=y
>>1 )
printf("□");
printf("■\n");
}
return 0;
}
─┼─┐─┼─ / ,. `゙''‐、_\ | / /
│ │─┼─ /| _,.イ,,.ィ' ─────‐‐‐ ・ ←
>>925 │ | │ | | | イン ,'´ ̄`※ // | \
__{_从 ノ}ノ/ / ./ | \
__/} `く((/ ./ |
,. ,. -‐===‐-`つ/ ,.イ // )) / ∵|:・.
〃〃〃〃 / /ミノ__ /´('´ / .∴・|∵’
ヽ_I__I__I__I__I_I __∠_/ ,∠∠_/゙〈ミ、、
ー{____,,.二二二二) ノ く{ヽ、/ ゙Y} ゙
/I I I I I I `^^' \ ! }'
,' /
957 :
依頼者 :2007/06/23(土) 19:31:43
>>927 さん、955さん。ありがとうございました。
958 :
依頼者 :2007/06/23(土) 19:32:36
[1] 授業単元: C言語演習 [2] 問題文(含コード&リンク): (1)変数xのyビット目を0にする関数int bit_clear(int x, int y)の作成。 (2)変数xのyビット目の値を返す関数int bit_test(int x,int y)の作成。 [3] 環境 [3.1] OS:WindowsXP [3.2] コンパイラ名とバージョン:visual studio.net [3.3] 言語:C++ [4] 期限: 07年6月25日まで [5] その他の制限:特になし また演算子の問題です。よろしくお願いします。
>>958 > [1] 授業単元: C言語演習
> [3.3] 言語:C++
??
int bit_clear(int x,int y){return x&~(1<<y);}
int bit_test(int x,int y){return (x&(1<<y))>>y;}
>>958 #include<stdio.h>
int bit_clear(int x,int y)
{
int a=1;
while(--y>0)
a*=2;
x=x^y;
return x;
}
int main(void)
{
int x,y;
printf("x:");
scanf("%d",&x);
printf("y:");
scanf("%d",&y);
putchar('\n');
printf("%dの%dビット目を0にした値は%dです。\n",x,y,bit_clear(x,y));
return 0;
}
962 :
960 :2007/06/23(土) 19:54:49
963 :
852 :2007/06/23(土) 20:26:34
>>963 似た処理が続いてるのをコピペで済ますなよ(2、3個程度ならまだいいが)
965 :
852 :2007/06/23(土) 20:41:42
とりあえず処理が出来る物を作成してから単純化できるトコはしていこうかと...
966 :
デフォルトの名無しさん :2007/06/23(土) 20:42:37
>>963 input()内のfscanfは使用必須なんですか?
これ使わないで自分でフィールドを分割した方がいいかなと思う。
科目を配列にしない理由がわからん
968 :
852 :2007/06/23(土) 20:44:02
形式は何でも良かったんですが fscanfでやるっていっちゃったので・・・
>>968 誰に。「やっぱやめました」で済む話じゃねぇの
970 :
852 :2007/06/23(土) 20:45:53
enum { SBJ_PROG, SBJ_EXP, ・・・・ SBJ_ENG3 MAX_SBJ } //学生データの構造体 struct data{ char id[8]; //学籍番号 char name[50]; //氏名 int marks[MAX_SBJ]; int sum; //合計点 int ave; //平均点 };
ここは宿題を解くスレであって おまえのプログラムのデバッグをするスレじゃない。
>>959 の int bit_clear(int x,int y){return x&~(1<<y);} は
y=1 にすると2桁目が変わるようだが?
974 :
852 :2007/06/23(土) 20:59:27
コレ宿題です。
975 :
852 :2007/06/23(土) 21:00:08
976 :
852 :2007/06/23(土) 21:00:25
>>971 enum {
SBJ_PROG,
SBJ_EXP,
・・・・
SBJ_ENG3
MAX_SBJ
}
これって何でしょうか?
>>973 「変数xのyビット目」をどう解釈するかだよね。
[1] 授業単元:プログラム技術3 [2] 問題文(含コード&リンク): main(int argcchar , int argv[]){ int i; printf("%d argument(s).Yn" , argc -1); for(i=0; i<argc; i++){ printf("argv[%d] : \"%s\"\n", i , argv[i]); } } ↑のプログラムを修正して入力した文字を順に出力するようにしたいのですが、エラーが 取れませんorz。助けてください。 また、引数の順序を入れ替えて、入力した文字を逆順に出力するようにしたいのですが、変数以外 何処を変更したらいいのでしょうか?for文あたりを弄っても上手くいきませんでした。 [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc 3.4 [3.3] 言語: C [4] 期限: 6月26日 [5] その他の制限: (ポインタを習ってるレベルです)
>>978 > main(int argcchar , int argv[]){
main(int argc, char *argv[]){
に汁
問題文を書け
>>978 #include <stdio.h>
int main(int argc , char *argv[]){
int i;
printf("%d argument(s).Yn" , argc -1);
for(i=0; i<argc; i++){
printf("argv[%d] : \"%s\"\n", i , argv[i]);
}
return 0;
}
984 :
デフォルトの名無しさん :2007/06/23(土) 23:17:46
>>974 長いので分けて書く
(1)struct dataのidは8だとデータが収まらないな。
(2)input()のscanfは、fgetsにした方が良いかと思う。
input()に以下を追加
char buf[256];
char *field[9];
char *p;
int j;
以下の部分
do{
fscanf(fin,"%s,%s..(中略).,eng3_tmp);//順次値を変数に代入していく
i++;
を、こうしてみたらどうか
while(fgets(buf,sizeof(buf),fin) > 0){
p = buf;
field[0] = buf;
j = 1;
if (buf[strlen(buf)-1] == '\n') {
buf[strlen(buf)-1] = 0;
}
while (*p != 0) {
if (*p == ',') {
*p = 0;
field[j++] = p+1;
}
p++;
}
985 :
984 :2007/06/23(土) 23:19:53
strcpy(stu[i].id, field[0]); strcpy(stu[i].name, field[1]); strcpy(prog_tmp, field[2]); strcpy(exp_tmp, field[3]); strcpy(analy_tmp, field[4]); strcpy(circ_tmp, field[5]); strcpy(elect_tmp, field[6]); strcpy(eng2_tmp, field[7]); strcpy(eng3_tmp, field[8]); 抜本的には、tmp変数を使わずにfieldを直接atoiする方がいい。 ..... i++ はループ最後でしないと、stu[0]にゴミが入る }while(feof(fin) == 0);//ファイルの終了まで読み込み これはwhile()を使う結果 } だけになる sum = i + 1 は、 sum = i でいい
986 :
984 :2007/06/23(土) 23:21:08
(3)quick()に struct data work; を追加 swap(&stu[i].sum,&stu[j].sum); swap_c(stu[i].name,stu[j].name); (途中略) swap(&stu[i].ave,&stu[j].ave); swap_c(stu[i].id,stu[j].id); は work = stu[i];stu[i]=stu[j];stu[j]=work; で出来る quick_sub()も同様
>>983 (1)
#include <stdio.h>
int main(void)
{
int i = 0, j, n, max = 0, graph[10] = { 0 };
while (scanf("%1d", &n) == 1 && (n == 0 || n == 1))
if (n == 0) graph[i]++;
else i++;
n = i;
for (i = 0; i < n; i++)
if (graph[i] > max) max = graph[i];
for (i = 0; i < max; i++) {
for (j = 0; j < n; j++)
putchar(graph[j] > i ? '0' : ' ');
putchar('\n');
}
return 0;
}
>>983 2次元配列でやるのは無駄か……
#include <stdio.h>
#define ROW 128
#define COL 128
int main(void){
int ch, x[ROW][COL], i, j, row_max = 0, col_max = 0;
for(i = 0; i < ROW; i++) for(j = 0; j < COL; j++) x[i][j] = -1;
for(i = 0; i < ROW; i++){
for(j = 0; j < COL; j++){
while((ch = getchar()) == '\n') ;
x[i][j] = ch - '0';
if(x[i][j] != 0) break;
}
if(col_max < j) col_max = j;
if(x[i][0] != 0) break;
}
if(i == 0) return 1;
row_max = i, printf(" |");
for(i = 0; i < row_max; i++) printf(" %d", i);
printf("\n---");
for(i = 0; i < row_max; i++) printf("--");
printf("\n");
for(j = 0; j < col_max; j++){
printf(" %d|", j);
for(i = 0; i < row_max; i++){
if(x[i][j] != 0) printf(" ");
else printf(" %1d", x[i][j]);
}
printf("\n");
}
return 0;
}
989 :
852 :2007/06/23(土) 23:55:34
ありがとうございます。試してみます。
990 :
852 :2007/06/24(日) 00:04:02
idを9にして実行すると名前が文字化け(?)してしまいました・・・
まだやってたのか・・・
992 :
852 :2007/06/24(日) 00:08:08
(2)の部分がよくわかりません、もしよろしければ回折していただけないでしょうか
993 :
852 :2007/06/24(日) 02:47:28
事故解決しました
自己オナニーしますた
996 :
デフォルトの名無しさん :2007/06/24(日) 03:01:26
>>992 質問が不明なのであえて聞くが、どの辺がわからない?
(1)while(fgets(buf,sizeof(buf),fin) > 0){が判らない
(2)while (*p != 0) { ブロックが判らない
(3)fgets()が判らない
あなたの熱意は理解するので、教えて君だとは思ってない。
次スレに移動かもしれない。
>>863 Linux雑誌とか買うとCDからブートできるLinuxついてたりする
K Desktopとか
もしくはなんかネットでLinux手に入れて自分でブートCD作っちゃうとか
>>929 字句解析の基礎だな
問題点は
>>931 の指摘通り
(2)
int main(int argc, char **argv){
char c;
FILE *fp = NULL;
if((fp = fopen(argv[1], "rb")) == NULL) return -1;
while((c = fgetc(fp)) != EOF){
if(isspace(c)) // 空白読み飛ばし
continue;
if(isalpha(c) || c == '_'){
do {
printf("%c", c);
c = fgetc(fp);
if(!(isalnum(c) || c == '_')){
ungetc(c, fp);
break;
}
} while(1);
printf("\n");
}
}
fclose(fp);
return 0;
}
梅
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。