2 :
デフォルトの名無しさん:2007/12/09(日) 04:00:51
[1] 授業単元:C言語
[2] 問題文(含コード&リンク):0<=x<=π,においてy=sinx+1/3sin3x で囲まれた面積をモンテカルロ法を用いて求めよ。
1.発生させる乱数をキーボードから出力できるようにせよ
2.解析解を求め、その関数を数学関数を用いて計算せよ。
3. 解析解との誤差の絶対値を求めよ。
4.発生させる乱数を10,100個でそれぞれ求めるとする。
5.次の項目をディスプレイに表示できるようにせよ。
a.発生させた乱数の数
b.条件を満たした乱数の数
c.モンテカルロ法によって求めた解
d.解析によって求めた解
e.解析解とモンテカルロ法による解との誤差
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc 2.0
[3.3] 言語: C
[4] 期限: ([2007年12月17日まで]
[5] その他の制限:
おお、 gcc 2.0!
一応本家に行くとソースを入手できますね。
タイムスタンプが 1992/2/22 になってます!
対応する Linux のカーネルは 1992/3 で 0.95 ですね。
しかもキーボードから出力か…とてつもない難題だな。
6 :
デフォルトの名無しさん:2007/12/09(日) 09:28:41
>>2 面積を求める領域が囲まれていないのでわかりません!
文脈的にx=0, x=牌はいいとして、yなんだが、
y=sinx+1とy=3sin3xでいいのかえ?
7 :
◆hbhxTQ.DpY :2007/12/09(日) 09:31:54
(問題)
コマンド選択で,0) 終了,1) 追加,2) 検索(id),3) リスト表示,4) 変更 5) 削除 6) 特殊機能 が行える学生成績管理プログラムを作成する.
データは,学生の番号 名前 GP 総単位数 の形式で学生のデータを持っているファイルとする.
上の機能ルーチンは,全て関数として作成すること.
ただし,追加と検索は実装済みである.
各自で考えたオリジナルの特殊機能を作成すること.
特殊機能の例として
ソート
検索
平均
などがある.
プログラム内部の動作説明を500文字程度で行うこと.
また特殊機能の説明をすること.
一応ここまでは検索までは作れたんですが。。。
次のリストから全然わからないんです、どうか助けてくださいお願いします。
>>7 テンプレ嫁。あと「追加と検索が実装済み」なんだからソース出せ。
9 :
◆hbhxTQ.DpY :2007/12/09(日) 09:47:55
>>8 失礼しました・・・
[1] C言語
[2] (問題)
コマンド選択で,0) 終了,1) 追加,2) 検索(id),3) リスト表示,4) 変更 5) 削除 6) 特殊機能 が行える学生成績管理プログラムを作成する.
データは,学生の番号 名前 GP 総単位数 の形式で学生のデータを持っているファイルとする.
上の機能ルーチンは,全て関数として作成すること.
ただし,追加と検索は実装済みである.
各自で考えたオリジナルの特殊機能を作成すること.
特殊機能の例として ソート 検索 平均
などがある.
プログラム内部の動作説明を500文字程度で行うこと.
また特殊機能の説明をすること.
[3] 環境
[3.1] OS:WindowsXP
[3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
[3.3] 言語: C
[4] 期限: 2007年12月10日中
[5] その他の制限
10 :
◆hbhxTQ.DpY :2007/12/09(日) 09:50:47
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct student{
int id;
char name[25];
int gp;
int credit;
};
void add(char *, struct student);
int search(char *, struct student *);
main(int argc,char *argv[])
{
FILE *fp;
int i = 0;
int num;
struct student students;
if(argc == 1){
printf("set filename\n");
return 1;
}
while(1) {
printf("1)add 2)search 0)quit ");
scanf("%d",&num);
if(num == 0)
break;
if(num == 1) {
printf("id name gp credit ? ");
scanf("%d %s %d %d", &students.id, students.name, &students.gp, &students.credit);
add(argv[1], students);
}
11 :
◆hbhxTQ.DpY :2007/12/09(日) 09:54:20
if(num == 2) {
printf("id ? ");
scanf("%d", &students.id);
if(search(argv[1],&students)){
printf("%d %s %d %d\n", students.id, students.name, students.gp, students.credit);
}else{
printf("ID %d Not Found.\n",students.id);
}}}}
void add(char *filename, struct student students)
{
FILE *fp;
if((fp = fopen(filename, "a")) == NULL){
printf("can't open %s\n", filename);
exit(1);
}
fprintf(fp,"%d %s %d %d\n", students.id, students.name, students.gp, students.credit);
fclose(fp);
}
12 :
◆hbhxTQ.DpY :2007/12/09(日) 09:55:08
int search(char *filename, struct student *students)
{
FILE *fp;
int id;
char name[25];
int gp;
int credit;
if((fp = fopen(filename, "r")) == NULL){
printf("can't open %s\n", filename);
exit(1);
}
while(fscanf(fp,"%d %s %d %d", &id, name, &gp, &credit) != EOF) {
if(id == students->id){
students->id = id;
strcpy(students->name ,name);
students->gp = gp;
students->credit = credit;
return 1;
}}
return 0;
fclose(fp);}
以上が実装済みのプログラムです。よろしくお願いします。
13 :
デフォルトの名無しさん:2007/12/09(日) 12:16:25
2の者です。yの範囲は、0<=y<=1でy=sinx+3分の1sin3xでお願いします。
>>13 それじゃだめだが?x = 2/3πだとどうなる?
まともな宿題かもーん
16 :
デフォルトの名無しさん:2007/12/09(日) 14:06:04
[1] プログラミング演習DS
[2] DQ9の致命的なバグを修正せよ
[3] 環境
[3.1] OS: WindowsXP SP2
[3.2] VC6.0
[3.3] C++
[4] 期限: 今年度中
[5] その他の制限: ハードウェアが貧弱なのでCPU,メモリはあまり使わないで下さい
17 :
2の者です:2007/12/09(日) 14:06:23
x=2/3πでもyの範囲をちゃんと満たしていますが。
y=(sinx)+(1/3sin3x)か。
y=(sinx+1)/(3sin3x)だと思った。
19 :
デフォルトの名無しさん:2007/12/09(日) 14:32:01
[1] 授業単元: プログラミング演習
[2] 問題文(含コード&リンク):()
文字列 S が「(k,l) 繰り返し」であるとは,長さ l の文字列 T があって
S = T T ... T (k 回の繰り返し)となることをいう.
たとえば S = abaabaabaaba は 4 回 aba が繰り返しているので
(4,3) 繰り返しである( (2,6) 繰り返しでもある ).
a と b だけからなる長さ N ≦ 30000 の文字列 S が与えられる.
その中の (k,l) 繰り返しであるような部分文字列の中で,
もっとも k が大きなものを求めよ(k だけ出力すればよい).
例:S = bbabaabaababb のとき 3 文字目から (4,3) 繰り返しが
あり,それより k が大きな繰り返しは無いので, 4 と出力する.
[3] 環境
[3.1] OS: 問わず
[3.2] コンパイラ名とバージョン: 問わず
[3.3] 言語: どちらでも可
[4] 期限: 12月12日
[5] その他の制限: 特になし
23 :
デフォルトの名無しさん:2007/12/09(日) 15:18:42
>>982 前のスレに書きました
これもよろしくお願いします
[1] 授業単元:C言語基礎
[2] 問題文(含コード&リンク):
名前、身長、体重、視力(視力構造体)これらのデータをメンバとする構造体を定義し、入力と表示を行うプログラムを作成してください。
入力件数は最大5件で、名前は19文字までの入力とし、範囲外だったならばエラーメッセージを表示し再入力させてください。
名前に”END”が入力された時は入力終了とします。
表示は身長で昇順にソートして出力してください。
また身長、体重は、小数点以下第一位までの表示とします。視力は、小数点以下第三位までの表示とします。
出力の幅は、名前が19文字分、そのほかは5文字分で指定してください。
視力は右、左をメンバとする構造体で扱ってください。
1件分の入力はinput_data()で、表示はdisplay_data()で、ソートはsort_data()でと処理を関数に分けて行ってください。
名前入力の最初に”END”が入力された場合は、その旨のメッセージを出力してください。
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン:VisualC++2005ExpressEdition
[3.3] 言語:C
[4] 期限:特になし
[5] その他の制限:よろしくお願いします。
25 :
デフォルトの名無しさん:2007/12/09(日) 15:26:56
>>22 Linux上のFirefoxから上げるとデフォルトで.cになる
多分MIMEタイプの違い
29 :
21:2007/12/09(日) 16:24:21
>>21 例が一つ短かったので訂正.bbabaabaabaababb → 4
current_len <= len/2でよさそうな予感
34 :
デフォルトの名無しさん:2007/12/09(日) 18:27:42
指摘されたのを訂正しました。よろしくお願いします。
[1] 授業単元:C言語
[2] 問題文:0<=x<=π,0<=y<=1においてy=(sinx)+(1/3sin3x) で囲まれた面積をモンテカルロ法を用いて求めよ。
1.発生させる乱数をキーボードから出力できるようにせよ
2.解析解を求め、その関数を数学関数を用いて計算せよ。
3. 解析解との誤差の絶対値を求めよ。
4.発生させる乱数を10,100個でそれぞれ求めるとする。
5.次の項目をディスプレイに表示できるようにせよ。
a.発生させた乱数の数
b.条件を満たした乱数の数
c.モンテカルロ法によって求めた解
d.解析によって求めた解
e.解析解とモンテカルロ法による解との誤差
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc 2.0
[3.3] 言語: C
[4] 期限: ([2007年12月17日まで]
[5] その他の制限:
35 :
32:2007/12/09(日) 19:09:08
>>33 それだと繰り返しが0か1かの判別が…………て何言ってんだ俺orz
そうですよね最低1は繰り返しがあるからそれで充分ですよね
依頼者さん直しといて……
>>21は宿題とかじゃなくて、住民暇つぶし用問題じゃなかったのか?
37 :
デフォルトの名無しさん:2007/12/09(日) 20:13:39
[1] 授業単元: c
[2] 問題文(含コード&リンク): 自己参照型構造体(リスト)を使ってキューを実装し、
以下の操作を行った結果取り出された値を画面に出力しなさい。
1 を追加 2 を追加 3 を追加 4 を追加 取り出し 取り出し
5 を追加 6 を追加 7 を追加 取り出し 8 を追加 取り出し
9 を追加 10 を追加 取り出し 取り出し 取り出し 取り出し
取り出し 取り出し(終了)
【ヒント】
作成した構造体型はtypedefを使って
新しいデータ型として定義しなさい。
キューの要素を指すポインタ(qhead、qtail)は
(簡単のため)グローバル変数で用意しなさい。
作成する関数は、初期化、エンキュー、デキューの3種類とする。
デキューの際に取り出された値を画面に出力すること。
[3.1] OS: WindowsXP
[3.2] コンパイラ名とバージョン: VS2005
[3.3] 言語: c
[4] 期限: 12/13まで
[5] その他の制限: マクロはできる限りなしで
38 :
デフォルトの名無しさん:2007/12/09(日) 20:15:40
[1] 授業単元: c
[2] 問題文(含コード&リンク): 配列を使ってリングバッファを実装し、
以下の操作を行った結果取り出された値を画面に出力しなさい。
1 を追加 2 を追加 3 を追加 4 を追加 (*)
取り出し 取り出し 5 を追加 6 を追加 (*)
7 を追加 取り出し 8 を追加 取り出し (*)
9 を追加 10 を追加 取り出し 取り出し (*)
取り出し 取り出し 取り出し 取り出し (*) (終了)
【ヒント】
作成する関数は、初期化、キューの表示、エンキュー、デキューの4種類とする。
デキューの際に取り出された値を画面に出力すること。
また(*)がついた処理の後に、キューの表示を実行すること。
[3.1] OS: WindowsXP
[3.2] コンパイラ名とバージョン: VS2005
[3.3] 言語: c
[4] 期限: 12/13まで
[5] その他の制限: マクロはできる限りなしで
39 :
◆TZgwZqWdYc :2007/12/09(日) 20:21:12
40 :
デフォルトの名無しさん:2007/12/09(日) 20:34:09
[1] 授業単元: アルゴリズム
[2] 問題文(含コード&リンク):ヒープ木を作成、降順でデータを出力 #define MAXSIZE 100;
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc 3.4
[3.3] 言語: C/C++どちらでも可
[4] 期限: 2007年12月09日23:30まで
[5] その他の制限: 特にありません
お願いします
>>40 #include <stdio.h>
#define MAX_SIZE 100
#define swap(x, y) do{x ^= y; y ^= x; x ^= y;}while(0)
void make_heap(int *heap, int top, int last){
if(2*top + 2 > last) ;
else if(2*top + 1 > last && heap[top] > heap[2*top + 1])
swap(heap[top], heap[2*top + 1]);
else if(heap[2*top + 1] <= heap[2*top + 2] && heap[top] > heap[2*top + 1])
swap(heap[top], heap[2*top + 1]);
else if(heap[top] > heap[2*top + 2]) swap(heap[top], heap[2*top + 2]);
}
void heap_sort(int *heap, int n){
int i, j;
for(i = n - 1; i > 0; i--){
for(j = (i - 1)/2; j >= 0; j--) make_heap(heap, j, i);
swap(heap[0], heap[i]);
}
}
void print_ary(int *heap, int n){
int i;
for(i = 0; i < n; i++) printf("%d ", heap[i]);
printf("\n");
}
int main(void){
int heap[MAX_SIZE], i, n = 0;
while(n < MAX_SIZE && scanf("%d", &heap[n]) == 1) n++;
print_ary(heap, n);
heap_sort(heap, n);
print_ary(heap, n);
return 0;
}
42 :
デフォルトの名無しさん:2007/12/10(月) 00:29:31
[1] 授業単元: 情報処理
[2] 問題文(含コード&リンク):RDBの射影、選択、結合を実行するプログラムを作成せよ。
[3] 環境
[3.1] OS: Windows
[3.3] 言語: どちらでも可
[4] 期限: 2007年12月12日
[5] その他の制限:なし
お願いします。
>>38 #include <stdio.h>
#define QSIZE 16
static int queue[QSIZE], top = 0, last = 0;
void init_queue(void){
int i;
for(i = 0; i < QSIZE; i++) queue[i] = -1;
}
void enqueue(int no){if(queue[top] == -1) queue[top] = no, top = (top + 1)%QSIZE;}
int dequeue(void){
int ret;
if(queue[last] == -1) return -1;
ret = queue[last];
queue[last] = -1;
last = (last + 1)%QSIZE;
return ret;
}
void print_queue(void){
int i;
for(i = 1; i <= QSIZE && queue[(top-i+QSIZE)%QSIZE] != -1; i++)
printf("%2d ", queue[(top-i+QSIZE)%QSIZE]);
printf("\n");
}
int main(void){
init_queue();
enqueue(1); enqueue(2); enqueue(3); enqueue(4); print_queue();
dequeue(); dequeue(); enqueue(5); enqueue(6); print_queue();
enqueue(7); dequeue(); enqueue(8); dequeue(); print_queue();
enqueue(9); enqueue(10); dequeue(); dequeue(); print_queue();
dequeue(); dequeue(); dequeue(); dequeue(); print_queue();
return 0;
}
45 :
39:2007/12/10(月) 00:39:45
眠い中感謝です。
ありがとうございます。
48 :
◆RvP8FSkL1Q :2007/12/10(月) 01:02:38
内容:
[1] 授業単元:c++基礎
[2] 問題文
1: 1000以下の素数をかぞえるプログラムを作り
そのプログラムについて実行時間をTIME、timeのそれぞれ方法で測定しなさい。
ただし、TIME、timeの精度はそれぞれ1桁、2桁とする。また、そのプログラムをコンパイルしたコマンドを用い、
サンプルプログラムに手を加えてはいけない。つまり、この評価ではプログラムをメモリに読み込む時間も含まれる。
2つの方法の実行時間を比較し、どちらが早いか答えよ
2:second.exeの応答時間を測定せよ。なお、有効数字は2桁とする
3:起動時間を有効数字2桁まで測定するプログラムを作り、1で作ったプログラムの一部(外側のfor文全体)の起動時間を測定せよ
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C++
[4] 期限:[2007年12月11日23:59まで]
よろしくお願いします
49 :
デフォルトの名無しさん:2007/12/10(月) 07:04:39
50 :
デフォルトの名無しさん:2007/12/10(月) 08:38:37
[1] 授業単元: C++
[2] 問題文:
何個の整数を入力したいか自由に選べる、またその個々の整数も自由に選べる
入力された個々の整数のうち、その最大の整数を見極められる
入力された整数の合計を計算できる
上記のプログラムを最大で5回繰り返す事ができる
例:
何個の整数を入力しますか?: 7個
整数を入力して下さい: 2 5 12 4 1 10 8
最も大きい整数は 12 です。
合計は 42 です。
繰り返しますか?: いいえ
[3] 環境
[3.1] OS: XP
[3.2] コンパイラ名とバージョン: Visual C++
[3.3] 言語: C++
[4] 期限: 早めでお願いします
[5] その他の制限:C言語未習、C++でお願いします
>>50 #include <cstdio>
using namespace std;
int main(){
int c,n,m,s,i,j;
for(i=0; i<5; ++i){
printf("何個入力する?>");
scanf("%d",&c);
for(j=s=m=0; j<c; ++j){
scanf("%*c%d",&n);
if (n>m) m=n;
s+=n;
}
printf("最大の数は%d、合計は%dです!\nもう一回やりますか?(y/n)",m,s);
while((c=getchar())!='y' && c!='n');
if(c=='n') break;
}
return 0;
}
感謝されるとは思わなかった
54 :
デフォルトの名無しさん:2007/12/10(月) 10:43:33
[1]プログラミング入門
[2]正の整数nをキーボードから読み込んで、1からnまでの数の和を、
再帰を使って計算するプログラムをつくりなさい。
ヒント:1からnまでの数の和をS(n)とすると、S(n)=S(n-1)+n
[3.1]windous
[3.3]C
55 :
デフォルトの名無しさん:2007/12/10(月) 10:49:59
34の問題解ける人いませんか?
>>54 #include<stdio.h>
int main(int c,int n){
return c>0?scanf("%d",&n),printf("%d\n",main(0,n)):n+(n==0?0:main(0,n-1));
}
>>34,55
>1.発生させる乱数をキーボードから出力できるようにせよ
意味不明.
59 :
デフォルトの名無しさん:2007/12/10(月) 11:43:46
↑そこはただprintfとscanfを使って表せればいいみたいです。
>>57 こういう場合て最初のcとnには何が入ってるの?
>>34 強引に積分したものが解析解と思ったけど、cosec(0)がやばい。
解析解についてもっと詳しく。
62 :
デフォルトの名無しさん:2007/12/10(月) 13:43:35
(sin3x)/3
なんだろ
そのままだと発散してるし
63 :
デフォルトの名無しさん:2007/12/10(月) 13:46:09
cos(nx)の微分-n sin(nx)だから
(sin3x)/3の積分は-cos(3x)
64 :
デフォルトの名無しさん:2007/12/10(月) 13:54:30
符号間違えたか
65 :
デフォルトの名無しさん:2007/12/10(月) 13:59:04
cos(x)の微分ってどう求めるんだっけ?
極限値求めればいいはずだけど・・・
e(ix) = cos(x) + i sin(x)を使えば
左辺は、i e(ix) だから-sin(x) + i cos(x)と等しい
右辺の微分と比較すれば、cos(x)の微分= -sin(x)
符号は合ってるか
>>34 とりあえず 1 だけやってみた。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <linux/kd.h>
int main(void){
srand(time(NULL));
ioctl(0,KDSETLED,(char)((double)rand()/RAND_MAX*8));
return 0;
}
これ、 X window system 上では動かない。コンソールだけ。
X でやりたい場合は XkbSetDeviceLedInfo という関数を使うようだ。
で、gcc 4.1.3, Linux 2.6.22 でしか試してないので、 gcc 2.0 で動くかど
うか試してみて。
68 :
デフォルトの名無しさん:2007/12/10(月) 15:41:30
[1] 授業単元:プログラム言語2下記
[2] 問題文(含コード&リンク):(下記にかきます)
[3] 環境
[3.1] OS: (/Linux/)
[3.2] コンパイラ名とバージョン: (gcc )
[3.3] 言語: (C)
[4] 期限: ([2007年12月11日17:00まで] )
[5] その他の制限: (Cプリプロセッサ→ファイル操作ぐらいまで)
69 :
デフォルトの名無しさん:2007/12/10(月) 15:43:20
課題 A:以下のプログラムをもとに,標準入力 (キーボード) から2つの品物の原価を受け取り (scanf を用いて整数を int 型の変数に読み込む),
@合計金額に対する消費税の値 A2つの品物の商品価格
を表示するプログラムを作成する.ただし,
* defineを使って消費税を5%と定義する.
* defineを使って消費税を求める関数形式マクロTAXを定義する.
* defineを使って商品価格を求める関数形式マクロPRICEを定義する.
* 以下のプログラムの各行にコメントを付加して,プログラムを完成させること.
#include <stdio.h> /* おまじない */
#include <stdlib.h> /* おまじない */
??????
int main(void)
{
int x,y;
printf("Input an integer x: ");
scanf("%d", &x);
printf("Input an integer y: ");
scanf("%d", &y);
printf("tax of x+y: %d \n", ??????);
printf("price of x+y: %d \n", ??????);
return 0;
}
70 :
デフォルトの名無しさん:2007/12/10(月) 15:44:25
68ー69
どうかよろしくお願いします
71 :
デフォルトの名無しさん:2007/12/10(月) 17:47:44
#include <stdio.h> /* おまじない */
#include <stdlib.h> /* おまじない */
#define MACRO_BAKA 0.05
#define TAX( X ) (int)( (X) * MACRO_BAKA )
#define PRICE( X ) (int)( (X) + TAX( X ) )
/*不用意にマクロ関数を使うような奴はくず*/
int my_tax( int x ){ return x * 0.05 ; }
int my_price( int x ){ return x + my_tax( x ) ; }
int main(void)
{
int x,y;
printf("Input an integer x: ");
scanf("%d", &x);
printf("Input an integer y: ");
scanf("%d", &y);
printf("tax of x+y: %d \n", my_tax( x + y ));
printf("price of x+y: %d \n", my_price( x + y) );
return 0;
}
むやみに関数使うなよ。
オーバヘッド発生して遅くなるしスタックがもったいない。
今時のパソコンでこの程度のオーバーヘッド気にするとか……生きろ
74 :
デフォルトの名無しさん:2007/12/10(月) 19:29:06
>>72 マクロ関数程度ではあんまりないけど、
インライン展開をやたらすると、
コードが肥大化し遅くなるってのはある。
というわけで、あなたが”むやみ”と注釈つけたように、
”不用意に”と書いてあるw
75 :
デフォルトの名無しさん:2007/12/10(月) 19:49:10
76 :
#:2007/12/10(月) 20:36:25
[1] 授業単元: C++
[2] 問題文(含コード&リンク):・sizeという基本クラスを作成する。
・このクラスのメンバ関数として、getsize()関数を、純粋仮想関数として定義する
・図形の1つの寸法をあらわすrを、このクラスのメンバとする。
・sizeクラスを継承した派生クラスとして、circleクラス、sphereクラスを作成する
前者は円の面積を、後者は球の体積を返すように、getsize関数を再定義(オーバーライド)
・動作確認のmain()関数も含めて作成せよ
[3] 環境
[3.1] OS: WindowsXP
[3.2] コンパイラ名とバージョン:Visual Studio 2005
[3.3] 言語:C++
[4] 期限: [無期限]
[5] その他の制限: なし
77 :
デフォルトの名無しさん:2007/12/10(月) 20:50:35
今アルゴリズムのバブルソートの試験勉強をやってるんですが
ちなみにC言語です
#include<stdio.h>
#define N 5
void main(void){
int i,j,data[N]={50,30,10,20,40},tmp,count=0;
printf("整列する前は\n");
for(i=0;i<N;i++)
printf("%d\n",data[i]);
for(i=N-2;i>=0;i--){ なんでここがi=N-2になるのかがわかりません><
for(j=0;j<=i;j=j+1){
if(data[j]>data[j+1]){
tmp=data[j];
data[j]=data[j+1];
data[j+1]=tmp;
count++;
}
}
}
printf("整列した後は\n");
for(i=0;i<N;i++){
printf("%d\n",data[i]);
}
printf("比較回数は%d回です。",count);
}
誰かよろしくお願いします><
>>76 >図形の1つの寸法をあらわすr
これの意味が分からん。
>>77 わからない理由はプログラムをちゃんと追えてないからでしょう。
紙に 50,30,10,20,40 って書いてプログラム通り自分で手作業でやってみれば?
80 :
77:2007/12/10(月) 21:12:18
>>79 すみませんやってみたんですけどなにがなんだか・・・
ifのとこにiが代入されたときiは3になりますよね?
なんで3なんですか?
82 :
77:2007/12/10(月) 21:17:39
20ですよね?
>>82 で、わからないの?「if のとこ」が理解できればわかるはずなのだが
84 :
77:2007/12/10(月) 21:20:52
わかりません><
すみません理解できてないみたいです・・・・
>>84 N-1だったら、どこかで都合悪くなるはず
一行ずつ変数の状態を全て列挙して、流れを追ってみ
横入り失礼。
i が 3 の時、j のループで、j と j + 1 がいくつになるかがわかれば、
わかるんじゃね?
わかりました!みなさんありがとうございました
getsize()が、片方は面積を返して、もう片方は体積を返す。
そんな実装でいいのかああぁぁぁぁぁ!!!
数学屋か物理屋で良い悪いが変わりそうだな。
無名数を取り扱う数学屋だったら、良いって言いそう。
91 :
デフォルトの名無しさん:2007/12/10(月) 23:06:23
[1] 授業単元:プログラム言語2
[2] 問題文(含コード&リンク):
以下のプログラムを完成させて、8×8の迷路を作成し
その迷路を解き、表示させるプログラムにしなさい。
(コメントはヒントである。主にコメントのところを完成
させれば、それなりのものになるはず。)
※つづけてプログラム書かせていただきます。。
[3] 環境
[3.1] OS: (/Linux/)
[3.2] コンパイラ名とバージョン: (gcc )
[3.3] 言語: (C)
[4] 期限: ([2007年12月12日10:30まで] )
[5] その他の制限: なし
92 :
デフォルトの名無しさん:2007/12/10(月) 23:10:43
#include <stdio.h>
#include <stdlib.h>
typedef struct node {
int x;
int y;
struct node *next;
} MyList;
typedef struct rm {
int up;
int down;
int right;
int left;
int mark;
} Room;
93 :
デフォルトの名無しさん:2007/12/10(月) 23:12:49
#define maze_h 8
#define maze_w 8
Room maze[maze_h+1][maze_w+1];
//迷路の開始はmaze[0][0]で目的地はmaze[maze_h-1][maze_w-1]
//0だと通れる 0以外だと壁がある。
void printmaze(){
int i,j;
for(j=0;j<maze_w;j++){printf("+-");}printf("+\n");
for(i=0;i<maze_h;i++){
for(j=0;j<maze_w;j++){
if(maze[i][j].left==0)printf(" ");else printf("|");
if(maze[i][j].mark==0)printf(" ");else printf("@");
}
printf("|\n");
for(j=0;j<maze_w;j++){
if(maze[i][j].down==0)printf("+");else printf("+-");
}
printf("+\n");
}
printf("\n");
}
94 :
デフォルトの名無しさん:2007/12/10(月) 23:13:57
MyList *solveMaze(int cur_x, int cur_y){
MyList *tmp; MyList +tmpr;
maze[cur_x][cur_y].mark=1;
if(cur_x==maze_h-1 && cur\y==maze_w-1){
tmp=(MyList *)malloc(sizeof(MyList));
tmp->x=cur_x; tmp->y=cur\y; tmp->next=NULL;
return tmp;
}
//down
if(maze[cur_x][cur_y].down==0 && maze[cur_x+1][cur_y].mark==0){
tmpr=solveMaze(cur_x+1,cur_y);
if(tmp!=NULL){
tmp=(MyList *)malloc(sizeof(MyList));
tmp->x=cur_x; tmp->y=cur_y; tmp->next=tmpr;
return tmp;
}
}
//right
//up
//left
}
95 :
デフォルトの名無しさん:2007/12/10(月) 23:16:03
int main(){
MyList *result;
//迷路の初期化(呼ぶ関数を作る)
//迷路の生成(呼ぶ関数を作る)
//迷路の表示
printmaze();
//迷路を解く(呼ぶ関数を作る)
result=solveMaze(0,0);
//結果の表示
while(result->next!=NULL){
printf("(%d,%d)",result->x,result->y);
result=result->next;
}
printf("\n");
//経路の表示
printmaze();
}
96 :
デフォルトの名無しさん:2007/12/10(月) 23:18:08
長くなってしまいましたが、改行が多くて
いっぺんに書き込めないようで;;
迷路、ホント困ってます。。
よろしくおねがいします。
長い時はうpろだって
>>1に書いてあるのに・・・
良く読むと便利としか書いてないか。一度に書き込めない場合必須にするべきだな
98 :
デフォルトの名無しさん:2007/12/11(火) 00:19:48
99 :
デフォルトの名無しさん:2007/12/11(火) 01:24:50
[1] 授業単元: C言語
[2] 問題文:時分秒の引き算
a時b分c秒からp時q分r秒までにかかる時間x時間y分z秒を計算させるプログラミングをつくってみましょう。
ただし、はじめの時間が終わりの時間より遅い場合は「正しい時間を入力してください」と表示するエラー処理をいれること。
[3] 環境
[3.1] OS:Windows Vista
[3.2] コンパイラ名とバージョン: visual studio 2005
[3.3] 言語: C
[4] 期限: 2007年12月11日の7時まで(今日の朝まで)
[5] その他の制限: 基礎的なことしか習っていなく、ifの組み方がわかりません。
時間があまりありませんが、よろしくお願いします。
×基礎的なことしか習っていなく
○基礎的なことすら習っていなく
101 :
デフォルトの名無しさん:2007/12/11(火) 01:40:01
>>101 開き直るなら別に宿題提出なんかしなくてもいいんじゃない?
>>99 #define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
//a時b分c秒からp時q分r秒までにかかる時間x時間y分z秒
int main()
{
int a,b,c ,p,q,r ,x,y,z;
printf("はじめの時間を入力\n");
printf("時:");
scanf("%d", &a);
printf("分:");
scanf("%d", &b);
printf("秒:");
scanf("%d", &c);
printf("おわりの時間を入力\n");
printf("時:");
scanf("%d", &p);
printf("分:");
scanf("%d", &q);
printf("秒:");
scanf("%d", &r);
>>103 z=r-c;
if (z<0)
{
z+=60;
q--;
}
y=q-b;
if (y<0)
{
y+=60;
p--;
}
x=p-a;
if (x<0)
{
printf("正しい時間を入力してください\n");
}
else
{
printf("かかる時間%d時間%d分%d秒\n", x, y, z);
}
return 0;
}
>>99 #include <stdio.h>
int a, b, c, p, q, r, x, y, z;
int main(void)
{
start:
printf("はじめの時間を入力してください。(例:23時7分0秒なら「23 7 0」) \n>");
scanf("%d %d %d", &a, &b, &c);
printf("終わりの時間を入力してください。\n>");
scanf("%d %d %d", &p, &q, &r);
if(a > p) goto error;
if(b > q) goto error;
if(c > r) goto error;
z = p*60*60 + q * 60 + r;
z -= a*60*60 + b * 60 + c;
x = z / 60 / 60;
y = z / 60 % 60;
z %= 60;
printf("かかる時間は%d時間%d分%d秒です。\n", x, y, z);
return 0;
error:
printf("正しい時間を入力してください。\n");
goto start;
}
>>99 #include<stdio.h>
int main(){
int a,b,c,d,p,q,r,x,y,z;
int ans;
printf("a時:"); scanf("%d",&a);
printf("b分:"); scanf("%d",&b);
printf("c秒:"); scanf("%d",&c);
printf("p時:"); scanf("%d",&p);
printf("q分:"); scanf("%d",&q);
printf("r秒:"); scanf("%d",&r);
if(0<=a && a<23 && 0<=b && b<60 && 0<=c && c<60
&& 0<=p && p<23 && 0<=q && q<60 && 0<=r && r<60){
ans = (p*60*60 + q*60 + r) - (a*60*60 + b*60 + c);
if( ans > 0 )
{
x = ans/3600;
y = (ans%3600)/60;
z = ans%3600%60;
printf("%d時間%d分%d秒",x,y,z);
return 0;
}
}
printf("正しい時間を入力してください");
return 1;
}
暇人大杉でワロタ
>>105 ワロタ、もう解答されている問題に普通に解答する奴は暇人だが
ひと手間加えて人を笑わせる奴は芸人だ。
109 :
デフォルトの名無しさん:2007/12/11(火) 02:26:06
>>103-
>>106 こんな時間にありがとうございました。
なんとか間に合いそうです><
[1] 授業単元: C言語
[2] 問題文:メインプログラムで同じ大きさの一次元配列a[i],b[i],i=0,1,2,…,n
に適当な値を設定しておき、それぞれのi番目の要素a[i],b[i]についてこれらの
要素のうちの値の小さい方をa[i],大きい方をb[i]へそれぞれ格納する機能を持つ関数
min_maxを実行することによってこの処理を行プログラムを作りなさい。
なお、nの値については、各自で適当に決めなさい。
また、min_maxの引数は、次のようにすることとする。
min_max(int x[],int y[],int n)
or min_max(int *x,int *y,int n)
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン: visual studio 2005
[3.3] 言語: C
[4] 期限: 2007年12月12まで
[5] その他の制限:特に無し
よろしくお願いいたします。
112 :
◆a9AwGV7Ce2 :2007/12/11(火) 03:36:41
[1] 授業単元:プログラミング
[2] 問題文:
フォームとラベルを1つずつ用意し
実行したときに、1から100までの数値を足した結果を
ラベルに表示させるプログラムを、for文を使って作成しなさい。
(1+2+3+…99+100、のように
公式を使わず、ひとつひとつ足していく)
[3] 環境
[3.1] OS: Windows XP
[3.2] コンパイラ名とバージョン: Visual Basic.NET
[3.3] 言語: C
[4] 期限: 2007年12月11日
[5] その他の制限: 特になし
よろしくお願いします。
113 :
◆a9AwGV7Ce2 :2007/12/11(火) 03:38:52
すみません、Visual Basic.NET 2003が抜けていました。
よろしくお願いします
>>115 ピボット選択してませんので、連立方程式によっては運が悪いとバグります。与えられた方程式ならOKですが。
Basic?
>>110 #include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define N 10
void min_max( int x[], int y[], int n ) {
int i ,t;
for ( i = 0; i < n; ++i )
if ( x[ i ] > y [ i ] )
t = x[ i ], x[ i ] = y[ i ], y[ i ] = t;
}
void pa( char *c, int x[], int n ) {
printf( "%s:",c ); for ( i = 0; i < n; ++i ) printf( "%d,", x[ i ] ); puts("");
}
int main( int argc, char ** args ){
int a[ N ], b[ N ], i;
srand( time(NULL) );
for ( i = 0; i < N; ++i ) {
a[ i ] = rand(), b[ i ] = rand() ;
}
pa("a",a, N);
pa("b",b, N);
min_max( a, b, N );
pa("a",a, N);
pa("b",b, N);
return 0;
}
119 :
111:2007/12/11(火) 06:43:58
何故かリンクが切れていたのでもう一度張ります。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5468.txt 中身は次のようになっています
1, 10
2, 15
3, 5
4, 4
5, 3
6, 19
7, 7
8, 1
9, 15
10, 8
11, 3
12, 4
13, 11
14, 2
15, 12
16, 5
17, 2
18, 35
19, 74
20, 26
よろしくお願いします。
>>111 #include <stdio.h>
int isprime(int n){
int i;
if(n < 2) return 0;
if(n == 2) return 1;
if(n%2 == 0) return 0;
for(i = 3; i*i < n; i += 2) if(n%i == 0) return 0;
return 1;
}
int main(int argc, char *argv[]){
FILE *fp;
int a[5] = {0}, label, num, i;
char buf[128];
if(argc < 2) return fprintf(stderr, "usage : %s filename", argv[0]), 1;
if((fp = fopen(argv[1], "r")) == NULL) return perror(argv[1]), 1;
while(fscanf(fp, "%d,%d", &label, &num) == 2)
if(isprime(label)) a[4] += num;
else if(label%5 == 0) a[3] += num;
else if(label%3 == 0) a[2] += num;
else if(label%2 != 0) a[1] += num;
else if(label%2 == 0) a[0] += num;
for(i = 0; i < 5; i++) printf("a[%d] = %d\n", i, a[i]);
return 0;
}
[1] 授業単元:プログラミング演習
[2] 問題文(含コード&リンク):
ファイルに0以上100未満の自然数が20個、改行で区切られて保存されている。
ただし、20個の自然数は全て互いに異なるものとする。負の数が入力されるまで繰り返し整数を入力として受け付けて、
1以上20以下の数が入力された場合には、その数を行数として対応する整数を出力せよ。
それ以外の数が入力された場合には"NONE"と出力せよ。
テストケース
ファイルに保存されている整数:19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
入力:1,20,21,-1と入力された場合
出力:19,0,NONE
[3] 環境
[3.1] OS: (Windows)
[3.2] コンパイラ名とバージョン: (gcc)
[3.3] 言語: (C)
[4]期限:2007年12月11日正午まで
[5]その他の制限:特になし
よろしくお願いします。
124 :
デフォルトの名無しさん:2007/12/11(火) 14:34:49
125 :
デフォルトの名無しさん:2007/12/11(火) 15:32:54
126 :
124:2007/12/11(火) 17:54:57
入力した値まで合計するプログラムについてなのですが、
#include <stdio.h>
void main()
{
int i , goukei;
goukei = 0;
printf("いくつまで合計しますか?");
scanf("%d" ,&goukei);
for(i=1 ; i<=goukei ; i++){
goukei = goukei + i;
}
printf("合計は%d" ,goukei);
}
これでコンパイルして実行しました。
5まで合計したいので5と入力したところ、実行結果が-2147450875となってしまいます。
解決方法を教えて下さい、お願いします。
128 :
デフォルトの名無しさん:2007/12/11(火) 18:06:41
129 :
デフォルトの名無しさん:2007/12/11(火) 18:09:22
>>128 肝心のなにを課題として出されているのか書くの忘れました。。
「以下のプログラムを完成させて、8×8の迷路を作成し
その迷路を解き、表示させるプログラムにしなさい。」
(コメントはヒントである。主にコメントのところを完成
させれば、それなりのものになるはず。)
よろしくお願いします。
>>127 > for(i=1 ; i<=goukei ; i++){
> goukei = goukei + i;
> }
終了条件に使う変数の内容が、ループを重ねる毎に増えていってるから、
最初に入力した回数では終わらない。
>>127 forの中に
printf("%d\n",goukei);
を入れてみると良い
>>127 解決案1 for文を次のように変更する。
for(i=goukei, goukei=0; i!=0; i--){
goukei += i;
}
解決案2 scanf文でgoukeiに値を入力するのをやめる
scanf("%d", &i);
while(i!=0){
goukei += i--;
}
そもそも合計する値の上限と合計した値との意味的な区別がついてないのではないかと背筋が寒くなる
>>130-133 ありがとうございます、できました!
なぜできなかったか理由はわかりませんでしたが、取りあえず提出できます!
またいろいろ調べて理解していきます。
135 :
デフォルトの名無しさん:2007/12/11(火) 19:43:47
137 :
デフォルトの名無しさん:2007/12/11(火) 23:18:15
1] 授業単元:情報科学B
[2] 問題文:(
http://www.clas.kitasato-u.ac.jp/~ogawa/C-kadai.html)
問題4
繰り返しを用いて掛算九九を計算し、次のような表の形で表示するプログラムを作りなさい。
掛算九九
| 1 2 3 4 5 6 7 8 9
-+---------------------------
1| 1 2 3 4 5 6 7 8 9
2| 2 4 6 8 10 12 14 16 18
3| 3 6 9 12 15 18 21 24 27
4| 4 8 12 16 20 24 28 32 36
5| 5 10 15 20 25 30 35 40 45
6| 6 12 18 24 30 36 42 48 54
7| 7 14 21 28 35 42 49 56 63
8| 8 16 24 32 40 48 56 64 72
9| 9 18 27 36 45 54 63 72 81
[3] 環境
[3.1] OS:アップル MAC OS X
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語:C
[4] 期限: 2007年12月13日午前11:30
[5] その他の制限: 特にありません。
>>137 まんまのURL貼ってくる強者がいるなんて
>>138 このスレ多いよw
リンク先に「もう新たに 2ch にこの問題を投稿しないようにして下さい」って書いてあったやつはさすがにフイタけど
>>137 ごまかしごまかし
printf("掛算九九\n");
printf(" | 1 2 3 4 5 6 7 8 9\n");
printf("--+---------------------------\n");
for(int yCnt = 1; yCnt < 10; yCnt++ )
{
printf("%d |", yCnt );
for(int xCnt = 1; xCnt < 10; xCnt++ )
{
int ans = yCnt * xCnt;
if( ans < 10 )
{
printf(" ");
}
printf(" %d", ans );
}
printf( "\n" );
}
141 :
デフォルトの名無しさん:2007/12/12(水) 07:58:18
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):kounyu.txtファイルを読み取り、購入リストから購入のために
支払った総額と、一番費用がかかった品目と、一番重量が重たい品目を得たいというプログラムを作りなさい。
kounyu.txt
品目 重量 単価 個数
りんご 18.5 100 15
みかん 19.2 80 13
メロン 30.2 1200 4
なし 20.5 500 5
ぶどう 25.3 450 9
ファイルを読みこみ、終わらせるところまではできるのですが、その間に作る総額や一番費用がかかった品目、
一番重量が重たい品目をどうやって作ればよいのかが、よくわからないんです。
[3] 環境
[3.1] OS:Vista
[3.2] Borland C++
[3.3] 言語: C言語
[4] 期限: 2007年12月13日 午後13:00
[5] その他の制限: 特にないです。基本的な関数しか習っていませんので
if文、for文、swich文、while文、case文、do文、関数は習っています。
>>141 総額=0
一番重量が重たい品目の重さ=-100
一番費用がかかった品目の金額=-100
ファイルが終るまで以下を繰り返す{
品目、重量、単価、個数を読み込み
金額=単価*個数
総額=総額+金額
もし、金額が一番費用がかかった品目より大きいなら{
一番費用がかかった品目=品目
一番費用がかかった品目の金額=金額
}
もし、重量が一番重量が重たい品目の重さより大きいなら
一番重量が重たい品目=品目
一番重量が重たい品目の重さ=重量
}
}
[1] 授業単元:データ構造とアルゴリズム
[2] 問題文:
http://edu.net.c.dendai.ac.jp/ad/1/2007/kadai.html(課題2の方)
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン:ming
[3.3] 言語:出来ればC++(Cでも構わないです)
[4] 期限:08年1月9日:20時
[5] その他の制限:基礎的な範囲まで
課題2の方をよろしくお願いします。
2chには投稿しないで云々の部分は課題1に対してなので違反ではないと思います。
丸投げですがよろしくお願いします。
ま た で ん だ い か ?
>>110のものですがビルドをしてみたら「'i'定義されていない識別子です。」と
エラーが出てしまうのですがどうしたらいいでしょうか。
>>145 そのまんまだろ.
少しなエラーメッセージ呼んで何とかしようとは思わないのかねぇ
void pa( char *c, int x[], int n ) {
int i; printf( "%s:",c ); for ( i = 0; i < n; ++i ) printf( "%d,", x[ i ] ); puts("");
}
>>146 そういう努力できる奴は、このスレにこないんじゃね?w
Cでも
for (int i = 0; i < n; i++) printf("%d", x[i]);
っていけたっけ?
>>143 文字列の区切りがどう定義されているか分からん。
入力文字列の 0-9A-Za-z は、Za はひとまとまりだが
9A は 9 と A に分かれるらしい。その理屈が分からん。
好きなところを区切りにしてよいなら Za も Z と a に
分けていいはずだが、それは題意に沿っているのか?
150 :
デフォルトの名無しさん:2007/12/12(水) 14:32:57
>>142 教えてもらった文の通りにプログラムを作ったのですが、
もし、金額が一番費用がかかった品目より大きいなら{
一番費用がかかった品目=品目
一番費用がかかった品目の金額=金額
}
もし、重量が一番重量が重たい品目の重さより大きいなら
一番重量が重たい品目=品目
一番重量が重たい品目の重さ=重量
}
のところの一番重量が重たい品目 = 品目と 一番費用がかかった品目=品目
がエラーになってしまってしまうので、どうすればいいのかわからないのです。
>>150 ふーん。俺もそれだけの情報じゃあどうしてやればいいかわからないよ。
153 :
デフォルトの名無しさん:2007/12/12(水) 15:00:54
>>150 すみませんでした。言われてみればそうですね。
下のが、私が作ったソースプログラムです。
#include <stdio.h>
int main(void)
{
FILE *kounyuFile;
char sina[100];
int tanka;
int kosu;
double zyuryo;
int tk;
double zk;
int total = 0;
int maxhiyo = -100;
double maxzyuryo = -100;
char maxzyuryosina;
char maxhiyosina;
154 :
デフォルトの名無しさん:2007/12/12(水) 15:01:54
>>153 続きです。
if((kounyuFile = fopen("kounyu.txt","r")) == NULL)
printf("ファイルをオープンできません。\n");
else{
printf("品目 重量 単価 個数 \n");
while (fscanf(kounyuFile, "%s %lf %d %d", sina, &zyuryo, &tanka, &kosu) == 4){
printf("%-5s %.2f %-5d %-5d\n", sina, zyuryo, tanka, kosu);
tk = tanka * kosu;
total += tk;
zk = zyuryo * kosu;
if(tk > maxhiyo){
maxhiyo = tk;
maxhiyosina = sina;
}
if(zk > maxzyuryo){
maxzyuryo = zk;
maxzyuryosina = sina;
}
}
printf("総額は%d円、一番費用がかかった品目は%s、一番重量が重たい品目はsです。", total, maxhiyosina, maxzyuryosina);
fclose(kounyuFile);
}
return 0;
}
なのですが、
このままでは、エラーになってしまうんです。
155 :
デフォルトの名無しさん:2007/12/12(水) 15:04:51
>>153 続きです。
if((kounyuFile = fopen("kounyu.txt","r")) == NULL)
printf("ファイルをオープンできません。\n");
else{
printf("品目 重量 単価 個数 \n");
while (fscanf(kounyuFile, "%s %lf %d %d", sina, &zyuryo, &tanka, &kosu) == 4){
printf("%-5s %.2f %-5d %-5d\n", sina, zyuryo, tanka, kosu);
tk = tanka * kosu;
total += tk;
zk = zyuryo * kosu;
if(tk > maxhiyo){
maxhiyo = tk;
maxhiyosina = sina;
}
if(zk > maxzyuryo){
maxzyuryo = zk;
maxzyuryosina = sina;
}
}
printf("総額は%d円、一番費用がかかった品目は%s、一番重量が重たい品目はsです。", total, maxhiyosina, maxzyuryosina);
fclose(kounyuFile);
}
return 0;
}
なのですが、
このままでは、エラーになってしまうんです。
>>155 うざいから一一全部貼るな。それ以前に、エラーメッセージを貼れ。
char maxzyuryosina;
↓
char maxzyuryosina[100];
maxzyuryosina = sina;
↓
strcpy(maxzyuryosina, sina);
以下同様に。
ついでにこれも。
- printf("総額は%d円、一番費用がかかった品目は%s、一番重量が重たい品目はsです。", total, maxhiyosina, maxzyuryosina);
+ printf("総額は%d円、一番費用がかかった品目は%s、一番重量が重たい品目は%sです。", total, maxhiyosina, maxzyuryosina);
158 :
デフォルトの名無しさん:2007/12/12(水) 15:13:12
>>156〜157
どうもありがとうございます。<(_ _)>
おかげで、できました。
それとすみません。
次からはそうします。
159 :
デフォルトの名無しさん:2007/12/12(水) 16:18:38
#include <iostream>
#include <new>
#include <fstream>
using namespace std;
ifstream fin;
ofstream fout;
int main(int argc, char *argv[])
{
if(argc != 3)
{
cout << " "<< endl;
return 1;
}
fin.open(argv[1]);
if(!fin){
cout << "" << endl;
}
fout.open(argv[2]);
if(!fout){
cout << "" << endl;
}
int a;
fin >> a;
double (*p)[a][a][a] = new double[a][a][a][a];
p[0][0][0][0] = 4.0;
cout << p[0][0][0][0] << endl;
return 0;
}
160 :
159:2007/12/12(水) 16:21:32
というプログラムなのですがあるマシンでコンパイルするとそのまま通るのですが
もう一方のマシンでコンパイルすると'a' cannot appear in a constant-expression
というエラー文がでてしまいます。
いろいろと調べてみたのですが、結局よくわかりませんでした。
もしわかる方がいらっしゃいましたらどうか教えていただけないでしょうか。
162 :
デフォルトの名無しさん:2007/12/12(水) 16:47:57
[1] 授業単元:C言語
[2] 問題文:課題A「ファイル名を受け取って,ファイルが読み込みモードでオープンできれば1を返し,オープンできなければ0を返す」関数 FileExist を作成する.
コマンドラインから入力されたファイルの存在を,関数 FileExist を利用して確認する.
ファイルが存在すればファイルの中身をそのまま表示するプログラムを完成しなさい
。課題Bコマンドラインからファイル名を受け取って,読取りモードでオープンすることによりそのファイルの存在を確認する.
シークする位置とシークするバイト数を受け取って,その位置の文字のASCIIコード(10 進数)を表示する.
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン:任意
[3.3] 言語:C
[4] 期限:08年12月13日:17時
163 :
デフォルトの名無しさん:2007/12/12(水) 16:49:59
#include <stdio.h>
#include <stdlib.h>
int main(???????)
{FILE *fp;
long pos;
int i,j;
if (???????) {
printf("USAGE: %s \n", ???????);
exit(1);
}
if (???????){
printf("FILE OPEN error: %s \n", ???????);
exit(1);
}else {
printf("Input seek NO. :");
scanf("%ld", &pos);
printf("Input seek BYTES:");
scanf("%d", &j);
for (i=0; i < j; i++){
if (???????){
printf("seek ERROR. ");
exit(1);}
printf("%d byte: %d \n", i, ???????);}
???????
}return 0;}
164 :
デフォルトの名無しさん:2007/12/12(水) 16:52:28
#include <stdio.h>
#include <stdlib.h>
???????
int main(???????)
{FILE *fp;
int ch;
if (???????){
printf("There is no FILE NAME. \n");
exit(1);}
if (???????) {
fp = ???????
while(???????){
putchar(ch);
}???????
}else {
printf("FILE OPEN error. \n");
}return 0;}
???????
{FILE *fp;
if (???????) {
return 0;
}
???????
return 1;
}
165 :
デフォルトの名無しさん:2007/12/12(水) 16:53:19
162です
163が課題B、164が課題Aです
よろしくお願いします
int FIleExit(const char * filePath)
{
if (filePath == NULL) return 0;
FILE * fp = fopen(filePath, "r");
if (fp == NULL) return 0;
fclose(fp);
return 1;
}
>>152 サンプルと一致しているかどうかにかかわらず、好きなタイプのソースです。
次は中央かw
テンプレに学校名を入れてほしい。
172 :
デフォルトの名無しさん:2007/12/12(水) 19:11:50
[1] 授業単元:数値計算プログラム
[2] 問題文:ベアストウ法を用いてx^5 + 4x^4 - 10x^3 - 26x^2 - 11x - 30 = 0 の解を求めるプログラム
[3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン:bcc32[3.3] 言語:C
[4] 期限:07.12.13 [5] その他の制限:特になし
以下のソースを組んだんですがコンパイルはできますがうまく動きません。
#include<stdio.h>
#include<math.h>
int main(){
int N=6;
double p=1,q=1;
double a[6]={1,4,-10,-26,-11,-30};
double b[6],c[6];
double D,dp,dq;
double e=1.0e-10;
double x;
double n,m;
int i;
int flag=0;
173 :
172の続き:2007/12/12(水) 19:14:43
while(flag==0){
for(i=0;i<N;i++){
if(i==0){
b[i]=a[i];
c[i]=b[i];
}
else if(i==1){
b[i]=a[i]-p*b[i-1];
c[i]=b[i]-p*c[i-1];
}
else{
b[i]=a[i]-p*b[i-1]-q*b[i-2];
c[i]=b[i]-p*c[i-1]-q*c[i-2];
}
}
174 :
172の続き:2007/12/12(水) 19:15:35
D=c[N-2]*c[N-2]-c[N-3]*(c[N-1]-b[N-1]);
dp=(b[N-1]*c[N-2]-b[N]*c[N-3])/D;
dq=(b[N]*c[N-2]-b[N-1]*(c[N-1]-b[N-1]))/D;
printf("dp=%f,dq=%f\n",dp,dq);
if(fabs(dq)<e && fabs(dp)<e){
if(p*p-4*q>=0){
x=(-p+sqrt(p*p-4*q))/2;
printf("xの解の一つは%f\n",x);
x=(-p-sqrt(p*p-4*q))/2;
printf("xの解の一つは%f\n",x);
}else{
n=-p/2;
m=sqrt(4*q-p*p)/2;
printf("xの解の一つは%f+%fi\n",n,m);
printf("xの解の一つは%f-%fi\n",n,m);
}
if(N==1 || N==2){
flag=1;
}
for(i=0;i<N-2;i++){
a[i]=b[i];
}
N=N-2;
}
175 :
172の続き:2007/12/12(水) 19:16:10
else{
p=p+dp;
q=q+dq;
}
}if(N==1){
x=-a[1]/a[0];
printf("xの解の一つは%f\n",x);
}
if(N==2){
if(a[1]*a[1]-4*a[0]*a[2]>=0){
x=(-a[1]+sqrt(a[1]*a[1]-4*a[0]*a[2]))/2/a[0];
printf("xの解の一つは%f\n",x);
x=(-p-sqrt(a[1]*a[1]-4*a[0]*a[2]))/2;
printf("xの解の一つは%f\n",x);
}
else{
n=-a[1]/2/a[0];
m=sqrt(fabs(a[1]*a[1]-4*a[0]*a[2]))/2/a[0];
printf("xの解の一つは%f+%fi\n",n,m);
printf("xの解の一つは%f-%fi\n",n,m);
}
}
return 0;
}
176 :
デフォルトの名無しさん:2007/12/12(水) 19:21:58
誰かこの問題の答え教えてください。
お願いします。
課題文
データ数nをキーボードから入力し、続いてそのn個の数値を順番に入力して配列に格納する。
つづいて、これらn値のうちの最大値をみつけて出力するプログラムを作成しなさい。
【出力例】
データ数を入力:5
a[0] = ??? 3
a[1] = ??? 4
a[2] = ??? 6
a[3] = ??? 1
a[4] = ??? 2
5個のデータの最大値 = 6
178 :
デフォルトの名無しさん:2007/12/12(水) 19:46:35
言いかたがざつですいませんでした。
[1] 授業単元:c言語です。
[2] 問題文: 課題文
データ数nをキーボードから入力し、続いてそのn個の数値を順番に入力して配列に格納する。
つづいて、これらn値のうちの最大値をみつけて出力するプログラムを作成しなさい。
【出力例】
データ数を入力:5
a[0] = ??? 3
a[1] = ??? 4
a[2] = ??? 6
a[3] = ??? 1
a[4] = ??? 2
5個のデータの最大値 = 6
です。
[3] 環境
[3.1] OS:Windows
[3.2」 言語:C++でおねがいします。
[4] 期限:08年12月12日:22時までです
[1] 演習レポート
[2] 2から10000の間のすべての素数を列挙するプログラムをつくりなさい。
[3] 環境
[3.1] WindowsXP
[3.2] LSI C-86 ver.330c試食版
[3.3] 言語:C
[4] 期限:2007年12月14日hh:mmまで
[5] その他の制限: 配列まで習いました。
>>179 俺が昨日たまたま作ったプログラムでよければww
/*素数を見つけるエラトステネスの篩のプログラム*/
#include<stdio.h>
#include<math.h>
#define MAX 65535
main(){
unsigned int m,i,j,q,p[MAX];
printf("最大の整数を入力:");
scanf("%d",&m);
for(i=1;i<m;i++) p[i]=0;
p[1]=1;
q=2;
for(j=pow(q,2);j<m;j=j+q) p[j]=1;
q=3;
while(pow(q,2)<=m){
for(j=pow(q,2);j<m;j=j+2*q) p[j]=1;
q += 2;
}
for(i=1;i<m;i++){
if(p[i]==0) printf("%d\n",i);
}
}
ちょっと改良すればおk
181 :
デフォルトの名無しさん:2007/12/12(水) 20:22:37
FFでナーシャ・ジベリが高速飛空挺を実現したファミリーコンピューターのバグと、彼がどのようにそのバグを逆手にとってプログラミングしたのか説明せよ
という宿題が出されたんですが全然分かりません
助けてください
(´・ω・`)
>>180 ありがとうございます!10000までだすのはソフトが限界だったので
100までの素数表示のプログラムにしました。
/* 2〜10000の素数 */
#include <stdio.h>
#include<math.h>
#define MAX 65535
int main(void)
{
unsigned int m=100,i,j,q,p[MAX];
for(i=1;i<m;i++) p[i]=0;
p[1]=1;
q=2;
for(j=pow(q,2);j<m;j=j+q) p[j]=1;
q=3;
while(pow(q,2)<=m){
for(j=pow(q,2);j<m;j=j+2*q) p[j]=1;
q += 2;
}
for(i=1;i<m;i++){
if(p[i]==0) printf("%d\n",i);
}
}
でも処理手順のフローチャートが分かりません・・・
>>181 FFはナーシャがハンドアセンブルして作った作品だから、Cの宿題とは関係ないね。
>>183 コメントが長いけど、まぁこんな感じw
for(i=1;i<m;i++) p[i]=0; /*配列の初期化=フラグを0にしておく.フラグが0の間は素数の可能性がある*/
p[1]=1; /*1は素数じゃないので除外(=配列に格納されてるフラグを1にする)*/
q=2;
for(j=pow(q,2);j<m;j=j+q) p[j]=1; /*p[2]=1,p[4]=1,p[6]=1,....偶数は素数じゃないので除外*/
/*ここからは奇数の中で素数じゃないのを除外するループ*/
q=3;/*1以外で一番小さい奇数3を最初に代入*/
while(pow(q,2)<=m){
for(j=pow(q,2);j<m;j=j+2*q) p[j]=1;
/*p[pow(3,2)=9]=1,p[9+2*3=15]=1,p[15+2*3=21]=1,...と3の倍数で再び奇数となるものだけを除外していく*/
q += 2;/*2加算することにより、次は5,その次は7の倍数を除外...と順に奇数をたどって除外していく*/
}
/*ココからは最終的にフラグが0だった(=素数と判明した)数を出力する*/
for(i=1;i<m;i++){ /*i=2にしておけばp[1]=1;は書かなくておk*/
if(p[i]==0) printf("%d\n",i);
187 :
∂:2007/12/12(水) 21:55:21
188 :
185:2007/12/12(水) 22:02:07
視覚的に分かりやすくするとこんな感じ
初期化した状態
1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,....,90,91,92,93,94,95,96,97,98,99,100
p[1]=1
2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,....,90,91,92,93,94,95,96,97,98,99,100
q=2で最初のfor文を回した後
3,5,7,9,11,13,15,17,19,21,23,25,27,29,....,91,93,95,97,99
q=3でwhile文の中のfor文を回した後
3,5,7,11,13,17,19,23,25,29,....,91,95,97
q=5で(ry
3,5,7,11,13,17,19,23,29,....,91,97
q=7で(ry
3,5,7,11,13,17,19,23,29,....,97
こうしていけばq=9で81が消え、q=11は11^2=121となってwhile文のループ条件を満たさなくなるのでループを抜け出す
ループを抜け出した時点で残ってる数は全部素数
>>178 C++の練習がてらやったのでおかしいとこあるかも
getline(cin,buf);
iss.str(buf);
iss >> n;
if(iss.fail()) iss.clear();
else break;
}
for(int i=0; i<n; ++i){
while(1){
int x;
string buf("");
istringstream iss;
cout << "a[" << i << "] = ";
getline(cin,buf);
iss.str(buf);
iss >> x;
if(iss.fail()) iss.clear();
else {
array.push_back(x);
break;
}}}
cout << n << "個のデータの最大値→" << *max_element(array.begin(),array.end()) << endl;
return 0;}
>>190 ごめん、間違ってた
q=2;
for(j=pow(q,2);j<m;j=j+q) p[j]=1; /*p[2]=1,p[4]=1,p[6]=1,....偶数は素数じゃないので除外*/
は
q=2;
for(j=pow(q,2);j<m;j=j+q) p[j]=1; /*p[4]=1,p[6]=1,p[8]=1,....2以外の偶数は素数じゃないので除外*/
ね
>>169 (c)と(d)もやってみた。
#include <cmath>
#include <iostream>
using namespace std;
double nibun_ho(double(*func)(double), double xl, double xu){
const double epsilon = 10.0e-6; const int N = 100;
int count = 0;
do{
double xm = (xl+xu)/2.0;
double f_xl = (*func)(xl);
double f_xu = (*func)(xu);
double f_xm = (*func)(xm);
if(f_xl * f_xm < 0.0) xu = xm;
if(f_xl * f_xm > 0.0) xl = xm;
count++;}
while(xu-xl >= epsilon*abs(xu) && count!=N);
return xu;}
double f(double x){return x - 1.2 * exp(-x);}
void kadai_c(){cout << "x = " << nibun_ho(f, 0.0, 2.0) << endl;}
double f1(double x){return pow(x, 2.0) - 2.0;}
double f3(double x){return pow(4.0-pow(x, 2), 0.5) - 2 * x;}
int kadai_d(){
cout << "f(x) = x^2 - 2 = 0 [xl = 0, xu = 2] x = " << nibun_ho(f1, 0.0, 2.0) << endl;
cout << "f(x) = x^2 - 2 = 0 [xl = -2, xu = 0] x = " << nibun_ho(f1, -2.0, 0.0) << endl;
cout << "f(x) = (4-x^2)^0.5 - 2 * x = 0 [xl = 0, xu = 2] x = " << nibun_ho(f3, 0.0, 2.0) << endl;
return 0;}
int main(){
cout << "課題(c)" << endl; kadai_c();
cout << "課題(d)" << endl; kadai_d();
return 0;}
195 :
189:2007/12/12(水) 23:45:20
すまん、何か改行制限に引っかからないと思ったらコピペミスで最初の方が切れてるな
もう今日はパソつけないのでまた明日
もしくは誰か任せた
>>195 任された。
>>178 #include<iostream>
int main(){
int *a,n,max;
std::cout << "データ数を入力:";
std::cin >> n;
a = new int[n];
max=0;
for(int i=0; i<n; i++){
std::cout << "a[" << i << "]=";
std::cin >> a[i] ;
if( a[i] > a[max] ){
max = i;
}
}
std::cout << n << "個のデータの最大値 =" << a[max] << std::endl;
delete [] a;
return 0;
}
197 :
デフォルトの名無しさん:2007/12/13(木) 09:11:19
何が違うのか書いた方が親切じゃね?
199 :
デフォルトの名無しさん:2007/12/13(木) 09:38:56
202 :
お願いします:2007/12/13(木) 12:32:27
文字列aの中にMarikoという綴りが含まれているかどうかを調べ、
もしあればあった、なければなかったと表示するプログラムを作ってみましょう。
お願いします。
宿題かもぉん
>>202 >文字列aの中にMarikoという綴りが含まれているかどうかを調べ、
>もしあればあった、なければなかったと表示するプログラム
こんな感じでおk?
#include <stdio.h>
#include <string.h>
int main(){
char *str = "a" , *find = "Mariko";
if(strstr(str,find) != NULL) puts("あった");
else puts("なかった");
return 0;
}
宿題かもぉおおおん
@示された数字をある数で割る。
示される数字が
160〜319・・・2で割る
320〜479・・・3で割る
480〜639・・・4で割る
640〜799・・・5で割る
800〜959・・・6で割る
960〜 ・・・解なし
A割って出た解の小数点以下を四捨五入
例 123.56→124
B出た数字に1〜(割った数−1)までをかけてそれぞれ解を出す
124×1=
124×2=
・
・
・
124×(n−1)= (n=最初に割った数)
解を順番に書く。
宿題ではないので無期限
その他の条件もなし
暇な人がいたらやってみては?
>>206 手抜きなんでscanf
#include <stdio.h>
int main(){
int x,n,i;
scanf("%d",&x);
if(x<160 || x>=960) return 1;
n = x/160 + 1;
printf("%d / %d ≒ ",x,n);
x = (int)((double)x/n + 0.5);
printf("%d\n",x);
for(i=1; i<n; ++i) printf("%d * %d = %d\n",x,i,x*i);
return 0;
}
[1] 演習レポート
[2] 西暦1900年から西暦2020年の間のうるう年をすべて表示するプログラム
[3] 環境
[3.1] WindowsXP
[3.2] LSI C-86 ver.330c試食版
[3.3] 言語:C
[4] 期限:2007年12月16日まで
[5] その他の制限: 配列まで。
どうしても思いつかないのでよろしくお願いします。
#include <stdio.h>
int main(void)
{
int i;
for(i=1904; i<=2020; i+=4) printf("%d\n", i);
return 0;
}
>>210 待て、100年に1度は閏年じゃないけど、400年に1度は閏年なんだぞw
for (i = 1904; i <= 2020; i += 4){
if (i % 100 == 0 && i % 400 != 0){
continue;
}
printf("%d\n", i);
}
お前は何を言ってるんだ
(´・ω・`)問題の範囲じゃ100&400は含まないんだった
任意の範囲で閏年を抽出、だと>211じゃないとうまくいかない場合があるけど、
今回の課題は1900〜2020だから手を抜いて
>>210でもOK。
汎用性か特化(して計算量や実装コストを減らす)か。
の質問者ですが、
なぜ#define MAX 65535
とおいたのかと、その説明お願いします。
大学ではまだdefine文は習ってないので、いろんなサイトを見てみましたが
理解できませんでした・・・
自分的にはMAXを65535とおくっていう意味だと思うんですが・・・
>>221ミス
>>183の質問者ですが、
なぜ#define MAX 65535
とおいたのかと、その説明お願いします。
大学ではまだdefine文は習ってないので、いろんなサイトを見てみましたが
理解できませんでした・・・
自分的にはMAXを65535とおくっていう意味だと思うんですが・・・
MAXを65535に置換する
>>223 ありがとうございます。
ですが、なぜ65535なんでしょうか?
質問ばかりですみません
225 :
デフォルトの名無しさん:2007/12/13(木) 23:30:23
>>224 昨日プログラムを載せた者です
#defineの意味は
>>223が書いてるように
「このプログラムの中ではMAXっていう文字列は65535って文字列と同じ意味です!」
っていう宣言をしてるわけ
で、何で65535かというとunsigned int型で表現できる数値の範囲が0-65535だから
…まぁ、それだけの理由ですw
>>226 > unsigned int型で表現できる数値の範囲が0-65535だから
どんな環境ですか?
そういえば配列の要素数の最大値って決まってるの?
>>226 ありがとうございます。
しかし参考書には
unsigned int 0〜4294967259
unsigned short int 0〜65535
となってます。てことはunsigned short int でも無理なく
起動できるってことですか?
一応自分では無事に起動できると確認しました。
231 :
229:2007/12/14(金) 00:09:07
>>230 すまん!
何をとち狂ってたか今の今まで16bit環境のことだと気付かず書いてたwはずかしいorz
>>228 32bit環境(現在一般的に普及してる環境)だとunsigned int型は0-4294967259であってるよ
今回の課題は元々10000までの素数を出力するプログラムだったからMAX 10000でおk
>>232 MAX 10000
でやると実行結果がでないで止まってしまいました・・・
>>229 C++なのにCでやっちまったぜ
#include<stdio.h>
int kind[]={10000, 5000, 1000, 500, 100, 50, 10, 5, 1};
void print_value(unsigned long value){
int i;
printf("%6lu:", value);
for(i=0;i<sizeof(kind)/sizeof(kind[0]);i++){
printf(" %5lu", value/kind[i]);
value%=kind[i];
}
printf("\n");
}
unsigned long leul2host(unsigned long value){
unsigned long i, ret=0UL;
unsigned char *p;
p=(unsigned char *)&value;
for(i=0;i<4;i++) ret=(ret<<8)|p[3-i];
return ret;
}
int main(void){
FILE *fp;
unsigned long value;
fp=fopen("kyuuyo.dat", "rb");
if(fp==NULL) return 1;
printf("額/種 10000 5000 1000 500 100 50 10 5 1\n");
while(fread(&value, sizeof(value), 1, fp)==1){
value=leul2host(value);
print_value(value);
}
fclose(fp);
return 0;
}
236 :
カルマン:2007/12/14(金) 07:01:30
480×720の動画で、カメラ固定の状態でボールを左上から右下に向かって投げます。
このボールを背景差分で検出し、カルマンフィルタを用いて軌道を追跡してください。
動画はサンプリングタイムでBMP形式になっており、ボールの移っているフレームは10〜18の9枚です。
カルマンフィルタの部分が分かる方教えてください。状態変数はX=「ボールの位置(x軸)、速さ(x軸)、ボールの位置(y軸)、速さ(y軸)」^(転置)
>>236 >1
>カルマンフィルタの部分が分かる方教えてください。
ついでに、カルマンフィルタとは何なのか説明してくれ。
238 :
デフォルトの名無しさん:2007/12/14(金) 11:57:22
[1] 授業単元: C言語
[2] 問題文(含コード&リンク):変数xは0から1までの0.01刻みの値(101個)をとるものとする。
この時2次関数f(x)=3x2+2x+1の値が2.0<f(x)<3.0となるxの値の個数を求めるプログラムを作成せよ。
ただしxを引数としf(x)の値を返す関数を作成しそれを使用せよ。
[3] 環境
[3.1] OS: Windows vista
[3.2] コンパイラ名とバージョン: CPad for Borland C++ Compiler 2.31
[3.3] 言語:C++
[4] 期限: 2007年12月14日12:00まで
[5] その他の制限: 特にありません
//
>>238 // 単元はC言語なのに言語指定はC++かよ!
static double f(double x)
{
return 3 * x * x + 2 * x + 1;
}
int main()
{
int sum = 0;
for (int ic = 0; ic < 1 * 100; ++ic) {
double y = f(ic / 100.0);
if (2 < y && y < 3) ++count;
}
// 個数はcount。求めたから後は好きにしろ
return 0;
}
240 :
デフォルトの名無しさん:2007/12/14(金) 12:08:50
242 :
デフォルトの名無しさん:2007/12/14(金) 14:13:15
[1]授業単元
[2]問題文
1から10までの数をランダムに100回(1000回)発生させ、その発生した数の(1回毎の)平均値を
示すプログラムを教えてほしいです。 ※100回と1000回 両方試行。
さらに、そのコンパイル結果をコピーしてエクセルでグラフに表せるようにしたいです。
243 :
デフォルトの名無しさん:2007/12/14(金) 14:14:46
>>242 100回(1000回)の平均を出す試行を一回だけでいいの?
一回でグラフも何も無い気がするけど
乱数の平均が収束していく様子をグラフにしたいとか?
それだと範囲が1〜10だし、イマイチか。
コピーしてExcelに流したいなら、テキストにリダイレクトしてコピペすりゃ済むんじゃなかろうか。
まあcsvにでも出力すりゃよかろう
>>242 >>245-246の感じでやってみた
Excelでグラフ確認
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define MAX 10
#define N 1000
#define OUTFILE "result.csv"
int main(){
int r,sum,i;
FILE *fp;
srand(time(NULL));
if((fp=fopen(OUTFILE,"w")) == NULL){return 1;}
fprintf(fp,"回数,平均\n");
for(i=0,sum=0; i<N; ++i){
sum += rand()/(RAND_MAX+1.0)*MAX + 1;
// sum += rand() % MAX + 1;
fprintf(fp,"%d,%f\n",i+1,(double)sum/(i+1));
}
fclose(fp);
return 0;
}
あ、変数rを使ってないから消しておいて
251 :
いときん:2007/12/14(金) 20:45:58
[1] 授業単元:オペテーティングシステム
[2] 問題文:
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5515.txt [3] 環境
[3.1] OS:マック
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C
[4] 期限:12月17日11時
[5] その他の制限:
コンパイル時に次のような警告が出る。
warning: incompatible implicit declaration of built-in function 'exit'
ファイルが開けなかった場合や、mallocに失敗した場合などに、
exit(1);で強制終了するようにしたのだが、exit(1);1つずつに対しこの警告が出る。
警告文の意味がよく分からず、対処することができなかった。
ただ、エラーではないためコンパイルは可能で、
テストの結果からは、プログラムは問題なく動作すると考えられる。
のですが、このエラーの訂正をお願いします。
そして、ほかに改良できそうな部分があれば、そこもおねがいします。
重複投稿になってしまいましたが、よろしくおねがい致します。
252 :
いときん:2007/12/14(金) 20:48:21
[1] 授業単:C言語基礎
[2] 問題文:ビットストリーム
(a)
char型の配列を与えられたとき、配列の中身を連結された1本のビット列と見なして、
先頭から7bitづつ切り出したchar型数値の配列へのポインタを返す関数を作成せよ。
なお、与えられる配列の長さは、必ず7の倍数であるとする。
例:
↓これを与えると
unsigned char a[] = {0xff, 0xcc, 0xaa, 0x88, 0x44, 0x22, 0x11};
↓これが帰ってくる
unsigned char b[] = {0x7f, 0x73, 0x15, 0x28, 0x42, 0x10, 0x44, 0x11};
(b)
(a)で作成した関数を、切り出すビット数の単位(1〜8)が指定できるように改造しなさい。
[3] 環境
[3.1] OS:ウィーンドウズ
[3.2] コンパイラ名とバージョン:VC++8.0
[3.3] 言語:C(C++は不可)
[4] 期限:12月15日朝8時まで
[5] その他の制限:特になし
ウィーンドウズ
>>254 #include <stdio.h>
char* getBitStream(char *dest, char *src, int size, int bit)
{
char *d=dest,*s=src;
int sb=7,db;
if(s==NULL||d==NULL||size<1||bit<1||bit>8)return NULL;
*d=0;db=--bit;
while(s<src+size){
*d|=(*s>>sb--&1)<<db--;
if(sb<0){++s;sb=7;}
if(db<0){*(++d)=0;db=bit;}
}
return dest;
}
int main()
{
int i;
unsigned char a[] = {0xff, 0xcc, 0xaa, 0x88, 0x44, 0x22, 0x11};
unsigned char b[8];
getBitStream(b,a,sizeof(a),7);
for(i=0;i<sizeof(b);i++)
printf("0x%x ",b[i]);
return 0;
}
257 :
デフォルトの名無しさん:2007/12/14(金) 23:58:38
>>253 回答ありがとうございます。
しかし、すみません。
もうすこし細かく教えてもらっていいでしょうか。
頭がこんがらがってしまって、、
>>254 これバグ見つけるのが激しくダルい(捨て台詞)
docをダウンロードさせるのかよw
261 :
デフォルトの名無しさん:2007/12/15(土) 09:10:51
251です。
解決しました。
ありがとうございました。
262 :
デフォルトの名無しさん:2007/12/15(土) 12:17:30
264 :
デフォルトの名無しさん:2007/12/15(土) 13:27:48
265 :
デフォルトの名無しさん:2007/12/15(土) 14:50:53
[1] 授業単元:プログラミング
[2] 問題文:n個の数データをキーボードから入力し、最大値と最小値を求めるプログラムを作成しなさい
[3.1] WindowsXP
[3.2] コンパイラ名とバージョン: fujitu workbench v4.0L10
[3.3] 言語: C C++
[4] 期限: 12/21
[5] その他の制限:な
>>265 #include <stdio.h>
#include <limits.h>
int main()
{
int i, n, num, max, min;
max=INT_MIN;
min=INT_MAX;
scanf("%d", &n);
for (i=0 ; i<n ; i++)
{
scanf("%d", &num);
if (num>max)
max=num;
if (num<min)
min=num;
}
printf("max %d\nmin %d\n", max, min);
return 0;
}
267 :
259:2007/12/15(土) 15:14:49
>>260 すいません、数式が2chだと書けなくてWordになっちゃいましたorz
268 :
265:2007/12/15(土) 15:19:49
[1] 授業単元:コンピュータプログラミング
[2] 問題文:n個の数データをキーボードから入力し、最大値と最小値を求めるプログラムを作成しなさい 。
貯金の合計金額は?を計算するプログラムを作成しなさい。ただし、利子は考えないものとする。
[3] 環境
[3.1] OS: XP
[3.2] コンパイラ名とバージョン:Fujitsu Fortran & C
[3.3] 言語: C
[4] 期限: 12/15
[5] その他の制限: なし
すみません訂正しましたのでよろしくお願いします。
>>268 イミフ訂正じゃなく問題が2つ在るならちゃんと書け
>>268 #include <stdio.h>
#include <limits.h>
int main()
{
int i, n, num, max, min, sum;
max=INT_MIN;
min=INT_MAX;
sum=0;
scanf("%d", &n);
for (i=0 ; i<n ; i++)
{
scanf("%d", &num);
sum+=num;
if (num>max)
max=num;
if (num<min)
min=num;
}
printf("max %d\nmin %d\nsum %d\n", max, min, sum);
return 0;
}
271 :
259:2007/12/15(土) 15:31:26
[1] 授業単元: 画像処理
[2] 問題文(含コード&リンク):(2次元離散コサイン変換(DCT)と逆行列は次式で計算する。
今入力画像の1部(8×8領域)の二次元配列
im[m][n],(m,n=0,1,2...7)が与えられた時、2次元DCTのプログラムを書け
DCT(k,l)=ΣΣim(i)(j)Φk(i)Φl(j) 逆変換 out_im(i,j) = ΣΣDCT(k,l)Φk(i)Φl(j)
また
Φk(0)=1/sqrt(N)
Φk(i)=2/sqrt(N)*cos((2i+1)kπ/2N) Φl(0)=1/sqrt(N)
Φl(j)=2/sqrt(N)*cos((2j+1)kπ/2N)
(i = 1…N-1) (j = 1...N-1)
である
[3] 環境
[3.1] OS: Linux
[3.2] gcc 3.4
[3.3] 言語: C
[4] 期限: 2007年12月17日
[5] その他の制限: N = 8として
for(v=0; v<n;v++)とする
この画像を変換する
unsigned char im[8][8] = {{1,1,0,0,0,0,1,1}
{1,0,0,0,0,1,1,1}
{0,0,0,0,1,1,1,0}
{0,0,0,1,1,1,0,0}
{0,0,1,1,1,0,0,0}
{0,1,1,1,0,0,0,0}
{1,1,1,0,0,0,0,1}
{1,1,0,0,0,0,1,1}};
修正しました、後は制限無しですよろしくお願いします。
272 :
265:2007/12/15(土) 15:56:00
[1] 授業単元:コンピュータプログラミング
[2] 問題文:n個の数データをキーボードから入力し、最大値と最小値を求めるプログラムを作成しなさい 。
ただし最後にctrl+zで終わるようにする。
[3] 環境
[3.1] OS: XP
[3.2] コンパイラ名とバージョン:Fujitsu Fortran & C
[3.3] 言語: C
[4] 期限: 12/15
[5] その他の制限: なし
何度もすみません。コピペしたのが残ってしまいました。再度訂正しましたのでよろしくお願いします。
>>266 >>270 ありがとうございます。参考にさせていただきます。
>>272 #include <stdio.h>
#include <limits.h>
int main()
{
int i, n, num, max, min;
max=INT_MIN;
min=INT_MAX;
scanf("%d", &n);
for (i=0 ; i<n ; i++)
{
if (scanf("%d", &num) == EOF)
break;
if (num>max)
max=num;
if (num<min)
min=num;
}
printf("max %d\nmin %d\n", max, min);
return 0;
}
277 :
デフォルトの名無しさん:2007/12/15(土) 21:22:15
278 :
デフォルトの名無しさん:2007/12/15(土) 22:47:38
279 :
278:2007/12/15(土) 22:53:52
期限の指定を16日のPM12:00まででお願いします。
>>278 リンク先もレスも見たがどこにも問題文らしきものがない
282 :
278:2007/12/16(日) 00:22:42
283 :
278:2007/12/16(日) 01:04:36
それと時間の表記ですが16日のPM12:00=昼まででということで。
C言語には滅法弱く相当悩んでるので宜しくお願いします。
284 :
デフォルトの名無しさん:2007/12/16(日) 04:57:41
それはAM12:00だろ……
ていうか迷路の見方がわからん。
ごくたまーに、そういうところ、
午前11時の次が午後12時、で、午後1時、午後2時となるところが
あったりして、帳票を作ったりするときに、困るんだな。
みんな、「おかしいよな」って思ってるらしいのだが、もう数10年それで
やってきてるもんで、いまさら変えられないとか。
AM, PM制で12時って表現が理解できないんだよなあ。
お昼はPM0時派だな。
287 :
229:2007/12/16(日) 07:31:18
>>235 遅くなりましたが、ありがとうございます。
c++でも問題なく動きました。
>276
p2とp3の点の座標が重複してるけどそれで良いのか?
290 :
275:2007/12/16(日) 12:41:57
>>289 >>275です。本当、有難うございます。感謝です。
無事に動作しました。
Q2、Q3に関してなのですが、x^n=1の「n」の値を変更するためには
nの数だけ複素数を宣言しないといけないのでしょうか?
可能ならば…キーボードからnの値を入力すれば、Q2、Q3が出来るようにして頂きたいのですが。。。
せっかくやって頂いたのに、図々しく申し訳ありません。自分では書き換える力がないもので。
291 :
278:2007/12/16(日) 12:50:50
292 :
259:2007/12/16(日) 13:14:03
>>292 行番号でてるんだから、そこを見ようぜ
if(i = 0) {
294 :
259:2007/12/16(日) 13:27:59
自己解決しました
295 :
278:2007/12/16(日) 13:38:11
レポートを書きたいだけなので、そのプログラムの概要だけ教えて頂けますか?
296 :
デフォルトの名無しさん:2007/12/16(日) 14:26:05
駄目な人多いんだな・・・
299 :
デフォルトの名無しさん:2007/12/16(日) 16:16:40
>>278 こんなんで解けたような。
外部変数: 迷路の配列
関数 戻り値: フラグ 迷路を解く (引数: 座標)
{
フラグ = 0
if 座標がゴール return
迷路配列の座標をチェック済みにする
if 座標の上が壁でない or 座標の上がチェック済みでない then フラグ += 迷路を解く (座標の上)
if 座標の下が壁でない or 座標の下がチェック済みでない then フラグ += 迷路を解く (座標の下)
if 座標の左が壁でない or 座標の左がチェック済みでない フラグ += then 迷路を解く (座標の左)
if 座標の右が壁でない or 座標の右がチェック済みでない フラグ += then 迷路を解く (座標の右)
if フラグ が 0 then 座標を壁と同様にする
}
なんと言われようとかかないが。
302 :
デフォルトの名無しさん:2007/12/16(日) 19:54:14
303 :
277:2007/12/16(日) 20:00:03
>>298 ふざけないで
真面目に書いてください(^^;
真面目だぜぇ。
>>286 正午はPM12時だよ
俺も最初は信じられなかったが
ググってみるとそう定義されてるらしいんだ……
そもそも12時間制で12時というのは存在しないんだけどな
8進数で8が無い、16進数で16がない、10進数で10がない(繰り上げる)ように
>>290 #define PI 3.141592
main()
{
int i,n=0;
struct complex x,y;
double d1=0.0,d2=0.0,t;
do{
scanf("%d",&n);
fflush(stdin);
}while(n<3);
t = 360.0 / n;
for(i=1;i<n+1;i++){
x=complex_input(cos(i*t*PI/180.0),sin(i*t*PI/180.0));
if(i<n)
y=complex_input(cos((i+1)*t*PI/180.0),sin((i+1)*t*PI/180.0));
else
y=complex_input(cos(t*PI/180.0),sin(t*PI/180.0));
d1+=distance_to_zero(x);
d2+=distance_point_to_point(x,y);
}
printf("%lf\n%lf\n",d1,d2);
}
main()をこれに差し替えればQ2・Q3のnを任意の数で計算できます。
#defineはプログラムの先頭のほうに追加してください。
307 :
デフォルトの名無しさん:2007/12/16(日) 21:32:05
改行が多いので数回に分けて投稿します。
よろしくお願いします。
[1] 授業単元: C言語
[2] 問題文(含コード&リンク):
穴埋め問題
コメントを手がかりに、次のプログラムの空欄を埋めてください。
include <stdio.h>
int main(void)
{
int total = 0;
int i = 0, j = 0;
/* for文1 */
for(i = 0; i < 100; i++){
/* i が 7 の倍数ならば、for 文 2 の
処理をしないで繰り返しを続行 */
if((i % 7) == 0)
[ 空欄 1 ] ;
/* for 文 2 */
for(j = 0; j < 100; j++){
/* 条件に合えば、for 文 2 から抜ける */
if(((i + j) % 7) == 0)
[ 空欄 2 ] ;
308 :
307:2007/12/16(日) 21:32:36
/* 条件に合えば、
これ以上処理せずに、for 文 2 を続行 */
else if(((i + j) % 13) == 0)
[ 空欄 3 ] ;
/* 条件に合えば、この関数から抜ける */
else if(((i + j) == 189))
[ 空欄 4 ] 0;
total += j;
}
}
return 0;
}
[3] 環境
[3.1] OS: Windows
[3.2] gcc 3.4
[3.3] 言語: C言語
[4] 期限: 今日から1週間
[5] その他の制限: 特になし
よろしくお願いいたします。
>>307 空欄1 continue
空欄2 break
空欄3 continue
空欄4 return 0
310 :
307:2007/12/16(日) 21:50:16
回答ありがとうございます。
311 :
278:2007/12/16(日) 21:52:49
312 :
デフォルトの名無しさん:2007/12/16(日) 22:23:12
[1] 授業単元:C言語
[2] 問題2 3行3列を入力し、転置行列を表示させなさい。ただし、行列の転置を求める関数を用いること。
実行結果
ma[1][1]:1
・・・
ma[3][3]:9
行列
1 2 3
4 5 6
7 8 9
の転地行列は
1 4 7
2 5 8
3 6 9
です。
問題3 複数の数列のべき乗を求める関数を作成せよ。入力する数(10個以下)と南条するかはキーボードから入力させること。
関数は二つの配列と二つの通常変数を引数にもち、戻り値はvoid型とする(つまり戻り値なし)。つまり(関数名をpowmeとする)次のような形:powme(配列,配列,一般変数,一般変数)
実行結果
10個以下の整数を入力します。
何個の整数を入力しますか?:3
何乗しますか?:4
3個の整数を入力してください。 1個目:2 2個目:3 3個目:5
4乗した結果を表示します。 1個目:16 2個目:81 3個目:625
[3] 環境
[3.1] OS:WindowsXP
[3.2] Borland C++ Compiler 5.5
[3.3] 言語:C
[4] 期限:2007年12月18日
[5] その他の制限:関数を始めたところです。
313 :
◆GdpvmS95ZI :2007/12/16(日) 22:31:14
315 :
デフォルトの名無しさん:2007/12/17(月) 00:21:35
>>316 ありがとうございます。
これを読んで自分でもできるように勉強します。
319 :
318:2007/12/17(月) 01:10:25
あーfopenの.\\は余計かも
kadai.datは実行ファイルと同じフォルダにあると仮定してるから違ったらファイルパス書き換えてやって
321 :
デフォルトの名無しさん:2007/12/17(月) 05:06:15
[1] 授業単元:C言語
[2] 問題文: 適当な整数を入力し次の数から一番近い数を表示せよ。その時その数が何個目かも表示せよ。{21,3,12,40,84,55,8,71}
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: ([2007年12月21日まで]
[5] その他の制限:
よろしくお願いします。
>>322 #include <stdio.h>
#include <stdlib.h>
int main(void) {
int x, i, j, temp, temp2;
int str[]={21,3,12,40,84,55,8,71}, str2[8][2];
printf("整数を入力してください:");
scanf("%d", &x);
for(i=0;i<8;i++) {
str2[i][0] = abs(str[i]-x);
str2[i][1] = i;
}
for(i=0;i<7;i++) {
for(j=7;j>i;j--) {
if(str2[j-1][0]>str2[j][0]) {
temp = str2[j][0];
temp2 = str2[j][1];
str2[j][0] = str2[j-1][0];
str2[j][1] = str2[j-1][1];
str2[j-1][0]= temp;
str2[j-1][1]= temp2;
}
}
}
printf("一番近い数は%dで%d番目です\n", str[str2[0][1]], str2[0][1]+1);
return 0;
}
324 :
デフォルトの名無しさん:2007/12/17(月) 11:21:50
授業単元:
問題文:問題1
数値[int型]を入力し、ポイント変数を使って数値を2倍するプログラムを作成しなさい
実行画面
数値入力=>10
結果:20
問題2#
2つの数値[int型]を入力し、ポイント変数を使って数値を入れ換えるプログラムを作成しなさい
実行画面
数値1入力=>10
数値2入力=>20
入れ換え後:10 20
環境 ボーランド
OS:Windows
コンパイラ名とバージョン:gcc
言語:C
期限:
>>323ありがとうございます。でもstr使わずに作る事は出来ないでしょうか?
配列を使うなってか?
なんでstr使いたくないんだ?
>>326すいません。自分の勘違いでした。ありがとうございました。
>>627strに何か特殊な意味があるかと思ったので。
[1] 授業単元: C++実習
[2] 問題文(含コード&リンク):()
<クラス作成>
(1)「干支」クラス(基本)を作成する
(2)「干支」クラス(基本)クラスから派生した「子」クラス,「丑」クラス・・・「亥」クラス(計12個)を作成する
<準備>
(3)main関数で「干支」(基本)クラスのポインタ変数を用意する
(4)main関数で派生クラスのインスタンスを全て作成する(計12個)
(5)初期値として(3)のポインタに「子」オブジェクトを格納する
<アルゴリズム>
(6)乱数を発生させ(0〜11の範囲),出た数字分(3)のオブジェクトを1つづつずらしなさい(乱数で3が出たら「子」→「丑」→「寅」→「卯」)なお,ここで,typeid()を用いて,現在の(3)のポインタの状態を調べてずらしていくこと。
(7)(6)を繰り返し,「亥」になったら終了しなさい。なお,繰り返しているときはどの干支になっているかを表示すること
[3] 環境
[3.1] OS: XP
[3.2] visual studio 2005
[3.3] 言語: C++
[4] 期限: 2007/12/19 10:00
[5] 特に無し
よろしくお願いします
[1] 授業単元: プログラミング言語
[2] 問題文:
hドライブのogawaフォルダ配下のkyuuyo.datからデータを入力し、
そのデータを金額とした時の金種の一覧を表示するプログラムを
作成せよ。
但し、kyuuyo.datファイルはint型の複数データが格納されたバイナリファイルとする。
【実行例】
額/種 10000 5000 2000 1000 500 100 50 10 5 1
419377 41 1 2 0 0 3 1 2 1 2
[3] 環境
[3.1] XP
[3.2] VC++2005
[3.3] 言語: C++
[4] 期限: 12/19
[5] その他の制限: なし
>>229と同じ課題で、既に
>>235に返答がついているのですが
出来ればどなたかC++で作って頂けないでしょうか。
宜しくお願い致します。
>>324 #include <stdio.h>
int main(){
int *p1,*p2,nullpo;
/* 問題1 */
printf("数値入力=>");
scanf("%d",p1);
printf("結果:%d\n",*p1 << 1);
/* 問題2# */
printf("数値1入力=>");
scanf("%d",p1);
printf("数値2入力=>");
scanf("%d",p2);
*p1 ^= *p2 ^= *p1 ^= *p2;
printf("入れ換え後:%d %d\n",*p1,*p2);
return 0;
}
kind[]をvector<int>にするとか?
valueを使う直前に(関数の途中で)定義するとか
あとはprintfをcoutにするとか、ファイルI/Oをfstreamにするとか…
どれか1つやっただけで、Cじゃコンパイルできなくなる(2番目のはコンパイラによっては
許可してるかもしれんが)ので、C++と言えなくはないぞ。
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
2つのファイルにそれぞれ20個の整数が保存されている。これら2つのファイルから交互に整数を
とってきて新たなファイルに書き出せ。
テストケース
ファイル1に保存されている整数: 1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39
ファイル2に保存されている整数: 2 4 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40
新たなファイルへの出力: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
[3] 環境
[3.1] OS: (Windows)
[3.2] コンパイラ名とバージョン: (gcc)
[3.3] 言語: (C)
[4]期限:2007年12月18日まで
[5]その他の制限:特になし
よろしくお願いします。
337 :
デフォルトの名無しさん:2007/12/17(月) 17:09:56
340 :
デフォルトの名無しさん:2007/12/17(月) 21:35:36
[1]単元
プログラミング
[2]問題
多次元配列の構造体をあるメンバによってソートする。
ソートにはqsortを用いる。
num[][]をnum[][].tensuでソートするといったものです。
[3]環境
Linux
C
gccコンパイラ
[4]いつまでというものでもないのですがかなりさしせまっています。
できれば早くお願いします。
[5]その他
特になし。
宜しくお願いします。
>>338-339 Borland6じゃ
#include <stdio.h>
int main(void)
{
int *p;
scanf("%d",p);
getchar();
printf("%d",*p);
getchar();
return 0;
}
でもコンパイル通るし、画面に表示できるし、エラーでないから笑えないんだけどな。
charポインタもscanfで文字列を取り込めるし。
笑い所はそこじゃないと思うけどまあいいや
344 :
デフォルトの名無しさん:2007/12/17(月) 22:45:11
xorswapは好きだ
>>344 興味があるならやれば良いじゃないか。
先に回答されていても"私のコードの方が美しい"(ナルシスト風に)
と思うならUpした方が良い。Upするときには是非、
"貴様のコードは美しくない"とか"私の美しいコードを見よ"とか
ナルシスト風の言葉を添えてくれ
>>331 #include <iostream>
const char filename[] = "h:\\ogawa\\kyuuyo.dat";
int main(void)
{
FILE *fp = fopen(filename, "rb");
int sum = 0, money[] = {10000, 5000, 2000, 1000, 500, 100, 50, 10, 5, 1};
int i, n = sizeof(money)/sizeof(money[0]);
int cnt[sizeof(money)/sizeof(money[0])] = {0};
if(!fp) return perror(filename), 1;
if(!fread(cnt, n, sizeof(cnt[0]), fp)) return 1;
fclose(fp);
for(i = 0; i < n; i++) sum += cnt[i]*money[i];
printf("額/種");
for(i = 0; i < n; i++) printf("%6d", money[i]);
printf("\n%6d", sum);
for(i = 0; i < n; i++) printf("%6d", cnt[i]);
printf("\n");
return 0;
}
ただの電話帳じゃないすか
349 :
275:2007/12/17(月) 23:27:42
>>306 全て完璧にやって頂き、本当に有難うございました。
自分もいつか皆様にお役にたてるように…勉強がんばります。
>>340 #include <stdio.h>
#include <stdlib.h>
#include <time.h>
typedef struct{ int tensu;}Hoge;
int cmp_tensu(Hoge *p, Hoge *q){ return p->tensu - q->tensu;}
int main(void){
Hoge num[10][10];
int i, j;
srand((unsigned int)time(NULL));
for(i = 0; i < 10; i++)
for(j = 0; j < 10; j++)
num[i][j].tensu = rand()%100;
printf("before sort\n");
for(i = 0; i < 10; i++){
for(j = 0; j < 10; j++)
printf("%3d ", num[i][j].tensu);
printf("\n");
}
qsort(num, 100, sizeof(int), (int (*)(const void *, const void *))cmp_tensu);
printf("after sort\n");
for(i = 0; i < 10; i++){
for(j = 0; j < 10; j++)
printf("%3d ", num[i][j].tensu);
printf("\n");
}
return 0;
}
351 :
デフォルトの名無しさん:2007/12/18(火) 00:22:21
>>346 解答に興味があるから、是非もっと簡潔なコードが見たいなと。
外部変数でやりとりしろってこと?
353 :
デフォルトの名無しさん:2007/12/18(火) 01:23:18
354 :
331:2007/12/18(火) 03:33:14
[1] 授業単元:プログラミング言語II
[2] 問題文(含コード&リンク):
円周率πの近似値を乱数の生成を使って作成しなさい。
乱数生成はrand()関数を使用しなさい。
全ての変数を局所変数として宣言し、発生させる乱数の数nを10,100,1000,2000,5000,10000個として、それぞれ円周率πの近似値を求めなさい。(拡張性を考慮して)乱数の数nを引数として、そのときのπの近似値を返り値とする関数を定義しなさい。
double pai_calc(int);
原理は、 0<=x<=1, 0<=y<=1の範囲の座標(x,y)を乱数でn個発生させ、そのうちのm個が1/4円内に入ったとすると(条件:x^2+y^2<=1)、その割合は近似的に正方形と1/4円の面積比に等しい。すなわち1:π/4 = n:mの関係式から円周率πの値を近似する。
[3] 環境
[3.1] OS: WindowsXP
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語:C
[4] 期限:2007年12月19日24:00まで
[5] その他の制限:なし
よろしくお願いします。
>>355 #include <math.h>
#include <time.h>
#include <stdlib.h>
#include <stdio.h>
double pai_calc(int n)
{
int i, m = 0;
for (i=0; i < n; ++i) {
double x,y;
x = (double)rand()/RAND_MAX;
y = (double)rand()/RAND_MAX;
if (pow(x,2.0)+pow(y,2.0) <= 1.0) ++m;
}
return (double)m/n*4.0;
}
int main(void)
{
int trial[] = {10,100,1000,2000,5000,10000};
int i=0;
srand((unsigned int)time(NULL));
for (i=0; i < sizeof(trial)/sizeof(trial[0]); ++i)
printf("trial: %d => %f\n", trial[i], pai_calc(trial[i]));
return 0;
}
[1] 授業単元:プログラミング言語II
[2] 問題文(含コード&リンク):
ファイルに30個の整数が空白で区切られて保存されている。1以上30以下の整数を入力として受け付けて,
その個数分だけファイルからデータを読み込み,その総和を求めよ。
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語:C
[4] 期限:2007年12月19日24:00まで
[5] その他の制限:なし
よろしくお願いします。
[1] 授業単元:C言語
[2] 問題文(含コード&リンク):
12進数の文字列str[100](0~9,A(10),B(11)を10進数に変化する関数を以下に
記述しなさい。ただしプロトタイプ宣言は以下を利用すること。
int twtoi(char str[]);
[3] 環境
[3.1] OS: (WindowsXP)
[3.2] borand5.5
[3.3] 言語: (C++)
[4] 期限: ([2007年12月18日まで]
よろしくお願いします。
/*
>>358 */
/* #include <stdlib.h> if needed. */
int twtoi(char str[])
{
return (int) strtol(str, NULL, 12);
}
C++だからこっちのがいいな
#include <cstdlib>
int twtoi(char str[])
{
return (int) std::strtol(str, NULL, 12);
}
361 :
359:2007/12/18(火) 11:35:16
だって授業単元がC言語なんだもん(TT
362 :
デフォルトの名無しさん:2007/12/18(火) 12:37:59
[1] 授業単元:C
[2] 問題文: 問@以下のプログラムをもとにして,標準入力から受け取った文字を 「2進数表示したもの」と「その補数」を表示するプログラムを作成しなさい.
ビット演算子を用いてプログラムを作成すること.
問A以下のプログラムをもとに,標準入力から0以上の整数を 1 つ受け取り (scanf を用いて整数を符号無し整数型 unsigned 型の変数に読み込む), 8で割った余りを計算するプログラムを作りなさい.
ビット演算子を用いてプログラムを作成すること.
[3] 環境
[3.1] OS:Windows xp
[3.2] コンパイラ名とバージョン:任意
[3.3] 言語: C
[4] 期限: ([2007年12月19日15:00まで]
[5] その他の制限:特になし
363 :
デフォルトの名無しさん:2007/12/18(火) 12:38:31
問@
#include <stdio.h>
#include <stdlib.h>
void printBinary(char);
int main(void)
{
char ch;
printf("Input character: ");
scanf("%c", &ch);
printBinary(???????);
printBinary(???????);
return 0;
}
void printBinary(char x)
{
int i;
for (i= ???????; ???????; i--) {
???????
}
putchar('\n');
}
364 :
デフォルトの名無しさん:2007/12/18(火) 12:39:35
問A
#include <stdio.h>
#include <stdlib.h>
void printBinary2(unsigned);
int shou8(unsigned);int main(void)
{
unsigned n;
printf("Input non-negative integer: ");
scanf("%d", &n);
printBinary2(???????);
printBinary2(???????);
printf("%d %% 8 = %d", n, shou8(n));
return 0;
}void printBinary2(unsigned x){
int i;
for (i = ???????; ???????; i--) {
???????}
putchar('\n');}
int shou8(unsigned x)
{int i, j=1, sum=0;
for (i = ???????; ???????; i++) {
if( ??????? ){
??????? }
j *= 2;
}return(sum);}
362、363です
問@Aの解答お願いします
>>364 >8で割った余り
>int shou8(unsigned);
余りなのに関数名は商か
関数命名センスがないねその先生
>>363 #include <stdio.h>
#include <stdlib.h>
void printBinary(char);
int main(void)
{
char ch;
printf("Input character: ");
scanf("%c", &ch);
printBinary(ch);
printBinary(-ch);
return 0;
}
void printBinary(char x)
{
int i;
for (i = 8; i; i--) {
putchar((x >> i - 1 & 1) + '0');
}
putchar('\n');
}
367 :
366:2007/12/18(火) 13:43:44
>>364 #include <stdio.h>
#include <stdlib.h>
void printBinary2(unsigned);
int shou8(unsigned);
int main(void)
{
unsigned n;
printf("Input non-negative integer: ");
scanf("%d", &n);
printBinary2(n);
printBinary2(0 - n);
printf("%d %% 8 = %d", n, shou8(n));
return 0;
}
void printBinary2(unsigned x){
int i;
for (i = 8 * sizeof(int) - 1; i >= 0; i--) {putchar((x >> i & 1) + '0');}
putchar('\n');
}
int shou8(unsigned x)
{
int i, j=1, sum=0;
for (i = 0; i < 3; i++) {
if(x >> i){sum += j;}
j *= 2;
}
return(sum);
}
368 :
デフォルトの名無しさん:2007/12/18(火) 13:49:54
[1] 授業単元: プログラミング演習
[2] 問題文:頂点座標が(0,0),(1,√3),(2,0)である正三角形の各辺を再帰的に
2分割(分割点は線分の中点)するプログラムを作成しなさい。
なお、任意に決めた回数だけ再帰呼び出しをすること。
[3] 環境
[3.1] OS: Windows xp
[3.2] gcc
[3.3] 言語: C
[4] 期限: [2007年12月19日17:00まで]
[5] その他の制限: 特になし
369 :
デフォルトの名無しさん:2007/12/18(火) 13:52:48
368の者です。
実行結果は求めた座標を表示できれば大丈夫なのでよろしくお願いします。
#include<stdlib.h>
const char EOS='\0';
void main(char A[], char S[], char D[], char B[]){
int Aidx,Sidx,Didx,Bidx,Idx;
Aidx=0;
Bidx=0;
while(A[Aidx]!=EOS){
if(A[Aidx]==S[0]){
Idx=Aidx;
Sidx=0;
do{
Sidx=Sidx+1;
Aidx=Aidx+1;
}
while(A[Aidx]==S[Sidx]&&A[Aidx]!=EOS);
if(S[Sidx]==EOS){
Didx=0;
while(D[Didx]!=0){
B[Bidx]=D[Didx];
Didx=Didx+1;
Bidx=Bidx+1;
}
}
else {
B[Bidx]=A[Idx];
Aidx=Aidx+1;
Bidx=Bidx+1;
}
}
B[Bidx]=EOS;
}
int main(){
char A[]="aabcabb";
char S[]="ab";
char D[]="ABC";
char B[100];
Replace(A,S,D,B);
printf("%s\n",B);
return 0;
}
>>370をmain関数の上につけて実行すると、
33: 宣言の構文エラー(関数 main(char *,char *,char *,char *) )
41: 宣言に ; がない(関数 main(char *,char *,char *,char *) )
41: 複合文に } がない(関数 main(char *,char *,char *,char *) )
とエラーが出るのですが、;も}も抜けてるところはないとおもうのですが、間違っているところがあれば教えてください。
どうやってそんな発想に至ったかを知りたい
>>370-371 インデントつけりゃ分かるだろ
void Replace(char A[], char S[], char D[], char B[]){
int Aidx,Sidx,Didx,Bidx,Idx;
Aidx=0;
Bidx=0;
while(A[Aidx]!=EOS){
if(A[Aidx]==S[0]){
Idx=Aidx;
Sidx=0;
do{
Sidx=Sidx+1;
Aidx=Aidx+1;
}
while(A[Aidx]==S[Sidx]&&A[Aidx]!=EOS);
if(S[Sidx]==EOS){
Didx=0;
while(D[Didx]!=0){
B[Bidx]=D[Didx];
Didx=Didx+1;
Bidx=Bidx+1;
}
}
else {
B[Bidx]=A[Idx];
Aidx=Aidx+1;
Bidx=Bidx+1;
}
}
B[Bidx]=EOS;
}
しっかりと}が一個足りない
374 :
373:2007/12/18(火) 16:09:52
すまん、2chじゃインデントできないんだったw
とにかくよく数えろ、1個足りん
375 :
370:2007/12/18(火) 16:13:59
どうもありがとうございます。
エラーがあとひとつになりました。
宣言の構文エラー(関数 main(char *,char *,char *,char *) )
ってどういうことでしょうか?
>>375 普通は、main()の引き数は int argc, char ** argv と決まっているから。
#つーか、どこからその気色悪いI/Fが出てきたんだか。
377 :
373:2007/12/18(火) 16:20:53
>>375 >>370-371のやつだとmainが二個あるけど、それは?
こっちじゃあ括弧足して一つ目の関数名をReplaceとやらに変えたらエラー出なかったが。
378 :
367:2007/12/18(火) 16:28:04
>>364 問2を間違えた
#include <stdio.h>
#include <stdlib.h>
void printBinary2(unsigned);
int shou8(unsigned);
int main(void)
{
unsigned n;
printf("Input non-negative integer: ");
scanf("%d", &n);
printBinary2(n);
printBinary2(0 - n);
printf("%d %% 8 = %d", n, shou8(n));
return 0;
}
void printBinary2(unsigned x){
int i;
for (i = 8 * sizeof(int) - 1; i >= 0; i--) {putchar((x >> i & 1) + '0');}
putchar('\n');
}
int shou8(unsigned x)
{
int i, j=1, sum=0;
for (i = 0; i < 3; i++) {
if(x >> i){sum += j;}
j *= 2;
}
return(sum);
}
>>377 最初のmainをReplaceに変え忘れていました。
無事実行できました、どうもありがとうございました。
でも実行画面に何にも表示されないのは成功しているんだろうか・・・
380 :
367:2007/12/18(火) 16:34:49
>>364 問1も何かおかしいと思ったら……
scanf("%c", &ch);
→scanf("%d", &ch);
問題ミスですね
先生に言ったらポイントもらえるんじゃね
>>379 バグがある
てかいい加減スレチ
質問スレへどうぞ
C言語でお願いします。
以下の仕様を満たすプログラムを作成せよ。
・文字列(char型の配列)host宣言をし、初期化する。
(グローバル変数でもオート変数でも、どちらでもよい。)
・hostの要素(ABCDEFG.ac.jp)を、文字コードの小さい順に自動的にソートし、ソート前の文字列とソート後の文字列を、同じ行内に並べて出力する。
・手動でソートしてはならない。
・ソート前後の文字列が同じ行内に出力されていないものを、とりあえず受け取るが減点する。
>>368 #include <stdio.h>
#include <math.h>
#define N 10
typedef struct {double x,y;} point;
void print_triangle(point *p){
int i=0;
printf("Triangle :");
for(; i<3; ++i){printf(" (%.4f,%.4f)",p[i].x,p[i].y);}
putchar('\n');
}
void mid_triangle(point *p, unsigned n){
int i=0;
point temp;
temp.x = p[0].x + p[1].x + p[2].x;
temp.y = p[0].y + p[1].y + p[2].y;
for(; i<3; ++i){
p[i].x = (temp.x - p[i].x) / 2;
p[i].y = (temp.y - p[i].y) / 2;
}
print_triangle(p);
if (--n) mid_triangle(p,n);
}
int main(){
point p[3];
p[0].x = 0; p[0].y = 0;
p[1].x = 1; p[1].y = sqrt(3);
p[2].x = 2; p[2].y = 0;
print_triangle(p);
mid_triangle(p,N);
return 0;
}
[1] 授業単元:情報処理
[2] 問題文(含コード&リンク):
2元連立微分方程式
(dx1/dt) = f1(x1,x2,t)
(dx2/dt) = f2(x1,x2,t)
の右辺を計算する
void dfunc( double *dx1, double *dx2, double x1t, double x2t, double t ){
*dx1 = x2t;
*dx2 = -x1t - (x1t - t) * (x1t - t) * (x1t - t) + t + 0.1;
}
という関数が与えられている。ただし、dx1はf1を戻すためのポインタ、dx2はf2を戻すためのポインタ、
x1tはx1(t)を関数に渡すための引数、x2tはx2(t)を関数に渡すための引数、tは時刻tを関数に渡すための引数である。
この関数を利用して、指定時刻tに対応するx1,x2の状態遷移(範囲 -2≦x1≦2 -2≦x2≦2)を計算するプログラムを作成せよ。
ただし、状態遷移を計算する点(x1,x2)は最低25個とする。このプログラムにt=0,1をそれぞれ入力したときの各点の状態遷移を
出力(5×5の表など)せよ。
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc 3.4
[3.3] 言語: C
[4] 期限:明後日
[5] その他の制限:特にありません
お願いします。
385 :
デフォルトの名無しさん:2007/12/18(火) 17:26:13
>>382 #include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
void bogosort(char *str){
const char len = strlen(str);
int i,r;
srand(time(NULL));
while(1){
for(i=1; i<len; ++i){
const char tmp = str[i];
str[i] = str[r = rand()/(RAND_MAX+1.0)*(i+1)];
str[r] = tmp;
}
for(i=1; i<len && str[i-1] <= str[i]; ++i);
if(i==len) break;
}
}
int main(){
char host[] = "ABCDEFG.ac.jp";
printf("%s",host);
bogosort(host);
printf("→%s",host);
return 0;
}
387 :
355:2007/12/18(火) 18:19:31
>>356 素早い回答ありがとうございます!助かりました。
typedef struct {
double x;
double y;
} point;
を使ってキーボードから3点の2次元座標値(x, y)を読み込み,
3点から作られる3角形の面積Sを出力するプログラムを作成せよ
Cです。お願いします。
389 :
デフォルトの名無しさん:2007/12/18(火) 19:27:25
[1] 授業単元: プログラム演習
[2] 問題文(含コード&リンク):(1.時間制約スケジューリング手法とは?
2.時間制約スケジューリング手法はどのように利用されるか?
3.時間制約スケジューリング手法としてどのようなものがあるか?
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン: なし
[3.3] 言語: (C/C++/どちらでも可 のいずれか)なし
[4] 期限: ([2008年12月22日18:00まで]
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
なし
>>388 これ作ってて、俺、高校数学の知識が抜けまくってるなぁと実感した。
とりあえず、3平方の定理と余弦定理、逆余弦と正弦を使って無理矢理やった。
#include <stdio.h>
#include <math.h>
struct _point
{
double x;
double y;
};
typedef struct _point POINT;
double PointsToLen(POINT Point0,POINT Point1)
{
double result,dx,dy;
dx=abs(Point0.x-Point1.x);
dy=abs(Point0.y-Point1.y);
result = sqrt ((dx*dx)+(dy*dy));
return result;
}
int main()
{
POINT Points[3];
double Len01,Len12,Len20;
double rad;//Len01とLen12の間の角の角度[rad]
double s;//面積
int count;
//値の入力
for(count=0;count<=2;count++)
{
printf("Point[%d].x=",count);scanf("%lf",&(Points[count].x));
printf("Point[%d].y=",count);scanf("%lf",&(Points[count].y));
}
//各辺の長さの計算
Len01=PointsToLen(Points[0],Points[1]);
Len12=PointsToLen(Points[1],Points[2]);
Len20=PointsToLen(Points[2],Points[0]);
rad=acos(((Len01*Len01)+(Len12*Len12)-(Len20*Len20))/(2*Len01*Len12));
s=(Len01*Len12*sin(rad))/2;
printf("三角形の面積は %lf です。",s);
return main();
}
>>388 こうすれば簡単
#include <stdio.h>
#include <math.h>
struct _point
{
double x;
double y;
};
int main()
{
int i;
double s=0;
struct _point p[3];
for(i=0;i<3;i++) {
printf("Point%d : ",i);
scanf("%lf %lf",&(p[i].x),&(p[i].y));
}
for(i=0;i<3;i++)
s+=p[i].x*(p[(i+1)%3].y-p[(i+2)%3].y);
s=fabs(s)/2;
printf("S = %lf\n",s);
return 0;
}
>>388 #include <stdio.h>
#include <math.h>
typedef struct{
double x;
double y;
}point;
int main(){
point p[3]; //座標
double s; //面積
int i;
//読み込み
for(i = 0;i < 3;i++){
printf("x%d = ",i+1);
scanf("%lf",&p[i].x);
printf("y%d = ",i+1);
scanf("%lf",&p[i].y);
}
//計算
s = 0.5 * abs((p[2].y-p[0].y)*(p[1].x-p[0].x)
- (p[2].x-p[0].x)*(p[1].y-p[0].y));
printf("S = %.2f",s);
return 0;
}
>>385 #include <stdio.h>
#include <string.h>
#define N 100
static const char input[] = "0123456789"
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
int main(int argc, char *argv[]){
FILE *fp;
char end[N], n = 0, buf[2*N], *p;
int i, j, table[N][sizeof(input) - 1], start, cur, ch, next;
if(argc < 2) return fprintf(stderr, "usage : %s filename\n", argv[0]), 1;
if((fp = fopen(argv[1], "r")) == NULL) return perror(argv[1]), 1;
for(i = 0; i < N; i++) for(j = 0; j < sizeof(input) - 1; j++) table[i][j] = i;
fscanf(fp, "%d\n", &start);
fgets(buf, sizeof(buf), fp);
for(p = strtok(buf, " "); p != NULL; p = strtok(NULL, " ")) end[n++] = atoi(p);
while(fscanf(fp, "%d %c %d\n", &cur, &ch, &next) == 3)
if((p = strchr(input, ch)) == NULL) return fprintf(stderr, "illegal character\n"), 1;
else table[cur][p - input] = next;
scanf("%s", buf);
for(i = 0, j = start; buf[i] != '\0'; i++)
if((p = strchr(input, buf[i])) == NULL) return fprintf(stderr, "illegal character\n"), 1;
else j = table[j][p - input];
for(i = 0; i < n; i++) if(j == end[i]) break;
if(i != n) printf("accept\n");
else printf("reject\n");
return 0;
}
399 :
398:2007/12/19(水) 01:54:35
弱い決定性がよくわかってなかったっぽい……
ま、いいか
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):Unixコマンドのcat(ファイル内容を標準出力)に当たるプログラムを作成せよ
実行例
% ./program sample_file
(以下、sample_fileの内容を標準出力)
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C
[4] 期限:本日中
[5] その他の制限:読み込むファイルの文字数に制限を設けず、文字列を読み込むごとに必要なメモリを動的に確保すること
どなたかお願いします
>>400 #include <stdio.h>
#include <stdlib.h>
int main(int argc, char* argv[]){
FILE* fp;
char c;
if (argc == 1) {
printf("usage: mycat filename\n");
exit(1);
}
fp = fopen(argv[1], "r");
if (!fp) {
printf("file can not open\n");
}
while (1) {
c = fgetc(fp);
if (c == EOF) {
break;
}
putchar(c);
}
fclose(fp);
return 0;
}
全角スペースを置換して使ってね
402 :
デフォルトの名無しさん:2007/12/19(水) 03:34:46
>>400 cat ってこんな奴だよね(マニュアルを抜粋)
cat は指定したファイルそれぞれの内容を標準出力へ書き出す。 FILE が一つ
も与えられないと標準入力から読み込む。また FILE が `-' だった場合には、
そのファイルには標準入力が用いられる。
本当にこれを作るの?
それとも Windows のコマンドプロンプトにある type 相当のコマンドを作るの?
[1] 授業単元: 基礎プログラミング
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5558.txt [3] 環境
[3.1] OS: (Windows/Linux/等々) Linux
[3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等) gcc
[3.3] 言語: (C/C++/どちらでも可 のいずれか) C
[4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか) 12月19日24:00まで
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
まだ基本的なことしか学んでいないので、できるだけif文やfor文などの初歩的な構文でお願いします。
405 :
388:2007/12/19(水) 11:28:22
ありがとうございました。
406 :
デフォルトの名無しさん:2007/12/19(水) 12:52:00
398さんのプログラムを実行すると、すべてacceptとなってしまうんですが・・・
407 :
デフォルトの名無しさん:2007/12/19(水) 12:54:01
398さんのプログラムを実行すると、すべてacceptとなってしまうんですが・・・
>>402 #include <iostream>
#include <cmath>
using namespace std;
class iPolar2{
double x,y;
public:
iPolar2(double x,double y) : x(x),y(y){}
double getr(){return sqrt(x*x+y*y);}
double gett(){return atan(y/x);}
};
int main(){
int x,y;
cout << "xを入力してください > ";
cin >> x;
cout << "yを入力してください > ";
cin >> y;
iPolar2 ip(x,y);
cout << "rの値は" << ip.getr() << endl;
cout << "θの値は" << ip.gett() << endl;
return 0;
}
>>408 しまったmain()中のx,yはdouble型だ
410 :
デフォルトの名無しさん:2007/12/19(水) 13:40:21
[1] 授業単元:プログラム演習
[2] 問題文(含コード&リンク):時間制約スケジューリングの利用例を挙げよ
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: なし
[3.3] 言語: なし
[4] 期限: 12月20日まで
[5] その他の制限:特になし
お願いします
411 :
404:2007/12/19(水) 13:48:46
412 :
デフォルトの名無しさん:2007/12/19(水) 14:06:13
>>383 ありがとうございます。
でも自分の説明が悪かったせいか元の正三角形の中に再帰的に正三角形
が作られています。元の正三角形の各辺を再帰的に2分割したいのですが
どうすればいいのでしょうか?考えても全然わかりません。
どなたかわかる人がいればよろしくお願いします。
413 :
パニパニ少女:2007/12/19(水) 14:22:00
すみませんがこの問題誰か解けませんか?
9行9列の整数型配列変数uzu[ ] [ ]に1から1づつカウントアップ下値を渦巻き状に代入するプログラムを作る。整数型の配列変数はuzu[9 ] [9 ]とする。
こんな感じにしたいんですよ。
1 2 3 4 5 6 7 8 9
32 33 34 35 36 37 38 39 10
31 56 57 58 59 60 61 40 11
30 55 72 73 74 75 62 41 12
29 54 71 80 81 76 63 42 13
28 53 70 79 78 77 64 43 14
27 52 69 68 67 66 65 44 15
26 51 50 49 48 47 46 45 16
25 24 23 22 21 20 19 18 17
マルチすんなカス
415 :
デフォルトの名無しさん:2007/12/19(水) 15:19:19
i 0->8
j 0->8
i 8->0
j 8->1
i 0->7
j 1->7
:
:
416 :
デフォルトの名無しさん:2007/12/19(水) 15:22:45
フラグたてろ。ぶつかったら曲がれ。
>>411 これ解が整数じゃないのもあるね
ア = 3
イ = 22.8
ウ = -90
>>417 int型に小数を渡したら切り捨てられるだろ
つまりあの条件じゃ解なし
>>403 はい。そうです
Unixコマンドのcatと同じ動作をするプログラムを製作すると言う課題です
fgets()だと読み込む文字数に限界が生じてしまうので、困っています……orz
>>401 ソースありがとうございます
メモリ確保を行わないのなら、fgetcを回すという方法もありましたか
>>413 int min,max
int i;
int number;
number=0;
min=0;
max=8;
while(max>=min){
for(i=min;i<=max;i++){
uzu[min][i]=number;
number+=1;
}
for(i=min+1;i<=max;i++){
uzu[i][max]=number;
number+=1;
}
if(max=min) break;
for(i=max-1;i>=min;i--){
uzu[max][i]=number;
number+=1;
}
for(i=max-1;i>=min+1;i--){
uzu[i][min]=number;
number+=1;
}
min+=1;
max-=1;
}
とか
あ、ifの場所一個上だった
423 :
398:2007/12/19(水) 16:57:50
>>406-407 以下を変更
for(i = 0; i < N; i++) for(j = 0; j < sizeof(input) - 1; j++) table[i][j] = i;
を
for(i = 0; i < N; i++) for(j = 0; j < sizeof(input) - 1; j++) table[i][j] = -1;
else j = table[j][p - input];
を
else if((j = table[i][p - input]) == -1) return printf("reject\n"), 1;
catのバッファって制限ありそうだけどな。
>>402 (c)
データ読む部分作れるなら計算ルーチンは
double vect[n];//解のセット
double matrix[n][n];///三角行列
int i,j;
double val
for(i=0;i<n;i++){
val=0;
for(j=n-i;j<=n-1;j++) val+=vect[j]*matrix[n-1-i][j];
vect[length-1-i]-=val;
vect[n-1-i]=vect[n-1-i]/matrix[n-1-i][n-1-i];
}
で求まります.
[1] 授業単元: 計算機演習
[2] 問題文(含コード&リンク):
片付けてもらいたい課題は↓
1:テキスト表現の二分木を読み込んで、tree型の内部表現データを作る関数を作りなさい。
(関数値はできた木へのポインタ。入力データに誤りは無いものとしてよい)
2:tree型のデータ(内部表現の木の根、頂点へのポインタ)を引数とし、その木のテキストによる表現を印字する関数を作りなさい。
3:5種類以上のテキスト表現の木のデータに対して読み込み関数とその結果を印字するmain関数を作りなさい。
テキスト表現とツリー型については↓
ttp://up2.viploader.net/upphp/src/vlphp107551.jpg [3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン:bcc
[3.3] 言語:C
[4] 期限:22日まで
[5] その他の制限:よろしくお願いします
>>413 #include<stdio.h>
#include<math.h>
#define SIZE 9
#define N (SIZE*SIZE-n)
#define M (int)sqrt(N)
int main(void){
int uzu[SIZE][SIZE]={0},x=0,y=0,z=0,n;
for(n=1;n<=SIZE*SIZE;n++){
uzu[x][y]=n;
if(N==M*M||N==M*(M+1))
z=(z+1)%4;
x+=(z==0)-(z==2);
y+=(z==1)-(z==3);
}
for(y=0;y<SIZE;y++){
for(x=0;x<SIZE;x++)
printf("%4d",uzu[x][y]);
printf("\n");
}
return 0;
}
>>419 どうやったって、ファイルサイズより長い行はありえないんだから、
ファイルサイズ分のバッファ確保するとかw
430 :
デフォルトの名無しさん:2007/12/19(水) 19:39:50
[1] 授業単元:情報処理
[2] 問題文
入力された整数を2進数に直して表示するプログラムを作成せよ。
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc 2.4
[3.3] 言語: C
[4] 期限:一月七日
[5] その他の制限:関数を用いる。
431 :
384:2007/12/19(水) 19:46:02
お願いします!
>>398 指摘箇所を変更してみても全てacceptと表示されてしまいます。
>>430 #include <stdio.h>
int main(){
int n,i;
printf("Integer->");scanf("%d",&n);
for(i=sizeof(int)*8;i&&!(n>>i-1);--i);
for(i?0:(i=1);i;--i)putchar((n>>i-1&1)+'0');
return 0;
}
>>432 >>398とは別人だが、
>>423の
else if((j = table[i][p - input]) == -1) return printf("reject\n"), 1;
は
else if((j = table[j][p - input]) == -1) return printf("reject\n"), 1;
の間違いだと思われ
というかそこ直す前でもrejectは表示されたが…
>>347氏へ
331では無いのですが同じ課題をやっている者です。
さっそく試しにやってみたのですがkyuuyo.datの指定位置だけ変更して読み込ませてみると
額/種 10000 5000 2000 1000 500 100 50 10 5 1
-722909651419377488769286094398989385588483411208469414122448810289121
となってしまいます・・
もしよければ解決策をお願いしたいのですが・・
>>435 kyuuyo.datをうpろだにあげてくれ
>>436 5560.zip
にうpしておきました、よろしくお願いします。
>>437 >>331 #include <stdio.h>
int main(void)
{
char filename[] = "c:\\ogawa\\kyuuyo.dat";
FILE *fp = fopen(filename, "rb");
int money[] = {10000, 5000, 1000, 500, 100, 50, 10, 5, 1};
int sum, i, n = sizeof(money)/sizeof(money[0]);
printf("額/種");
for(i = 0; i < n; i++) printf("%6d", money[i]);
printf("\n");
while(fread(&sum, 1, sizeof(sum), fp)){
printf("%6d", sum);
for(i = 0; i < n; i++){
printf("%6d", sum/money[i]);
sum %= money[i];
}
printf("\n");
}
fclose(fp);
return 0;
}
>>384 いまいち使われてる言葉が良くわからんのだが・・・
状態遷移って数式的には何を指すの?dx1/dt,dx2/dt????
あと、*dx1=f1(x1,x2,t),*dx2=f2(x1,x2,t) ってことかい?
だったらdfunnkにx1,x2を代入して
その状態遷移って値をつくればいいんじゃないかい
>>438 表示することができました
どうもありがとうございました〜
でもそれはC++じゃねーわな
>>439 x1方向の変化と
x2方向の変化の事だとおもいます。
つまりdx1/dtとdx2//dtですかね?
関数のポインタのところになにをわたすのかわからなくて・・・
443 :
デフォルトの名無しさん:2007/12/19(水) 22:28:52
>>442 これでいいのかな?
今いちあってる自信がないが・・・
int main()
{
double xx[5][5];
double fx1,fx2;
double t;
int i,j;
t=0;
printf("t=0\n");
for(i=0;i<5;i++){
for(j=0;j<5;j++){
dfunc( &fx1, &fx2, i-2, j-2, t );
printf("(%1.2f,%1.2f) ",fx1,fx2);
}
printf("\n");
}
t=1;
printf("t=1\n");
for(i=0;i<5;i++){
for(j=0;j<5;j++){
dfunc( &fx1, &fx2, i-2, j-2, t );
printf("(%1.2f,%1.2f) ",fx1,fx2);
}
printf("\n");
}
return 0;
}
>>429 ありがとうございます。
ためしに実行してみましたがうまく動きません。
コマンドラインから処理するテキストを引数渡しであってますか?
コマンドプロント上で
実行ファイル 処理するテキストファイル
で実行しています。
>>444 自己レスだがxxは意味ない変数で全く使わなかったw
x1(=i-2),x2(=j-2)も出力すると見やすくなるかも
>>445 使い方はそれで合ってる
データファイルの文法が間違っていた場合の対策は何もしてないから、変な文書を入れると簡単にバグる
ちなみに
>>426に示されたjpg中にあるやつは、NULLが一個抜けてるから駄目よ
それと、空白は半角空白で。
448 :
デフォルトの名無しさん:2007/12/19(水) 23:08:28
368,412の者です。
まだ解決していないのでどなたかよろしくお願いしますm(__)m
>>443 #include<stdio.h>
void f(int x){
int i=0,j,array[31];
while(x!=0){
array[i]=x%2;
x=x/2;
i=i+1;
}
if(i==0) printf("0");
else for(j=i-1;j>=0;j--) printf("%d",array[j]);
}
int main(void){
int x;
scanf("%d",&x);
f(x);
return 0;
}
>>444 あたいが+NANとかなるところがあります。
>>447 実行できました!ありがとうございます。
案の定jpgの例で試してました^^;確かにNULLが足りませんね。
実行できたの今度は改造してみます
ありがとうです。
>>450 俺の環境では下のようになるんだけど・・・
あ、%1.2fが良くないから%.2fに直してくれるかな
t=0
(-2.00,10.10) (-1.00,10.10) (0.00,10.10) (1.00,10.10) (2.00,10.10)
(-2.00,2.10) (-1.00,2.10) (0.00,2.10) (1.00,2.10) (2.00,2.10)
(-2.00,0.10) (-1.00,0.10) (0.00,0.10) (1.00,0.10) (2.00,0.10)
(-2.00,-1.90) (-1.00,-1.90) (0.00,-1.90) (1.00,-1.90) (2.00,-1.90)
(-2.00,-9.90) (-1.00,-9.90) (0.00,-9.90) (1.00,-9.90) (2.00,-9.90)
t=1
(-2.00,30.10) (-1.00,30.10) (0.00,30.10) (1.00,30.10) (2.00,30.10)
(-2.00,10.10) (-1.00,10.10) (0.00,10.10) (1.00,10.10) (2.00,10.10)
(-2.00,2.10) (-1.00,2.10) (0.00,2.10) (1.00,2.10) (2.00,2.10)
(-2.00,0.10) (-1.00,0.10) (0.00,0.10) (1.00,0.10) (2.00,0.10)
(-2.00,-1.90) (-1.00,-1.90) (0.00,-1.90) (1.00,-1.90) (2.00,-1.90)
GK(Porteros)
01 "CASILLAS" Iker Casillas Fernandez 1981/05/20 185cm/79kg
13 "CODINA" Jordi Codina Rodriguez 1982/04/27 188cm/79kg
25 "DUDEK" Jerzy Dudek 1973/03/23 187cm/81kg
DF(Defensas)
02 "M. SALGADO" Michel Salgado Fernandez 1975/10/22 174cm/75kg
03 "PEPE" Kleper Laveran Lima Ferreira "Pepe" 1983/02/26 187cm/81kg
04 "SERGIO RAMOS" Sergio Ramos Garcia 1986/03/30 183cm/73kg
05 "CANNAVARO" Fabio Cannavaro 1973/09/13 175cm/72kg
12 "MARCELO" Marcelo Vieira da Silva Junior 1988/05/12 174cm/73kg
15 "DRENTHE" Royston Drenthe 1987/04/08 172cm/78kg
16 "HEINZE" Gabriel Ivan Heinze 1978/04/19 178cm/72kg
21 "METZELDER" Christoph Metzelder 1980/11/05 193cm/84kg
22 "TORRES" Miguel Torres Gomez 1986/01/28 185cm/75kg
455 :
デフォルトの名無しさん:2007/12/20(木) 01:40:19
ありがとうございます。
ちなみに配列使わなくても解けるんですか?
456 :
デフォルトの名無しさん:2007/12/20(木) 01:42:23
457 :
デフォルトの名無しさん:2007/12/20(木) 03:20:40
[1] 授業単元:情報
[2] 問題文
int a[3]に格納されている値のうち2番目に大きいものを、できるだけ高速に求めよ
[3] 環境
[3.1] OS: LinuxFedora Core 6
[3.2] コンパイラ名とバージョン: gcc 4.1
[3.3] 言語: C
[4] 期限:12/20 17:00
[5] その他の制限:qsort等の標準ライブラリ使用不可
よろしくおねがいします。
>>448 #define R 0.5
void mid_tr(point *tr,int n)
{
point mt[4][3];
int i,j,index[] = {0,1,2,0,1};
for(i = 0;i < 3;i++){
mt[i][0] = tr[i];
for(j = 1;j < 3;j++){
mt[i][j].x = tr[i].x + R * (tr[index[i+j]].x - tr[i].x);
mt[i][j].y = tr[i].y + R * (tr[index[i+j]].y - tr[i].y);
}
}
for(i = 0;i < 3;i++) mt[3][i] = mt[i][1]; // 真ん中は不要?
for(i = 0;i < 4;i++) print_triangle(mt[i]);
if(n-- > 0) for(i = 0;i < 4;i++) mid_tr(mt[i],n);
}
459 :
Senkei ◆WxeOUXI8.6 :2007/12/20(木) 04:31:23
[1] 授業単元:プログラミング言語U
[2] 問題文 線形リストを完成せよ
[3] 環境
[3.1] OS: WindowsXP
[3.2] コンパイラ名とバージョン:VisualStudio2005
[3.3] 言語: C
[4] 期限:12/21 13:00
[5] その他の制限: ファイル→
http://sleep-soul0131.hp.infoseek.co.jp/senkei.zip ほぼ完成しております。見てほしいところは指定した場所にデータを挿入する
のがうまくいきません。(ソースでいうsenkei_list.cの156行目のユーザ関数
の176行目の部分)
よろしくお願いします。
460 :
Senkei ◆WxeOUXI8.6 :2007/12/20(木) 04:53:17
>>457 データ数が3つならバブルソートでOK?
#include <stdio.h>
#define MAX 3
int main(void)
{
char input[12];
int a[3]={任意の数字,任意の数字,任意の数字};
int i , j , tmp;
for(i=MAX-1;i>0;i--){
for(j=0;j<i;j++){
if(a[j]<a[j+1]){
tmp=a[j];
a[j]=a[j+1];
a[j+1]=tmp;
}
}
}
printf("二番目に大きい数は”%d ”です\n",a[1]);
printf("Pless any key\n");
scanf("%s",input);
return 0;
}
>>459 なかなか見やすいソースだ。
177行目のifを以下に変更すれば手前に入ってくれる。
if(ptr->next->no==S_Number){
tmp=CallocNode();
tmp->no=x->no;
strcpy(tmp->name, x->name);
tmp->next = ptr->next;
ptr->next=tmp;
break;
}
462 :
Senkei ◆WxeOUXI8.6 :2007/12/20(木) 05:18:18
>>461 こんな朝早くにありがとうございます
ここだけできなくて助かりました。
>>457 とりあえずやってみた
#include <stdio.h>
#define vswap2(x,y) { t=a[x]; a[x]=a[y]; a[y]=t; }
#define vswap3(x,y,z) { t=a[x]; a[x]=a[y]; a[y]=a[z]; a[z]=t; }
int main(void)
{
int t, a[3] = { -10, 10, -1 };/* 適当な数字で */
/* バイトニックソート */
if(a[0]<a[1])if(a[0]<a[2])if(a[1]<a[2]) ;/* ソート済み */
else vswap2(2,1)
else if(a[1]<a[2])/* ありえない */;
else vswap2(2,1)
else if(a[0]<a[2])if(a[1]<a[2]) vswap2(1,0)
else/* ありえない */;
else if(a[1]<a[2]) vswap3(0,1,2)
else vswap2(0,2)
printf("2番目に大きい数:%d\n", a[1]);
return 0;
}
464 :
デフォルトの名無しさん:2007/12/20(木) 08:56:39
[1] 授業単元: 心理実験
[2] 問題文
ポッゲンドルフ錯視を用いた調整法のプログラムを作成せよ
[3] 環境
[3.1] OS: WindowsXP
[3.2] コンパイラ名とバージョン: VisualStudio.NET
[3.3] 言語: C++
[4] 期限: 2007年12月21日10:00まで
よろしくお願いします。
typedef struct {
char name[20]; /* 名前 */
int height; /* 身長 */
float weight; /* 体重 */
} student;
student構造体の配列を用い,5名分の学生データを体重の軽い順に並べ替え(ソート),並べ替える前と並べ替えた後の結果を表示するプログラムを作成せよ
466 :
デフォルトの名無しさん:2007/12/20(木) 14:05:14
クソの集まり創価学会
偽善者が政治活動、公明党
キチガイ集団が政治活動、公明党
池田狂信ネズミ講が政治活動、公明党
騙されバカ信者、池田犬作チョン大教祖様、さっさと死ねや
467 :
デフォルトの名無しさん:2007/12/20(木) 14:06:09
クソの集まり創価学会
偽善者が政治活動、公明党
キチガイ集団が政治活動、公明党
池田狂信ネズミ講が政治活動、公明党
騙されバカ信者、池田犬作チョン大教祖様、さっさと死ねや
468 :
デフォルトの名無しさん:2007/12/20(木) 14:06:35
クソの集まり創価学会
偽善者が政治活動、公明党
キチガイ集団が政治活動、公明党
池田狂信ネズミ講が政治活動、公明党
騙されバカ信者、池田犬作チョン大教祖様、さっさと死ねや
hドライブのogawaフォルダ配下のkyuuyo.datからデータを入力し、そのデータを
金額としたときの金種の一覧を表示するプログラムを作成せよ。
ただし、kyuuyo.datファイルはint型の複数データが格納されたバイナリファイルとする。
テスト問題なんですが、まったくわかりません。。。
469です。
あと5分で作れといわれてます。。。誰か助けてください。。
隣の席のやつに聞けばいいじゃん
[1] プログラミング言語
[2] hドライブのogawaフォルダ配下のkyuuyo.datからデータを入力し、そのデータを
金額としたときの金種の一覧を表示するプログラムを作成せよ。
ただし、kyuuyo.datファイルはint型の複数データが格納されたバイナリファイルとする。
[3] 環境
[3.1] WindowsXp
[3.2] Microsoft Visual Studio Academic Edition 2005
[3.3] C++
[4] あと5分・・・。
>>471 隣のやつも後ろのやつも斜め後ろも誰も分かってません・・・。
ちょwwwwwwおまwwwwwwww
ogawa先生の授業はどうなってんだろう
2007/12/16 19:12
478 :
デフォルトの名無しさん:2007/12/20(木) 15:47:20
464です。
どなたか教えていただけませんか?
どうしたら良いのかまったく分かりません。
>>464 >ポッゲンドルフ錯視を用いた調整法のプログラムを作成せよ
だったら詳しく書きなさい
480 :
デフォルトの名無しさん:2007/12/20(木) 16:10:30
>>479 すみません。
問題に「ポッゲンドルフ錯視を用いた調整法のプログラムを作成せよ」
としか書いていないのでどうしたらいいのか分からないのです。
先生に聞いてきなさいよ
482 :
デフォルトの名無しさん:2007/12/20(木) 16:30:32
483 :
デフォルトの名無しさん:2007/12/20(木) 17:35:56
[1] 授業単元:プログラミング言語1
[2] 問題文(含コード&リンク):
xとyをそれぞれ0から10まで1きざみで変え、そのすべてを組み合わせた平面上の11x11個の点(x,y)を考える.
これらの点のうちで、
y = 1 * ( x + (-4) ) * ( x + (-4) )
y = 7
の2つの線に囲まれた領域内(線上は除く)に含まれる点の数を出力するプログラムを作成せよ。
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: cygwin
[3.3] 言語: Cのみ
[4] 期限: 12月22日
[5] その他の制限: #include <stdio.h>だけで解いてください。
どうすればいいかまったくわかりません。お願いします。
>>483 こうかな…自信ないけどw
#include<stdio.h>
int main(){
int ten=0,i,j,y;
for(i=0;i<11;i++){
for(j=0;j<11;j++){
y = j*j-8*j+16;
if(y<i && i<7) ten++;
}
}
printf("範囲内にある点の数は%d個",ten);
}
485 :
483:2007/12/20(木) 18:37:30
追記
yの式は勿論y = 1 * ( x + (-4) ) * ( x + (-4) )を簡単にしたやつね
俺が書いた書き方がダメなら、この式に書き換えればokだけど最初に1かけてる意味が分からん…
iがyの点、jがxの点を表してるから、分かりにくかったら変数名変えてくれ
一応手計算で含まれる数が20個って出て、実行結果と合ってたから間違いないはず
すまん、こっちの方が効率よかったorz
#include<stdio.h>
int main(){
int ten=0,ty,tx,y;
for(tx=0;tx<11;tx++){
y = tx*tx-8*tx+16;
for(ty=0;ty<11;ty++) if(y<ty && ty<7) ten++;
}
printf("範囲内にある点の数は%d個",ten);
}
487 :
デフォルトの名無しさん:2007/12/20(木) 19:39:32
[1] 授業単元: プログラミング演習
[2] 問題文(含コード&リンク):
入力した小数が
nanであればerror1
infであればerror2
どちらでもなければその小数を表示するプログラムをつくれ。
[3] 環境
[3.1] OS: (Windows/Linux/等々) Linux
[3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等) gcc
[3.3] 言語: (C/C++/どちらでも可 のいずれか) C
[4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか) 12月20日24:00まで
[5] その他の制限: double型で読み込んでください。
[1] 授業単元: プログラミング演習
[2] 問題文:
typedef struct {
char name[20]; /* 名前 */
int height; /* 身長 */
float weight; /* 体重 */
} student;
student構造体の配列を用い,5名分の学生データを体重の軽い順に並べ替え(ソート),並べ替える前と並べ替えた後の結果を表示するプログラムを作成せよ
[3] 環境
[3.1] OS: (Windows/Linux/等々) Linux
[3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等) gcc
[3.3] 言語: C
[4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか) 12月23日24:00まで
[5] その他の制限:なし
490 :
デフォルトの名無しさん:2007/12/20(木) 22:12:13
C言語(C++)
#include <stdio.h>
void put_string(const char str[])
{
unsignetrd i=0;
while(str[i])
putchar(str[i++]);
}
int main(void)
{
char str[100];
printf("文字列を入力してください:");
scanf("%s",str);
put_string(str);
putchar("\n");
return(0);
}
↑の関数をもとにして、文字列を後ろから逆に表示する関数
put_rstringを作成せよ
よろしくお願いします
491 :
デフォルトの名無しさん:2007/12/20(木) 22:29:54
よろしくお願いします。
[1] 授業単元:C言語
[2] 問題文(含コード&リンク): ファイル内容の表示
実行したファイル名を除いたコマンド ライン引数に、
複数個指定したすべてのファイルの内容を標準出力に表示するプログラムを記述してください。
[3] 環境
[3.1] OS: Windows XP Home
[3.2] コンパイラ名とバージョン: gcc 3.4
[3.3] 言語: C
[4] 期限: 今日から一週間
[5] その他の制限: ファイルの入出力の問題です。
(^o^)ノ <さっさと回答しろクズどもー
なんて教科書にのってそうな宿題ばかりなんだ。。。
教科書にのってないような宿題にしろよ。
しかも明らかにのってそうな宿題を2回も貼る馬鹿
>>495 うpろだ使ってるだけまだまし。
>>493 問題文から仕様が複数考えられる。ダブルポインタもちょっとイミフ
入力例、出力例をあげてみてくれんか?
>>489 1/2
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
typedef struct {
char name[20]; /* 名前 */
int height; /* 身長 */
float weight; /* 体重 */
} student;
//s1の方が軽ければ負の数、s2の方が軽ければ正の数、同じなら0を返す
int studentcmp_weight(const void * s1,const void * s2)
{
int result;
float temp;
temp=((student *)s1)->weight - ((student *)s2)->weight;
if(temp>0)
{
result=(int)ceil(temp);
}
else if(temp<0)
{
result=(int)floor(temp);
}
else
{
result=0;
}
return result;
}
>>489 2/2
void OutputStudents(student students[],int studentscount)
{
int i;
printf(" 氏 名 身長 体重\n");
for(i=0;i<studentscount;i++,students++)
{
printf("%12s %4d %6.2f\n",students->name,students->height,students->weight);
}
}
int main(void)
{
student students[5]={{"test1",150,45},{"test2",155,50},{"test5",170,160},{"test3",160,51},{"test4",205,63}};
printf("並び替え前\n");
OutputStudents(students,5);
qsort(students,5,sizeof(student),studentcmp_weight);
printf("並び替え後\n");
OutputStudents(students,5);
}
>>493 私はジャンクなんかじゃない!
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#define swap(type, x, y) do{type tmp = x; x = y; y = tmp;}while(0)
char *str_toupper(char *str){
char *p = str;
while(*p != '\0'){
if(islower(*p)) *p = toupper(*p);
p++;
}
return str;
}
void bsort(char **str, int n){
int i, j;
for(i = 0; i < n - 1; i++)
for(j = i + 1; j < n; j++)
if(strcmp(str[i], str[j]) > 0)
swap(char *, str[i], str[j]);
}
int main(int argc, char **argv){
int i;
char **p;
if(argc < 2) return fprintf(stderr, "usage : %s string ...\n", argv[0]);
p = (char**)malloc((argc - 1)*sizeof(char*));
for(i = 1; i < argc; i++) p[i - 1] = argv[i];
for(i = 1; i < argc; i++) str_toupper(p[i - 1]);
bsort(p, argc - 1);
for(i = 1; i < argc; i++) puts(p[i - 1]);
return 0;
}
>>490 void put_rstring(const char str[])
{
unsigned int i=0;
while(str[i++]);i--;
while(i-->0)putchar(str[i]);
}
489と492の問題って似てる。
簡単だから連投してもやられたよ。
>>491 #include <stdio.h>
int neko(char *filename){
FILE *fp = fopen(filename, "r");
int ch;
if(!fp) return 0;
while((ch = fgetc(fp)) != EOF) putchar(ch);
fclose(fp);
return 1;
}
int main(int argc, char *argv[]){
int i;
for(i = 1; i < argc; i++)
if(!neko(argv[i]))
fprintf(stderr, "%sはにゃーよ\n", argv[i]);
return 0;
}
504 :
488:2007/12/21(金) 00:20:23
ですけど
ちょっと無理そうなので
入力した値が
infかnanであればエラー
そうでなければその値を出力しなさい
っていうのをお願いできますか?
>>488 まったく分かりません。
自分で浮動少数を定義して、IEEE754に準拠とかじゃない?
506 :
名無し:2007/12/21(金) 01:16:56
[1] プログラム演習
[2]seiseki.txtというファイルに 総生徒人数(改行)出席番号,国語,数学,英語の順で入っている。この各科目の合計を出力するプログラムを作れ。
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: VC
[3.3] 言語: C++
[4] 期限: 今週中
[5] その他の制限:関数・ポインタ・構造体の分野での宿題です。
ファイルを読み込む問題や平均化の問題は既出でしたが、Cだったりしてよくわかりません。お暇な方お願いいたします。
507 :
506:2007/12/21(金) 01:21:54
問題文間違えました。
総生徒人数(改行)出席番号,国語の成績,数学の成績,英語の成績
でした。人数は10000人。成績は100点満点です。よろしくお願いします。
今週中って曖昧だな。俺的に今週中は金曜日までだけど一般的にはどうなのかな?
>>492の宿題と格闘してたらこんな時間になっちまったし変なバグが出手もうダメポ
一応今週は土曜日までだろう
[1] 授業単元: プログラム実習
[2] 問題文(含コード&リンク):
構造体、及びポインタを用いて双方向循環リストを要素数を20個で構築し
指定した2つの番号(scanfを使う) で入れ替えを起こすCプログラムを作れ
[3] 環境
[3.1] Windows
[3.2] VC
[3.3] 言語:Cのみ
[4] 期限: 日曜昼12時まで
[5] その他の制限: 無制限
よろしくお願いします
>>320です
締め切りが来週月曜まで延長したので、どなたか今からでも回答をお願いできますでしょうか
512 :
デフォルトの名無しさん:2007/12/21(金) 11:35:30
[1] 情報処理演習
[2] 整数型配列a[]=(1、2、3、4、5、6、7、8、9、10)の要素の合計をポインタ変数を使って求めるプログラムをつくりなさい。
[3] 環境
[3.1] TurboLinux
[3.2] シェル コンソール gcc
[3.3] C++
[4] 期限: 2007年12月28日まで
[5] その他の制限: 無制限
不明な点があったらお手数ですがご質問下さい。
>>512 #include <stdio.h>
int main(){
int a[]={1,2,3,4,5,6,7,8,9,10},sum,*p;
for(p=a,sum=0;p-a<sizeof(a);++p)sum+=*p;printf("%d",*p);
return 0;}
514 :
513:2007/12/21(金) 12:32:45
>>512 すまん間違えた
#include <stdio.h>
int main(){
int a[]={1,2,3,4,5,6,7,8,9,10},sum,*p;
for(p=a,sum=0;p-a<sizeof(a);++p)sum+=*p;printf("%d",sum);
return 0;}
515 :
506:2007/12/21(金) 13:12:24
すいません。学生なので今週中は今日までです。わかりにくくてすいませんでした。よろしくお願いします。
嘘こけ。土曜も出られるだろ。
517 :
506:2007/12/21(金) 13:24:58
土・日曜日に添削されて月曜日に返されるので締め切りは金曜日です。なんか色々条件が後からついてすいません。はっきり金曜日までと書くべきでした。
#include <stdio.h>
template <typename T>
int sum(T *begin, T *end)
{
int sum = 0;
do { sum += *begin; } while (++begin != end);
return sum;
}
int main(int, argv *[])
上のは
>>512宛てね。間違えて送信しちゃった。
int main(int, argv *[])
{
int a[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
printf("%d", sum(a, a + 10) );
return 0;
}
指定された環境での動作チェックはできてないけど。
520 :
513:2007/12/21(金) 13:58:51
ああ、C++だったのかすまん
>>518-519 どうせならSTL使えよw
int sum = std::accumulate(a,a+10,0);
>>507 >seiseki.txtというファイルに 総生徒人数
>人数は10000人
人数決まっているのにわざわざファイルに書いてるの?
522 :
デフォルトの名無しさん:2007/12/21(金) 14:54:04
>>378 でやっても余りがちゃんと表示されないんですけど、
どこを直せばいいですか?
523 :
デフォルトの名無しさん:2007/12/21(金) 14:58:24
tanθの値を-360<=θ<=360の範囲で1°刻みにプログラムを作成すること。
ただし、tanは、自分で作った関数の中でのみ使用でき、θの値は
mainの中で決定し、関数へと受け渡すこと。
プログラムの中身
-360,○○○
-359,○○○
・
・
・
360, ○○○
このプログラムをお願いします。
if(x >> i){sum += j;}
を
if((x >> i)&1){sum += j;}
とかにすればおkだと思う。
525 :
507:2007/12/21(金) 15:15:36
>>521 ファイルの一行目が総生徒人数なのですが、それを開いてみると総生徒数は10000人でしたので一応書いてみました。多分一行目を変えても(例えば100人までとかにしても)動くプログラムにしなければいけないのだと思います。
526 :
デフォルトの名無しさん:2007/12/21(金) 15:17:19
[1]プログラミング演習
[2]モンテカルロ法で、
円周率 の近似値を計算せよ。
発生させる点の総数は適宜設定する(大きくすると精度が良くなるが、
計算時間がかかるかもしれない)。
ランダムな位置に点を発生させるには、
乱数rn, rn+1 を発生させて、これをx, y-座標とすればよい。
[3]Linux
[4]c言語
[5]1月5日まで
宜しくお願いいたします。
527 :
522:2007/12/21(金) 15:19:49
>>524 出来ました。
どうもありがとうございました。
>>526 #include <stdio.h>
#include <stdlib.h>
int main()
{
double i,imax,n;
double x,y,pi;
n=0.0;
imax=10000000.0; // 乱数の発生回数
for(i=0;i<=imax;i++) {
x=rand()/(RAND_MAX+1.0); //0以上1未満の乱数を生成
y=rand()/(RAND_MAX+1.0);
if((x*x+y*y)<1.0) { //0<=x,y<=1の範囲にある中心原点半径1の
n+=1.0; //扇形の中に乱数による点が入ったらカウントする
}
}
pi=n/imax*4.0; //半径1の円の面積すなわち円周率
printf("%f\n",pi);
return 0;
}
529 :
378:2007/12/21(金) 15:26:13
>>520 それやっちゃうと、「ポインタ変数を使って」を満たせなくならない?
aは配列変数だし。
>>320>>511 (1)
#include <stdio.h>
#define MAX_SIZE 100
char stack[MAX_SIZE], cur;
int push(char data){
if(cur >= MAX_SIZE)return 0;
stack[cur++] = data;return 1;
}
char pop(void){
if(cur <= 0)return 0;
return stack[--cur];
}
char top(void){
if(cur <= 0)return 0;
return stack[cur-1];
}
int main(){
while(1){
char c;
switch(c=getchar()){
case '+':case '-':
if(top() == '*' || top() == '/')printf("%c ",pop());
case '*':case '/':
push(c);
break;
case EOF:case '\n':
while((c=pop())!=0)printf("%c ",c);return 0;
default:
printf("%c ",c);break;}}}
>>531 うおそれ忘れてた
無粋な突っ込み入れてすんまそん
535 :
デフォルトの名無しさん:2007/12/21(金) 16:08:56
>>506 #include <iostream>
#include <fstream>
class Student{
int no, l, m, e;
friend std::ostream &operator << (std::ostream &os, Student &st){
os << st.no << " " << st.l << " " << st.m << " " << st.e;
return os;
}
friend std::istream &operator >> (std::istream &is, Student &st){
is >> st.no >> st.l >> st.m >> st.e;
return is;
}
public:
Student(){no = l = m = e = 0;}
Student operator + (Student &st){
Student ret;
ret.no = no + st.no, ret.l = l + st.l, ret.m = m + st.m, ret.e = e + st.e;
return ret;
}
};
int main(){
Student *p, sum;
int n;
std::ifstream ifs("seiseki.txt");
ifs >> n;
p = new Student[n];
for(int i = 0; i < n; ++i) ifs >> p[i];
for(int i = 0; i < n; ++i) sum = sum + p[i];
delete [] p;
return std::cout << sum << std::endl, 0;
}
537 :
506:2007/12/21(金) 16:30:41
>>536 何度ビルドしても 0 0 0 0と表示されてしまいます。お手数ですがよろしくお願いします。
>>506 データ数いらないというのを今理解した……一応使うが。
#include <iostream>
#include <fstream>
class Student{
int no, l, m, e;
friend std::ostream &operator << (std::ostream &os, Student &st){
os << st.no << " " << st.l << " " << st.m << " " << st.e;
return os;
}
friend std::istream &operator >> (std::istream &is, Student &st){
is >> st.no >> st.l >> st.m >> st.e;
return is;
}
public:
Student(){no = l = m = e = 0;}
Student operator + (Student &st){
Student ret;
ret.no = no + st.no, ret.l = l + st.l, ret.m = m + st.m, ret.e = e + st.e;
return ret;
}
};
int main(){
Student tmp, sum;
int n;
std::ifstream ifs("seiseki.txt");
ifs >> n;
for(int i = 0; i < n; ++i){
ifs >> tmp;
sum = sum + tmp;
}
return std::cout << sum << std::endl, 0;
}
>>523 -360から0までって表示させる意味あんのか?
542 :
541:2007/12/21(金) 17:26:50
テスト
テスト
544 :
543:2007/12/21(金) 17:29:14
あ、空白空けられるじゃん
>>506 #include <iostream>
#include <fstream>
#include <cctype>
int main()
{
std::ifstream ifs("seiseki.txt");
int n, sum[3] = {0};
char buf[1024], *p;
ifs.getline(buf, sizeof(buf));
n = atoi(buf);
for(int i = 0; i < n; ++i){
ifs.getline(buf, sizeof(buf));
p = buf;
for(int j = 0; j < 3; ++j){
p = strchr(p, ',');
sum[j] += atoi((++p));
}
}
std::cout << sum[0] << " "<< sum[1] << " "<< sum[2] << std::endl;
return 0;
}
>>492 風呂に入らなければ間に合ったかも
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
struct gstudent
{
char name[20]; /*氏名*/
int height; /*身長*/
float weight; /*体重*/
long schols; /*奨学金*/
};
struct gstudent set_gstudent(char name[], int height, float weight, long schols)
{
struct gstudent result;
strcpy(result.name,name);
result.height=height;
result.weight=weight;
result.schols=schols;
return result;
}
void show_gstudent(struct gstudent *gs)
{
printf("%20s %3d %5.1f %ld\n",gs->name,gs->height,gs->weight,gs->schols);
}
int cmp_name(const void * gs1,const void * gs2)
{
return strcmp(((struct gstudent *)gs1)->name,((struct gstudent *)gs2)->name);
}
int cmp_height(const void * gs1,const void * gs2)
{
return ((struct gstudent *)gs1)->height-((struct gstudent *)gs2)->height;
}
int cmp_weight(const void * gs1,const void * gs2)
{
double temp=((struct gstudent *)gs1)->weight-((struct gstudent *)gs2)->weight;
if(temp>0)return 1;else if(temp<0)return -1;else return 0;
}
int cmp_schols(const void * gs1,const void * gs2)
{
return ((struct gstudent *)gs1)->schols-((struct gstudent *)gs2)->schols;
}
int main(int argc,char ** argv)
{
struct gstudent * pgs;int kensu,count,select;int (*funcs[])(const void *,const void *)={cmp_name,cmp_height,cmp_weight,cmp_schols};
kensu=set_gstudentsFromFile(argv[1],&pgs);
if(pgs==NULL){perror("データ登録失敗");return 1;}
printf("ソート\n氏名(1),身長(2),体重(3),奨学金(4):");
select=getch();
printf("%c\n",select);
if('1'<=select && select<='4')
{
qsort(pgs,kensu,sizeof(struct gstudent),funcs[select-'1']);
}
else
{
printf("並べ替えしません。\n");
}
printf(" 氏 名 身長 体重 奨学金\n");
for(count=0;count<kensu;count++)show_gstudent(pgs+count);
if('1'<=select && select<='4')
{
printf("ファイルに書き込みますか? Yes(1),No(2):");
select=0;
while(!('2'==select || select=='1'))select=getch();
printf("%c\n",select);
if(select=='1')
{
if(setstudentsToFile(argv[1],pgs,kensu)!=0)printf("書き込みました。\n");
}
}
free(pgs);
return 0;
}
550 :
506:2007/12/22(土) 02:02:27
>>546 やっぱりできません。値が000と出力されてしまいます。テキストデータは以下のような感じです。わかる方お願いします。
10000
1,59,51,92
2,30,14,91
3,60,67,73
>>550 exeのフォルダをコマンドプロンプトで開いてseiseki.txtを置いた後に実行してみる。
C:\task\Debug>task506.exe
0 0 0
C:\task\Debug>dir seiseki.txt
ドライブ C のボリューム ラベルがありません。
ボリューム シリアル番号は B070-AEA4 です
C:\task\Debug のディレクトリ
ファイルが見つかりません
C:\task\Debug>copy C:\task\task506\seiseki.txt .
1 個のファイルをコピーしました。
C:\task\Debug>task506.exe
149 132 256
552 :
デフォルトの名無しさん:2007/12/22(土) 10:35:17
553 :
デフォルトの名無しさん:2007/12/22(土) 11:56:37
[1] 授業単元:情報処理
[2] 問題文: tanθの値-360°<=θ<=360°の範囲で1°刻みでファイルに出力する
プログラミングを作成すること。ただしC言語のtanという命令は、自分が作った
関数の中のみ使用でき、θの値はmainの中で決定し、関数へと受け渡すこと。
また、π=3.14159265358979である。
ファイルの中身
-360,○○○
-359,○○○
・
・
360,○○○
[3] 環境
[3.1]XP
[3.2] コンパイラ名とバージョン: visual studio 2005
[3.3] 言語: C言語++
[4] 期限: 12/25
[5] その他の制限:なし
よろしくお願いします。
>>552 確認は全くしていない
#include <stdio.h>
#include <stdlib.h>
#define FMAX 100 /* ファイル名最大値 */
#define LMAX 300 /* 1文の最大値 */
int main() {
FILE *fp;
char filename[FMAX], line[LMAX];
int count=1;
/* ここにプログラムを書く */
printf("ファイル名:");
fgets(filename, sizeof(filename)-1, stdin);
fp = fopen(filename, "r");
if (fp == NULL) {
printf("[%s]は開けません", filename);
exit(1);
}
while (fgets(line, sizeof(line)-1, fp) != NULL) {
printf("%3d : %s", count, line);
count++;
}
return 0;
}
>>553 とりあえず作った。問題文にあるとおりにしか作ってないから
#include <stdio.h>
#include <math.h>
#define PI 3.14159265358979
void myfunc(FILE* fp, int d)
{
 :double rad = PI /180 * d;
 :double result;
 :int degree = abs( d );
 :if( degree != 90 && degree != 270 ) {
 : :result = tan( rad );
 : :fprintf( fp, "%d,%lf\n", d, result );
 :} else {/* 別になんにも条件が与えられてないので放置 */
 : :fprintf( fp, "%d,undefined\n", d );
 :}
}
int main( void )
{
 :int i;
 :FILE* fp;
 :fp = fopen( "result.txt", "w" );
 :for( i = -360; i <= 360; i++ ) {
 : :myfunc( fp, i );
 :}
 :fclose(fp);
 :return 0;
}
556 :
555:2007/12/22(土) 13:10:00
>>554 無責任だったので実行もやってみたら、間違ってた。
fgets(filename, sizeof(filename)-1, stdin);
の後に、改行を消す為
filename[strlen(filename)-1] = '\0';
を追加してくれ。
#include <string.h>もインクルードとして追加ね。
[1] 授業単元:コンピュータプログラミング
[2] 問題文:自分と友人の学生番号と氏名を英数小文字で入力し、
1文字飛ばしでアドレスと文字を縦に表示するプログラムを作成しなさい。
[3] 環境
[3.1] OS: XP
[3.2] コンパイラ名とバージョン:Fujitsu Fortran & C
[3.3] 言語: C
[4] 期限: 12/22
[5] その他の制限: なし
よろしくお願いします。
>>558 >自分と友人の学生番号と氏名
無いと作れない
>1文字飛ばしでアドレスと文字を縦に表示する
ここがよくわからないから詳しく
560 :
デフォルトの名無しさん:2007/12/22(土) 15:04:05
>>559 >自分と友人の学生番号と氏名
自分0123jokoizumi 友人4567renon
>1文字飛ばしでアドレスと文字を縦に表示する
縦表示 自分なら02jkiuiみたいなです
>>558 #include <stdio.h>
#include <string.h>
int main(void)
{
int i, len;
char myid[32], myname[128], fid[32], fname[128];
scanf("%s%s%s%s", myid, myname, fid, fname);
puts("my id");
for(i = 0, len = strlen(myid); i < len; i += 2)
printf("%p:%c\n", &myid[i], myid[i]);
puts("my name");
for(i = 0, len = strlen(myname); i < len; i += 2)
printf("%p:%c\n", &myname[i], myname[i]);
puts("friend id");
for(i = 0, len = strlen(fid); i < len; i += 2)
printf("%p:%c\n", &fid[i], fid[i]);
puts("friend name");
for(i = 0, len = strlen(fname); i < len; i += 2)
printf("%p:%c\n", &fname[i], fname[i]);
return 0;
}
>>510 #include <stdio.h>
#include <stdlib.h>
struct node{
int data;
struct node *prev,*next;
} *list;
void print(void){
struct node *cur = list->next;
for(; cur != list; cur = cur->next)printf("%d->",cur->data);printf("%d\n",list->data);}
void insert(int data){
if(list == NULL){//空の時
list = malloc(sizeof(struct node));
list->data = data;list->prev = list->next = list;
} else {
struct node *newnode = malloc(sizeof(struct node));
newnode->data = data;newnode->prev = list;newnode->next = list->next;
list->next = newnode;newnode->next->prev = newnode;list = newnode;}}
void swap(int a, int b){
struct node *t[2];int temp;
if(a==b)return;
for(t[0] = list; a!=0 && b!=0; --a,--b,t[0] = t[0]->next);
for(--a,--b,t[1] = t[0]->next; a!=0 && b!=0; --a,--b,t[1] = t[1]->next);
temp = t[0]->data;t[0]->data = t[1]->data;t[1]->data = temp;}
int main(){
int i,n,m;
for(i=1; i<=20; ++i) insert(i);print();
printf("入れ替える要素を空白区切りで入力してください:");scanf("%d %d",&n,&m);
swap(n,m);print();return 0;}
563 :
デフォルトの名無しさん:2007/12/22(土) 15:17:29
div_t result = div(12,5);
printf("12/5=%d…%d",result.quot,result.rem);
こんな関数があるのを今日初めて知った
お前らこれ使えよ
565 :
558:2007/12/22(土) 15:35:09
[1] 授業単元:
double型の初期値(たとえば1.5)に適当な数(たとえば1.9)をかけることを繰り返す。
double型の精度を超えたら反復を停止する。∞に発散したと考え、∞になった旨を表示せよ。
[2] 問題文(含コード&リンク):()
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc 3.4
[3.3] 言語: C
[4] 期限: 明日
[5] その他の制限: なし
お願いします
567 :
デフォルトの名無しさん:2007/12/22(土) 21:05:23
javaとc++ってどっちがむずかしいの?
リンゴとブドウはどっちがおいしい?って聞くようなもんだ
569 :
デフォルトの名無しさん:2007/12/22(土) 23:01:58
[1] 授業単元:情報処理
[2] 問題文:画像を読み込み、その画像の特定領域の切り出しを行い別ファイル
として出力しなさい。
[3] 環境
[3.1]XP
[3.2] コンパイラ名とバージョン: visual studio 2005
[3.3] 言語: C言語++
[4] 期限: 12/23
[5] その他の制限:特になし
現在ダイアログベースを使って作成中です。
ペイントのようにマウスを使って範囲を指定し、その部分を切り出して保存をしたい。
ファイルの読み込みと書き出しはできるので、切り出し部分を教えていただければ幸いです。
よろしくお願いします。
範囲というのが矩形オンリーなら、vectorに突っ込んだデータから
左下右上座標を入力して、新しいvectorを返すようなクラスを作ればいいんじゃない?
>>569 質問を質問で返すようで悪いけど…
MFC使ったwindowsプログラムかな?
あと元の画像の形式とか、
現状でわかっていることをできるだけ教えてくれるとありがたい(例:マウスでの座標指定はできる等)。
572 :
デフォルトの名無しさん:2007/12/23(日) 01:37:10
573 :
569:2007/12/23(日) 02:39:19
>>570 C++は始めたばかりで、vectorは使ったことがないのですが
vectorに突っ込むデータとは当然画像データのことですよね?
特定の領域の画像データを普通の配列に突っ込むのとvectorに突っ込むのとでは
どういった違いがあるのでしょうか?
>>571 MFC使ったwindowsプログラムです。
元の画像の形式はDICOMですが、読み込む部分は作成済みなので、bitmapとかと
同様に扱えるはずです。
画像データとして、2次元配列に画素が入っている状態。(a[x][y])
ちなみに画像は2000*2000ととても大きいです。
また、マウスでの座標指定というのが良く分かりませんが、
マウスを左クリックした時のアクションとして、座標を表示することはできます。
かなり言葉足らずですが、宜しくお願いします。
>>573 >>570じゃないけど、vectorは一言でいえば可変長配列。
あらかじめ大きさが固定されてるなら配列で処理しても問題ないよ
575 :
506:2007/12/23(日) 04:26:48
>>551 出来ました。お礼が遅れてすいませんでした!本当にありがとうございました。
どっちみち切り取る方は可変にならざるを得ないから、固定配列じゃ厳しい。
2000*2000確保しておけばいいけども、いくらなんでも
切り取るのが常に矩形だとして、
マウスで二点クリックすると、それぞれの座標(10,10) (199,199)とかが得られる。(画像の左下を(0,0)とした場合)
それらの座標で形成される矩形領域がa[x][y]のどこにあたるかを考えて、
新しい配列なりvectorなりに、その部分だけコピーすればいい。
上の例を固定配列で原始的に書くとこんな感じ
char new_img[190][190]
int x=0;
int y=0;
for(int i=10; i<200; ++i){
y=0;
for(int j=10; j<200 ++j){
new_img[x][y] = a[i][j];
++y;
}
++x;
}
どう考えても可変長配列にすべきだな。
コンポーネント数とか色深度とかもあるだろうから、こう単純にはいかないでしょうが。
577 :
デフォルトの名無しさん:2007/12/23(日) 06:44:34
C++,Linux
ルーチンワークで、mi(x座標,y座標,拡大率a)という、
(x,y)にa倍の「み」という文字を表示するコマンドをつくりたいのですが
どうやってつくればよいでしょうか?
1倍の「み」は横幅縦幅ともに50くらいとしておねがいします。
できればforなどの基礎構文で
MFCかあ……MFCは分かんね
579 :
デフォルトの名無しさん:2007/12/23(日) 13:14:05
581 :
◆GBoGhxrIJs :2007/12/23(日) 16:34:07
[1] 授業単元: プログラミング実習
[2] 問題文(含コード&リンク):
(1)8個の整数型配列を宣言し、これらにあらかじめ適当な正の整数を入れる。
その後適当な整数値を読み込み、前の8個の整数の中から最も近い数を探し出力するプログラム
(2)3つの入力があり、1つ目は客の番号、2つ目は商品の番号、3つ目は商品の数を表す。
このような入力を何行か入れた後で「9,9,9」といれると客毎の受注総額を出力するプログラム
[3] 環境
[3.1] OS: WindowsXP
[3.2]gcc
[3.3] 言語: C
[4] 期限: 来年まで
[5] その他の制限: 特になし
よろしくお願いします。
[1] 授業単元:プログラミング
[2] 問題文:x log(x)の値を計算するプログラム。log(x)は自然対数
入力: xの値 xは正の実数で0を含まない。
出力: 「x=数値 x log(x)=計算結果」 結果は小数点以下8桁まで出力すること。
さらに、xの値を半分にして 出力を10回繰り返す
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C
[4] 期限:12/25
[5] その他の制限:なし
やってみたのですがxlog(x)の結果がおかしいです
どこがおかしいのでしょうか
#include<stdio.h>
#include<math.h>
int main(void)
{
double x;
scanf("%lf",&x);
printf("x=%8.6f xlog(x)=%10.8f\n",x,x*exp(x) ); x=x/2;
printf("x=%8.6f xlog(x)=%10.8f\n",x,x*exp(x) ); x=x/2;
printf("x=%8.6f xlog(x)=%10.8f\n",x,x*exp(x) ); x=x/2;
printf("x=%8.6f xlog(x)=%10.8f\n",x,x*exp(x) ); x=x/2;
printf("x=%8.6f xlog(x)=%10.8f\n",x,x*exp(x) ); x=x/2;
printf("x=%8.6f xlog(x)=%10.8f\n",x,x*exp(x) ); x=x/2;
printf("x=%8.6f xlog(x)=%10.8f\n",x,x*exp(x) ); x=x/2;
printf("x=%8.6f xlog(x)=%10.8f\n",x,x*exp(x) ); x=x/2;
printf("x=%8.6f xlog(x)=%10.8f\n",x,x*exp(x) ); x=x/2;
printf("x=%8.6f xlog(x)=%10.8f\n",x,x*exp(x) ); x=x/2;
return 0;
}
exp()関数は自然対数の底のx乗を計算する関数
xの自然対数(eを底とする対数)を計算する関数はlog()
>>584 使う関数が違うのでは?
x * ln(x) を計算したいのであればコードは
x*log(x)
とすべきでは。
exp(x) は eのx乗を返す
即レスありがとうございます!
>>532 ありがとうございました
丁寧な回答、感謝です
589 :
デフォルトの名無しさん:2007/12/24(月) 00:44:18
[1] 授業単元:コンピュータ実習
[2] 問題文:半径rの面積を求めて返却する関数circ_areaを
作成するプログラミング
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン:Mingw
[3.3] 言語: C++
[4] 期限: 12月25日0:00まで
[5] その他の制限:特になし
教科書を参考に実際にやってみたのですが、
半径に関係なく面積が1になってしまいます。
素人なもんでどこが間違っているのかわかりません。
どなたか訂正お願いします。
#include <iostream>
using namespace std;
double circ_area(double r);
int main()
{
double r;
cout << "半径:";
cin >> r;
cout << "面積は" << circ_area << "です。 \n";
return 0;
}
double circ_area(double r)
{
double circ_area = r * r * 3.14;
return circ_area;
}
>>589 表示したいのは circ_area(r) じゃね?
>double circ_area(double r)
>{
> double circ_area = r * r * 3.14;
> return circ_area;
>}
これっておkなんだっけ?
592 :
591:2007/12/24(月) 00:54:40
ああ、関数はグローバルで変数はローカルだからおkか
すまそ
593 :
デフォルトの名無しさん:2007/12/24(月) 01:00:43
>>590 即レスありがとうございます
circ_area(r)にしたら無事できました
>>589 多分、関数と変数の区別がつけばおk。
それにしても、常に1になるって、だれか解説キボンヌ
関数のアドレスを出力してるからじゃない。コンパイル時に↓みたいな警告でなかった?(これはうちのコンパイラだけど)
main.cpp:11: warning: the address of 'double circ_area(double)', will always evaluate as 'true'
>>594 ポインタとしての定数値がtrueに変換されたと思われますが、なぜなのかはわかりません。
c++ の文法で、c ではこうはならない。
>>582 締切期限が一年以上あるんだから、自分で何とかしろ
598 :
デフォルトの名無しさん:2007/12/24(月) 04:16:49
[1] 授業単元:プログラミング
[2] 問題文:1.正の整数値を読み込んで、その桁数を出力するプログラム
2. 1からnまでの和を求めるプログラムをfor文を使って。
[3] 環境
[3.1] OS:XP
[3.2] コンパイラ名とバージョン:Mingw
[3.3] 言語: C++
[4] 期限: 12月25日まで
[5] その他の制限:特になし
初心者のため、まったくわかりません;;
599 :
デフォルトの名無しさん:2007/12/24(月) 08:47:24
[1] 授業単元: プログラミング
[2] 問題文:ポインター関数、構造体、maloc関数を用いたプログラム
ファイルデータに入力された数字を表示させる。
[3] 環境
[3.1] OS: Vista
[3.2] コンパイラ名とバージョン:Borland C++ Compiler
[3.3] 言語: C言語
[4] 期限: 2007年12月24日 15:00まで
[5] その他の制限: 特になし
malloc関数の使い方と構造体の使い方がまったくわからないです;;
>>599 読み込むデータの例は?現状の情報だと構造体もmallocも必要ない。
601 :
デフォルトの名無しさん:2007/12/24(月) 10:09:49
>>600 そうなんですか
ただ、ポインター関数と構造体とmallocを全部使ってプログラムを作れと言われただけで
データはなんでも良いと思ったから数字にしたんです。
簡単なソートでいいと言われたので
例 下のような数字の列で
23
45
34
・
・
こんなふうに表示させるつもりなんですが
構造体やmalloc関数をどういうときに使うのかがよくわからないので
すみません。
603 :
デフォルトの名無しさん:2007/12/24(月) 10:39:43
>>602 そうだったんですか
なるほど
それと、ソートを置いてもらってすみませんが
長くて、わかりにくいんです。
逆にこんなソートは私にはつくれそうにありませんし
すみませんが簡単なソートをつくってもらえませんか
読み込むデータの例は
名前 年齢
mari 13
kai 45
・ ・
ってばらばらなデータを読み込んで
年齢が低い順から高い順に表示するようにしたいんです
お願いしますm(_ _)m
単方向でソートとな('A`)
条件のところにソートなんぞ書いて無いから別にいいじゃん。
605 :
デフォルトの名無しさん:2007/12/24(月) 11:22:32
>>604 しかし、先ほど、貼っていただいたソートですが、mallocがどこにも使われていないんですけど、
callocをmallocに変えても問題ないんですか?
こりゃうっかりしてたごめん。
引数のカンマを掛け算の演算子にしとけばおk。
[1] 授業単元:c++基礎
[2] 問題文:3行4列の行列の積を求めるプログラム
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C++
[4] 期限:[2007年12月24日23:59まで]
よろしくお願いします
608 :
608:2007/12/24(月) 12:23:04
すいません訂正します
[1] 授業単元:c++基礎
[2] 問題文:4行3列の行列と3行4列の行列の積を求めるプログラム
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C++
[4] 期限:[2007年12月24日23:59まで]
よろしくお願いします
[1] 授業単元:プログラミング
[2] 問題文: 整数を保存するキューを作成しなさい.キューのサイズは固定で10とする.
標準入力から空白で区切られた整数を読み込み,キューに順番に追加していきなさい.
ただし,11個目の整数を読み込み時点で,キューが満杯であるため,追加できない.その
ため,キューの先頭の値を取り出し,削除した後に11個目の値を追加すること.このとき,
取り出した先頭の値を標準出力に出力すること.
12個目の整数を読み込んだ時点でも,同様の操作を繰り返し実行すること.
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C
[4] 期限:2007/12/27まで
[5] その他の制限:無し
よろしくお願いします
[1] 授業単元: プログラミング実習
[2] 問題文(含コード&リンク):
ある数字(2万桁前後)が記載されたテキストファイルを読み込み、
指定した桁から指定した桁までを取り出すプログラムをつくれ
[3] 環境
[3.1] OS: WindowsXP
[3.2]gcc
[3.3] 言語: C
[4] 期限: 明日まで
[5] その他の制限: 特になし
よろしくお願いします。
>>614 こんな感じで。
#include <stdio.h>
int main(){
char filename[FILENAME_MAX];
FILE *fp;
int begin, end;
printf("ファイル名:");
scanf("%s", filename);
printf("何桁目から?:");
scanf("%d", &begin);
printf("何桁目まで?:");
scanf("%d", &end);
fp = fopen(filename, "r");
if(fp==NULL){
printf("%sのオープンに失敗しました", filename);
return 1;
}
fseek(fp,-begin,SEEK_END);
for(; begin >= end; --begin)printf("%c", fgetc(fp));
fclose(fp);
return 0;
}
616 :
615:2007/12/24(月) 16:08:13
すまん、
printf("何桁目から?:");
scanf("%d", &begin);
printf("何桁目まで?:");
scanf("%d", &end);
↓
printf("何桁目から?:");
scanf("%d", &end);
printf("何桁目まで?:");
scanf("%d", &begin);
こう変えてくれ。
というか普通は「1桁目から3桁目」みたいな感じで指定するよな
(「3桁目から1桁目」じゃないよな)
617 :
お願いします:2007/12/24(月) 16:09:17
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):n段のピラミッド(二等辺三角形)を表示。第i段目は(n-1)*2+1となるようにする。
[3] 環境
[3.1] OS:windows
[3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
[3.3] 言語:C++
[4] 期限: (12月25日のレポート提出時まで)
[5] その他の制限: for文でお願いします。endlは使わないでお願いします。
>>617 無駄にクラスにしてみた。本当に無駄だけど。
#include <iostream>
class Pyramid{
friend std::ostream& operator << (std::ostream& os, const Pyramid& p);
const int n;
public:
Pyramid(int x) : n(x){}
};
std::ostream& operator << (std::ostream& os, const Pyramid& p){
for(int i=0; i<p.n; ++i){
for(int j=0; j<p.n-1-i; ++j) os << ' ';
for(int j=0; j<2*i+1; ++j) os << '*';
os << '\n';
}
return os << std::endl;
}
int main(){
unsigned n;
std::cout << "何段にする?:";
std::cin >> n;
std::cout << Pyramid(n);
return 0;
}
>>616 うまくいかないんですが・・・
123456789
というデータにたいして1〜3を指定すると789が出てしまいます
620 :
618:2007/12/24(月) 16:30:14
すまん、endl使うなって見逃してた。
return os << std::endl;
↓
return os;
>>619 すまん、題意を思い切り勘違いしてたw
一の位とかとごっちゃになってた
#include <stdio.h>
int main(){
char filename[FILENAME_MAX];
FILE *fp;
int begin, end;
printf("ファイル名:");
scanf("%s", filename);
printf("何桁目から?:");
scanf("%d", &begin);
printf("何桁目まで?:");
scanf("%d", &end);
fp = fopen(filename, "r");
if(fp==NULL){
printf("%sのオープンに失敗しました", filename);
return 1;
}
for(; begin <= end; ++begin)printf("%c", fgetc(fp));
fclose(fp);
return 0;
}
>>621 できました。どうもありがとうございました
>>621 できたと思ったら、できてませんでした。
2桁目からとか指定しても1桁目からになってしまいます
>>623 すまん、俺間違えすぎだなw
for(; begin <= end; ++begin)printf("%c", fgetc(fp));
↓
fseek(fp,begin,SEEK_SET);
for(; begin <= end; ++begin)printf("%c", fgetc(fp));
多分こう。
625 :
624:2007/12/24(月) 16:46:27
あーまた間違えた
>>624は
fseek(fp,begin-1,SEEK_SET);
for(; begin <= end; ++begin)printf("%c", fgetc(fp));
の間違い
間違えすぎw
一度試してみてから訂正すればいいのに…
[1] 授業単元:パーソナルワークステーション演習
[2] 問題文(含コード&リンク):
フロッピーディスク(2HD pc98フォーマット)の内容全てを読み出し、イメージファイル
として保存する関数を作成しなさい。
ディスクドライブに対するアクセスに関しては以下の関数を用いる、
B_READ(int drive, int seek, int sect, unsigned char* buffer)
drive : 0x9070(ドライブ0)〜0x9370(ドライブ3)
seek : 読み出し開始位置
31〜24bit:セクタ長 0b00=128 0b01=256 0b10=512 0b11=1024
23〜16bit:物理トラック番号
15〜 8bit:物理サイド番号
7〜 0bit:物理セクタ番号
sect : 読み出す論理セクタ数
buffer : データ格納領域へのポインタ(ただし大きさはセクタ長単位)
[3] 環境
[3.1] OS:Human68k Ver3.02
[3.2] コンパイラ名とバージョン: C Compiler PRO68k ver2.1 NEW KIT
[3.3] 言語: C言語
[4] 期限: できる限り早く
[5] その他の制限:
ヒープ領域は最大で64KBまでしか確保されず、標準ライブラリのfopen等で数KB消費される。
また、足りなくなったときに自動的に拡張されることはない。
ファイルへの書き出しには標準関数を使って良い。ファイルオープンの際、MS-DOSに倣って
バイナリモードの指定をすること。
メリークリスマス。
せっかくだからサンタに関連ある問題きぼんぬ。
631 :
608:2007/12/24(月) 19:10:52
>>610 遅くなってしまったけど
どうもありがとう
[1] 授業単元:クリスマス
[2] 問題文(含コード&リンク):
サンタが家々を順番に回り、プレゼントを配ろうとしている。ただし、以下の条件がある。
・プレゼントを配るべき家は50件ある。
・家々の距離はデータファイルから与えられる。
・そりにはA,B,Cの3種類があり、それぞれ速さが違い、使用回数の制限がある。
・A→速さ5、回数制限8
・B→速さ3、回数制限16
・C→速さ1、回数制限25
・どの家から配り始め、どの家で配り終えるかは任意に選べる物とする
以上の条件の下で、最短ルートを導け
なお、データファイルは以下の形式で与えられる
(家の番号は0〜49)
0 1 15 //0番目の家から1場面の家までの距離は15、の意味
0 2 2
...
49 48 8
[3] 環境
[3.3] 言語: どちらでも可
[4] 期限: 25日夜明けまで
[5] その他の制限:
メリークリスマス!
>>632 こんな課題を授業で出されたら大変だなw
635 :
お願いします:2007/12/24(月) 20:04:09
下記は左下三角形のプログラムだけどこれを二等辺三角形に書き換えてください。早急にお願いします。
#include<iostream>
using namespace std;
int main()
{
int n;
cin >> n;
for (int i = 1;i <= n; i++){
for(int j = 1;j <= (i-1)*2+1; j++)
cout << '*';
cout << '\n';
}
return 0;
}
>左下三角形
初めて聞いた
638 :
お願いします:2007/12/24(月) 20:20:04
>左下直角三角形です。すいません。
#include<iostream>
using namespace std;
int main()
{
int n;
cin >> n;
for (int i = 1;i <= n; i++){
//↓↓↓↓↓↓↓
printf("%*s",n-i,"");
//↑↑↑↑↑↑↑
for(int j = 1;j <= (i-1)*2+1; j++)
cout << '*';
cout << '\n';
}
return 0;
}
640 :
お願いします:2007/12/24(月) 20:30:29
[1] 授業単元:C++ プログラム
[2] 問題文(含コード&リンク):
#include<iostream>
using namespace std;
int main()
{
char retry;
int month;
do {
int month;
cout << "kisetu wo motomemasu.\nnanngatu desuka:";
cin >> month;
if (month >= 3 && month <= 5)
cout <<"soreha harudesu.\n";
else if (month >= 6 && month <= 8)
cout <<"soreha natudesu.\n";
else if (month >= 9 && month <= 11 )
cout <<"soreha akidesu.\n";
else if (month == 12 || month == 1 || month == 2)
cout <<"soreha huyudesu.\n";
cout <<"mouichido? Y...Yes/N...No:";
cin >> retry;
} while(retry == 'Y' || retry == 'y');
return 0;
}
これは入力された月の季節を表示するプログラムですが、これを1〜12以外の値が入力された場合再入力させるようにdo文の二重ループで修正してください。
[3] 環境
[3.3] 言語: どちらでも可
[4] 期限: 今日中
[5] その他の制限:
do文で二重ループでお願いします。
>>640 #include<iostream>
using namespace std;
int main()
{
char retry;
int month;
do {
int month;
do{
cout << "kisetu wo motomemasu.\nnanngatu desuka:";
cin >> month;
}while(month<1||12<month);
if (month >= 3 && month <= 5)
cout <<"soreha harudesu.\n";
else if (month >= 6 && month <= 8)
cout <<"soreha natudesu.\n";
else if (month >= 9 && month <= 11 )
cout <<"soreha akidesu.\n";
else if (month == 12 || month == 1 || month == 2)
cout <<"soreha huyudesu.\n";
cout <<"mouichido? Y...Yes/N...No:";
cin >> retry;
} while(retry == 'Y' || retry == 'y');
return 0;
}
>>640 これできないんじゃ地味に単位とれないんじゃね?
コード内 do{int month; のあとに do{ 挿入
そのあとのcout,cin のあとに }while(month<1 || month>12); を挿入
>>632 去年の秋のソフ開午後2より厳しくねぇ!?
645 :
お願いします:2007/12/24(月) 20:55:58
[1] 授業単元:C++ プログラム
[2] 問題文(含コード&リンク):
#include <ctime>
#include <cstdlib>
#include <iostream>
using namespace std;
int main()
{
srand(time(NULL));
int no = rand() % 100;
int x;
cout << "数当てゲーム!!\n";
cout << "0-99の数をあててください。\n";
do {
cout << "いくつ?:";
cin >> x;
if (x > no)
cout << "\aもっと小さな数です.\n";
else if (x < no)
cout << "\aもっと大きな数です.\n";
} while (x != no);
cout << "正解です.\n";
return 0;
}
これは0〜99の数を当てさせるゲームですが、これをプレーヤーが入力できる回数に制限を設けたプログラムを作成してください。制限内数に当てられなかった場合は、正解を表示して終了する。
[3] 環境
[3.3] 言語: C++
[4] 期限: 今日中
[5] その他の制限:
goto文でお願いします。
646 :
642:2007/12/24(月) 20:59:54
ありゃ、ソリの速さ関係してくるな……
647 :
お願いします:2007/12/24(月) 21:07:54
>>645 #include <ctime>
#include <cstdlib>
#include <iostream>
using namespace std;
int main()
{
srand(time(NULL));
int no = rand() % 100;
int x;
int count=1;//ここ追加!(代入している数字は回答可能回数)
cout << "数当てゲーム!!\n";
cout << "0-99の数をあててください。\n";
do {
if((--count)<0)goto pogee;
cout << "いくつ?:";
cin >> x;
if (x > no)
cout << "\aもっと小さな数です.\n";
else if (x < no)
cout << "\aもっと大きな数です.\n";
} while (x != no);
cout << "正解です.\n";
return 0;
pogee:
cout<<"残念!正解は "<<no<<" でした。";
return 0;
}
//もしcoutの構文間違えてたりしたら直してくれ(C++やったことない)
649 :
デフォルトの名無しさん:2007/12/24(月) 21:41:26
>>644 内容的にはパソコン甲子園のルパンの問題と似てる。
べたに検索すれば
>>642のように膨大な時間がかかる典型的問題。
>>632 50はやっぱり厳しい。
ヒントきぼん。
>>650 最短経路問題とか動的計画法でぐぐれば参考になるものが見つかると思うよ
ダイクストラ法で解けるかな
653 :
デフォルトの名無しさん:2007/12/24(月) 22:15:18
C++,Linux
ルーチンワークで、mi(x座標,y座標,拡大率a)という、
(x,y)にa倍の「み」という文字を表示するコマンドをつくりたいのですが
どうやってつくればよいでしょうか?
1倍の「み」は横幅縦幅ともに50くらいとしておねがいします。
できればforなどの基礎構文で
>>654 +-h11-+-h12-+-h13-+-h14-+
| | | | |
v11 v12 v13 v14 v15
| | | | |
+-h21-+-h22-+-h23-+-h24-+
| | | | |
v21 v22 v23 v24 v25
| | | | |
として表を作ってみた。どう見ても規則性が見つからない。
--
h11 h12 h13 h14 v11 v12 v13 v14 v15 h21 h22 h23 h24 v21 v22 v23 v24 v25
1
2 0 0 0 0 1 1 1 1 1 0 0 0 0 1 1 1 1 1
3 0 0 0 1 1 1 1 1 1 0 0 0 0 1 1 1 1 1
4 0 0 1 0 1 1 1 1 1 0 0 0 0 1 1 1 1 1
5 0 1 0 1 1 1 1 1 1 0 0 0 0 1 1 1 1 1
6 1 1 1 0 1 1 1 1 1 0 0 0 0 1 1 1 1 1
7 0 1 1 1 1 1 1 0 1 0 0 0 0 1 1 1 1 1
8 0 0 1 1 1 1 1 0 1 0 0 0 0 1 1 1 1 1
9 1 0 0 0 1 1 1 1 1 0 0 0 0 1 1 1 1 1
10 1 1 0 1 1 1 1 1 1 0 0 0 0 1 1 1 1 1
11 0 1 1 0 1 1 0 1 0 0 0 1 1 1 1 1 1 1
12 0 1 1 1 0 1 0 0 1 1 1 1 0 1 1 1 1 1
--以下略
まぁ、v21、v24、v25は必ず描かれるとかって微妙なルールはあるようだけど。
656 :
デフォルトの名無しさん:2007/12/25(火) 15:26:30
>>656 #include <stdio.h>
#define FILENAME "kozukai.csv"
#define ITEM_LENGTH 32
int main(void)
{
FILE *fp = fopen(FILENAME, "w");
if (fp == NULL) {
fprintf(stderr, "file open error.\n");
return 1;
}
char item[ITEM_LENGTH];
int num, amount;
int money = 0;
fprintf(fp, "項目,収入,支出,計\n");
while (1) {
printf("0:終了、1:収入追加、2:支出追加 >"); scanf("%d", &num);
if (num == 0) { printf("終了します.\n"); break; }
printf("項目:"); scanf("%s", item);
printf("金額:"); scanf("%d", &amount);
fprintf(fp, "%s,", item);
if (num == 1) { money += amount; fprintf(fp, "%d,,%d\n", amount, money); }
else if (num == 2) { money -= amount; fprintf(fp, ",%d,%d\n", amount, money); }
}
fclose(fp);
return 0;
}
>>658 とりあえず 1)だけ
#include <stdio.h>
#include <stdlib.h>
void ToBinaryString(char *result, int arg)
{
int i, j;
for (i = 0, j = 0; i < 39; ++i, ++j) {
result[38 - j] = (arg & 1) == 0? '0': '1'; arg >>= 1;
if ((i + 1) % 4 == 0) { ++j; result[38 - j] = ' '; }
}
result[39] = '\0';
}
int main(int argc, char **argv)
{
char buff[40];
switch (argv[1][0]) {
case 'o':
printf("%o\n", atoi(argv[2])); break;
case 'd':
printf("%d\n", atoi(argv[2])); break;
case 'x':
printf("%x\n", atoi(argv[2])); break;
case 'b':
ToBinaryString(buff, atoi(argv[2])); printf("%s\n", buff); break;
}
return 0;
}
660 :
デフォルトの名無しさん:2007/12/25(火) 18:57:50
>>647 面倒なので確認はしていない
#include<stdio.h>
int main(void){
int a[] = { 0, 1, 4, 17, 84, 1301, 1285, 64,
81, 6942, 327869, 16, 6421, 80, 20, 327861,
68, 21, 32084, 32080, 69, 326580, 39038, 6484,
5, 6420, 65, 35194, 38484, 52605, 1365, 7709,
7773, 32081, 33365, 38485, 39773, 449453, 51838, 39765,
385453, 7701, 39805, 32085, 38516, 38517, 1349, 6485,
7765, 39797, 33405, 85},
b[] = { 0, 1, 4, 5},
c[] = {15,13,12, 5, 4},
d[] = {112,0,112,0,112,0,112,0,112},
n, i, j;
printf("n = ");
scanf("%d", &n);
j = a[n - 2];
for(i = 0; i < 4; i++)
d[i * 2 + 1] = b[j % 4],
j /= 4;
for(i = 0; i < 5; i++)
d[i * 2] |= c[j % 5],
j /= 5;
for(i = 0; i < 7; i++){
if(n > 1 && n < 54)
for(j = 0; j < 9; j++)
printf("%c", (d[8 - j] >> i & 1) * 3 + ' ');
printf("\n");
}
return 0;
}
662 :
1/2:2007/12/25(火) 20:58:22
>>658 #include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#define BUFFSIZE 32
void StrToUpper(char *str)
{
char *p;
for (p = str; *p != '\0'; ++p) *p = toupper(*p);
}
void StrToLower(char *str)
{
char *p;
for (p = str; *p != '\0'; ++p) *p = tolower(*p);
}
void StrLUConvert(char *str)
{
char *p;
for (p = str; *p != '\0'; ++p) {
if (isupper(*p)) *p = tolower(*p);
else if (islower(*p)) *p = toupper(*p);
}
}
663 :
2/2:2007/12/25(火) 21:10:04
int comparator(const void *x, const void *y)
{
return (*(char*)x < *(char*)y)? -1: (*(char*)x == *(char*)y)? 0: 1;
}
int main(int argc, char **argv)
{
char buff[BUFFSIZE];
while (fgets(buff, BUFFSIZE, stdin) != NULL) {
switch (argv[1][0]) {
case 'u':
StrToUpper(buff);
break;
case 'l':
StrToLower(buff);
break;
case 'r':
StrLUConvert(buff);
break;
case 's':
qsort(buff, strlen(buff) - 1, sizeof(char), comparator);
break;
}
puts(buff);
}
return 0;
}
665 :
デフォルトの名無しさん:2007/12/25(火) 22:00:40
[1] 授業単元:プログラミング
[2] 問題文:画像の特定の部分をraw画像として出力しなさい
[3] 環境
[3.1] XP
[3.2] コンパイラ名とバージョン: visual studio 2005
[3.3] 言語: C言語++
[4] 期限: 12/26
[5] その他の制限:特になし
画像の特定の部分は座標をfor文で繰り返して、
新たに配列を作った配列に画素値を放り込めばいいんだろうけど
raw画像の出力ってのがよく分かりません。そもそもraw画像ってなんだろ?
fwrite()を使うのか?
知ってる人いましたら教えてください。
>>665 うにっくすの標準画像ふぉーまっとじゃなかったっけ?
C言語++って何。
669 :
665:2007/12/26(水) 00:29:14
RAW画像ってデジカメのあれのことを言ってるのかな。
機種によってバラバラなんだけど、どれに合わせれば良いのかな。斜めに予想してDNGにでもすれば良いのかなぁ。
[1] 授業単元:プログラミング演習
[2] 問題文(含コード&リンク):
今char型二次元配列になにかしらの文字列がはいっている。
その文字列を1行ずつある関数に引数として送れ。
その関数は、送られてきた文字列が
前に送られてきた文字列と一致すれば1、2、3と足していくようにして、
一致しなければ0に戻す。
例えば
a
a
a
b
b
c
c
だったら
0
1
2
0
1
0
1と言う風にです。
[3] 環境
[3.1] OS: (Windows/Linux/等々) Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: ([2007年12月26日15:00まで]
[5] その他の制限: 関数内で表示するようにしてください。
>>671 #include <stdio.h>
int foo(const char *str) {
static const char *prev_str = 0;
static int counter = 0;
if (prev_str && !strcmp(str, prev_str))
printf("%d\n", ++counter);
else
printf("%d\n", counter = 0);
prev_str = str;
}
int main() {
int i;
const char *str[] = { "a", "a", "a", "b", "b", "c", "c" };
for (i = 0; i < sizeof(str) / sizeof(char *); i++)
foo(str[i]);
return 0;
}
673 :
デフォルトの名無しさん:2007/12/26(水) 12:16:09
れ
674 :
デフォルトの名無しさん:2007/12/26(水) 12:39:22
>>660 このプログラムをつくってください。
お願いします。
ファイルを読み込むとかはわかるんですが
そこからがどうやっていけばいいのかわからないんです。
すいません、割と切実なので
>>629お願いします。
>>676 68K環境無いからほとんどの人は無理。
679 :
678:2007/12/26(水) 14:27:33
あ、デバッグ用の関数を残したままだったw
printtime関数は丸丸消しちゃっていいよ。
>>609 #include <stdio.h>
#define SIZE 10
int queue[SIZE+1];
int front,back;
int enqueue(int x){
if(front == (back+1)%(SIZE+1))return 0;
queue[back] = x;
back = (back+1)%(SIZE+1);
return 1;
}
int dequeue(void){
int x = queue[front];
front = (front+1)%(SIZE+1);
return x;
}
int main(){
while(1){
int x;
printf("Please Input An Integer:");
scanf("%d", &x);
if(!enqueue(x)){
printf("Dequeue:%d\n", dequeue());
enqueue(x);
}
}
}
681 :
デフォルトの名無しさん:2007/12/26(水) 15:35:19
【質問テンプレ】
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク): 与えられた表の縦・横の値の平均と合計を、
それぞれの行・列ごとに求め、出力するプログラムを作成しなさい。
ただし、縦・横のデータは10個未満としそれぞれの数字は整数とする。
また、出力は右詰め6桁で出力することとし、平均における小数点以下は1桁まで表示する。
平均の行・列および、合計の行・列がぶつかる箇所は、表全体の平均と合計を計算した結果を表示する。
・入力された行・列の数が10未満であることを、プログラム内でチェックすること。
[3] 環境
[3.1] OS: Windows XP
[3.2] コンパイラ名とバージョン: Visual studio 6.0
[3.3] 言語: C
[4] 期限: 2008年1月6日
お願いします。
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):
中央値を求める関数を作成し、その関数を使用して中央値を出力するプログラムを作成せよ。
関数は下記の通りとする
in 入力が格納された配列のポインタ
num 入力値の数
戻り値 計算結果
入力に関して。
キーボードから入力数と入力値をスペースひとつあけて一行で入力する。
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: Study C
[3.3] 言語: C
[4] 期限: 2008年1月8日まで
よろしくお願いします。
683 :
デフォルトの名無しさん:2007/12/26(水) 15:51:51
>>678-679 作っていただいてありがとうございます!!
あの、つくっていただいて申し訳ないんですけど
ファイルを読み込む場所はわかるのですが、
読み込むデータの名前はargv[1]の部分を変えるんですか?
そこがわからないんです。
>>683 たとえばプログラム名がa.exeでデータファイル名がlog.datなら、
>a log.dat
と起動すればいい
もちろんargv[1]のところに直接ファイル名を入れてもいいけど。
その場合、argcの値をチェックしてるところも消しておいてね
コマンドライン引数って、特に指定が無い限り使わない方がいいのかな。
上の方でも、上手く行きませんて言ってた奴いたし。
686 :
デフォルトの名無しさん:2007/12/26(水) 16:35:53
>>684 ありがとうございました!
おかげでうまく起動しました。
>>682 無駄に再帰してみました
#include <stdio.h>
#include <stdlib.h>
double median(const double *in, const unsigned num){
double *buf, min, max, tmp;unsigned i;
if(num == 1)return in[0];
if(num == 2)return (in[0]+in[1])/2.0;
buf = malloc(sizeof(double) * (num-2));
min = in[0]<in[1] ? in[0] : in[1];
max = in[0]>in[1] ? in[0] : in[1];
for(i=2; i<num; ++i){
if(in[i]<min){
buf[i-2] = min;
min = in[i];
} else if(in[i]>max){
buf[i-2] = max;
max = in[i];
} else buf[i-2] = in[i];
}
tmp = median(buf, num-2);
free(buf);
return tmp;}
int main(){
unsigned n, i;double *array;
scanf("%u", &n);
array = malloc(sizeof(double) * n);
for(i=0; i<n; ++i) scanf("%lf", array+i);
printf("median:%.2f", median(array, n));
return 0;}
>>682 #include <stdio.h>
#include <stdlib.h>
#include <string.h>
int cmp(const void *a,const void *b)
{ if ((*(double *)a) < (*(double *)b)) return 1;
else if ((*(double *)a) > (*(double *)b)) return -1;
else return 0; }
double Medium()
{double *dbuff=NULL; int num,i; char buff[1024] = {'\0'};
char *gDlim = " \t\n"; char *temp,*p;
puts("入力値の数を打ち込んでください");
scanf("%d",&num);
getchar();
if(num <= 0){ fprintf(stderr,"入力値が不正です"); exit(EXIT_FAILURE);
}
dbuff = malloc(sizeof(double)*num);
puts("数値を入力");
fgets(buff,sizeof(buff),stdin);
temp = strtok(buff,gDlim);
i = 0;
do{
dbuff[i] = strtod(temp,&p);
i++;
if(i==num)
break;
}while(temp = strtok(NULL,gDlim));
qsort(&dbuff[0],num,sizeof(double),cmp);
return dbuff[num/2];
}
689 :
デフォルトの名無しさん:2007/12/26(水) 19:46:54
C言語で質問なんですが
printfとsprintf_sの違いってなんでしょうか?
書き方が異なるだけ?
>>689 printf、sprintfはANCII準拠の関数。
sprintf_sはM$独自の安全性を向上さした関数。
>>689 printf・・・標準出力に書式出力
sprintf・・・文字列に書式付き出力(バッファのサイズ指定なし)
sprintf_s・・・文字列に書式付き出力(バッファのサイズ指定あり)
ANCIIってw
ANSIとASCIIがごっちゃw
#include <stdio.h>
int main()
{
int i = 123;
char a[4] = "ABC";
printf("数値表示 <%5i>\n", i);
printf("数値左詰 <%-5i>\n", i);
printf("数値前ゼロ <%.5i>\n", i);
printf("文字表示 <%5s>\n", a);
printf("文字左詰 <%-5s>\n", a);
printf("16進小文字 <%x>\n", i);
printf("16進大文字 <%X>\n", i);
return 0;
}
表示結果
これをc++ Builder 6で起動させて表示するにはどうすればいいんでしょうか。
プロジェクトを作成して、ソースファイルを作って、実行すればいいよ
どんな感じで表示されるんでしょうか。
スレ違い
C++Builderなんて使うのが悪い。
男は端末からgccを使う。
>>681 入力はファイル読み込み?それともソース埋め込み?
699 :
デフォルトの名無しさん:2007/12/26(水) 22:20:59
>>698 その二つの違いさえも、よく分かりません…。
数字は、パソコンのキーボードから直接入力します。
内容:
[1] 授業単元: 情報処理
[2] 問題文(含コード&リンク):
3次方程式を解くプログラムの作成し、
(1) 問題をどのように理解し、どのようなアルゴリズム(算法)で処理を進め方。
(2) それをフローチャート(流れ図)で表せ。
という宿題なのですが、前スレでニュートン法を利用した3次関数のプログラムを拾ったので
そのプログラムを利用して(1)(2)をお願いします。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5586.txt [3] 環境
[3.1] OS: Windows
[3.3] 言語: C
[4] 期限: [2008年1月5日まで]
以前、違う宿題のフローチャートをここで作成していただきました。
前回同様、面倒くさい宿題で申し訳ないのですが、どなたか宜しくお願いします。
701 :
689:2007/12/27(木) 01:49:46
702 :
デフォルトの名無しさん:2007/12/27(木) 02:23:07
ねえ次のテンプレから学校名も入れてくれない?
[0] 学校名:
とかさ。
あと学籍番号と氏名も。親の収入も書いてくれるとうれしいな
[1] 授業単元: プログラミング
[2] 問題文:以下の通り
[3] 環境
[3.1] Windows XP
[3.2] コンパイラ名とバージョン: VS2005
[3.3] 言語: C
[4] 期限 無期限
[5] その他の制限:皿をAからBへ移動する部分を関数化する。
[問題]ハノイの塔のプログラムを作成しなさい。
尚、移動する部分は関数として定義しなさい。
出力例は以下となる。
皿の数を入力 3
move 1 from A to C
move 2 from A to B
move 1 from C to B
move 3 from A to C
move 1 from B to A
move 2 from B to C
move 1 from A to C
皿の数: 3枚
移動回数 7回
>>703 そんなもんは要らん。学校名だけでいい。
学部も学科も妥協したんだからよけいなことを言うなw
706 :
デフォルトの名無しさん:2007/12/27(木) 06:25:16
>>706 inputA.txtのみ解いてみた。
あってるかどうかわからない。
#include <stdio.h>
double ACapacitance()
{
FILE *fp = fopen("inputA.txt","r");
double Adata[9] = {0.0};
double ASum = 0;
int i,n;
for(i=0; i<9; i++)
fscanf(fp,"%d %lf",&n,&Adata[i]);
for(i=0; i<8; i++)
ASum += ((Adata[i]-Adata[i+1])*5/2 + Adata[i+1]*5);
fclose(fp);
return ASum;
}
int main()
{
printf("%lf μF\n",ACapacitance());
return 0;
}
>>704 #include <stdio.h>
static int cnt;
void hanoi(char a, char b, char c, int n){
if(n > 1) hanoi(a, c, b, n - 1);
cnt++;
printf("move %d from %c to %c\n", n, a, b);
if(n > 1) hanoi(b, a, c, n - 1);
}
int main(void){
int n;
printf("皿の数を入力 ");
scanf("%d", &n);
hanoi('A', 'B', 'C', n);
printf("皿の数: %d枚\n", n);
printf("移動回数 %d回\n", cnt);
return 0;
}
>>704 先越された……
>皿をAからBへ移動する部分を関数化する
てこういうことじゃないのかorz
#include <stdio.h>
void move_plate(const int plate, const char from, const char to){
printf("move %d from %c to %c\n", plate, from, to);
}
int plate_hanoi(const unsigned num, const char from, const char to){
const int tmp = ('A'+'B'+'C') - (from+to); //仮置き場
int count = 0;
if (num == 1) {
move_plate(1, from, to);
return 1;
}
count += plate_hanoi(num-1, from, tmp);
move_plate(num, from, to);
count += plate_hanoi(num-1, tmp, to);
return count+1;
}
int main(){
unsigned plate_num = 0, count = 0;
printf("皿の数を入力 ");
scanf("%d", &plate_num);
if (plate_num != 0) count = plate_hanoi(plate_num, 'A', 'C');
printf("皿の数:%d枚\n移動回数:%d回", plate_num, count);
return 0;
}
711 :
デフォルトの名無しさん:2007/12/27(木) 18:09:57
>>707 ありがとうございます!!
inputAの答えは自分でも計算した結果あってるのですが
このプログラムはすべてのデータを一つのプログラムで起動すると思うので
残りのデータもファイル名を変えるだけで起動するプログラムを作ってくれませんか
お願いいたします。m(_ _)m
>>711 ファイル名はコマンドライン引き数で渡すようにした。で、気になったから一応電圧で割っておいた。
#include <stdio.h>
#include <stdlib.h>
double ACapacitance(const char * fileName)
{
const int Interval = 5;
const int Voltage = 3;
FILE *fp = fopen(fileName, "r");
if (fp == NULL) return 0;
int lines = 0;
for (int ch = 0; (ch = fgetc(fp)) != EOF;) if (ch == '\n') ++lines;
rewind(fp);
double * Adata = malloc(sizeof(* Adata) * lines);
for (int i = 0; i < lines; ++i) {
fscanf(fp, "%*d %lf", & Adata[i]);
}
fclose(fp);
double ASum = 0;
for (int i = 0; i < lines - 1; ++i) {
ASum += ((Adata[i] - Adata[i + 1]) * Interval / 2 + Adata[i + 1] * 5);
}
return ASum / Voltage;
}
int main(int argc, char ** argv)
{
if (argc < 2) {
fprintf(stderr, "Usage:%s <filename>.\n", argv[0]);
return 1;
}
printf("%g μF\n", ACapacitance(argv[1]));
return 0;
}
713 :
デフォルトの名無しさん:2007/12/27(木) 19:13:30
>>712 ありがとうございます!
助かりました。^^
秒数とか電圧とか、整数でいいもんかねw
715 :
707:2007/12/27(木) 19:57:59
Q = I *t
でQ = C*Vだから
C = I *t/Vか
電圧で割るの忘れてたな俺
隣あったデータの差をとるだけなのに
わざわざ配列確保する意味ないだろ常考
#include <stdio.h>
#define V 3.0
double capacitance(const char *filename) {
FILE *fp = fopen(filename,"r");
double q = 0, t, u, i, j;
fscanf(fp,"%lf %lf",&u,&j);
while(!feof(fp)){
fscanf(fp,"%lf %lf",&t,&i);
q += ((j-i)*(t-u)/2 + i*(t-u));
u = t; j = i;
}
fclose(fp);
return q/V;
}
int main(){
printf("%lf μF\n",capacitance("inputA.txt"));
printf("%lf μF\n",capacitance("inputB.txt"));
printf("%lf μF\n",capacitance("inputC.txt"));
return 0;
}
>>710 信教の自由ということもあるし、他人に強制しないかぎりは全然問題なし.
氏は割合に良心的な(お金を払った分の価値はある)著作があるので特に指弾する必要はないと考えている。
というか、なにを根拠に「きもい」と判断したの?
宗教パワー全開すぎてドン引きしたわ、ついていけん
倫理的に考えれば、信仰なんて人の自由だけどね
それをどう感じるかも逆に人の自由
問題はそれを引き金にして争いに発展させる行為だな
自分は自分、他人は他人という意識をもって、
他人の考えに動じたりせず、自分の信念を貫く姿勢が重要
信念を貫くために他人を攻撃しなきゃいけないようなら、それは偽りの信念だし、
認めてもらわなきゃ気がすまないっていうのも、芯としては脆い
逆をいえば、そういった思考がよぎったら、まだまだ信念を確立させられていない証拠
つか、KY結城はブログとか本に宗教全開で書いてたりするだろ?
信教の自由を考えるなら、宗教と関係ない場所に宗教の話とか普通書かねーって。
どう考えても頭おかしい。
俺キリスト教徒、かっこいい?みたいな?かっこよくねーよwwwwwwwwwきもwwwww
722 :
デフォルトの名無しさん:2007/12/28(金) 02:18:09
変数てxとXは区別されますか?
>信教の自由を考えるなら、宗教と関係ない場所に宗教の話とか普通書かねーって。
自分の信仰について書くかどうかと他人の信教の自由を認めるかどうかは全く無関係だろ。
>>722 されるよ。
724 :
708:2007/12/28(金) 03:36:25
>>704 >>709のがいいかも
#include <stdio.h>
static int cnt;
static void hanoi(char a, char b, char c, int n){
if(n > 1) hanoi(a, c, b, n - 1);
if(n > 0) cnt++, printf("move %d from %c to %c\n", n, a, c);
if(n > 1) hanoi(b, a, c, n - 1);
}
void move_plate(char a, char c, int n){
char b = 'B';
hanoi(a, b, c, n);
}
int main(void){
int n;
printf("皿の数を入力 ");
scanf("%d", &n);
move_plate('A', 'C', n);
printf("皿の数: %d枚\n", n);
printf("移動回数 %d回\n", cnt);
return 0;
}
725 :
681:2007/12/28(金) 09:10:47
726 :
デフォルトの名無しさん:2007/12/28(金) 10:11:30
[1] 授業単元:
[2] 問題文(含コード&リンク):
下の使用例のように使える、C言語のprintf関数と同様の書式が使えるostreamのマニピュレータを作成しなさい。
フォーマット指定と食い違った場合はbad_format例外を投げること。
また、printfの書式に加えて、クラスなどの型を出力するための書式として%tを定義しなさい。
std::cout << cformat("%05.2d : %4.3f : %s") << 12 << 5.87 << "abc";
実行結果> 012 : 5.870 : abc
[3] 環境
[3.1] OS:任意
[3.2] コンパイラ名とバージョン:任意
[3.3] 言語:C++
[4] 期限:無期限
[5] その他の制限:
まあ、暇な人はどうぞ。
728 :
727:2007/12/28(金) 13:43:57
失礼、実行例を訂正
012 : 5.870 : abc
>>727 printf()同様というが、どこまで再現するかで難易度が随分変わるんだが。
# 勿論、%t以外は全部任せるとしても。
全部で。
あるいは再現度が高い方が高得点ということで。
>>724 ありがとうございます。
しかし実行速度も記述の仕方によって結構変わるんだな・・。
>>724 皿の移動回数を求めるカウンタに用いる記憶クラスをstaticとしていますが、
autoとはどごが違うのでしょうか?
外部と内部で記憶位置や記憶寿命が異なるのは解るんですが・・。
>>732 グローバル変数の記憶クラスはstaticを付けても付けなくてもstaticで、決してautoにはならない。
(autoってのは、普通のローカル変数みたいに、ブロックを抜けると消えて無くなる奴ね)
このstaticは記憶クラスを指定するものじゃなくて、変数を別のソースファイルから参照できないようにするもの。
>>733 ではブロック外で変数を宣言した場合、ブロック内での宣言時は自動でautoになるが、
ブロック外での宣言時にはstaticになるってことですか。
>>733 関数内のstaticは
>>734 グローバル部分に書いた場合は,そのソースコード内のみ有効なスコープになる変数
>ソースコード内のみ有効
関数内よりかは有効なスコープが広くなるのか・・。
#include <stdio.h>
int val1;
static int val2;
int main()
{
int val3;
static int val4;
return 0;
}
--
としたとき、
val1:グローバルスコープ(従ってオブジェクトにシンボルが残る)
val2:ファイルスコープ
val3:関数スコープ
val4:関数スコープ
なので、別にコンパイルしたオブジェクトにもval1があるとぶつかる。
#include <stdio.h> //
>>725 分量の都合でエラーチェックなどは割愛
int main()
{
printf("Input:\n");
int rows;
int columns;
scanf("%d,%d", & rows, & columns);
printf("data[%d, %d]:\n", rows, columns);
int arrays[9][9];
for (int ir = 0; ir < rows; ++ir) {
for (int ic = 0; ic < columns; ++ic) {
scanf("%d%*c", & arrays[ir][ic]);
}
}
int allSum = 0;
int sums[9] = {0, };
for (int ir = 0; ir < rows; ++ir) {
int sum = 0;
for (int ic = 0; ic < columns; ++ic) {
printf("%6d", arrays[ir][ic]);
sum += arrays[ir][ic];
sums[ic] += arrays[ir][ic];
allSum += arrays[ir][ic];
}
printf("%6.1f%6d\n", sum / (double) columns, sum);
}
for (int ic = 0; ic < columns; ++ic) printf("%6.1f", sums[ic] / (double) rows);
printf("%6.1f -\n", allSum / (double) rows / (double) columns);
for (int ic = 0; ic < columns; ++ic) printf("%6d", sums[ic]);
printf(" - %6d\n", allSum);
return 0;
}
739 :
725:2007/12/28(金) 23:38:34
>>738 ありがとうございます!
大変助かりました!
740 :
726:2007/12/29(土) 00:20:30
横からすまないが、
>>738の
scanf("%d%*c", & arrays[ir][ic]);
↑の文は一体何をしてる?
arraysに整数をぶっこむ所までは分かるけど
その後の、%*cがよく分からない。
743 :
デフォルトの名無しさん:2007/12/29(土) 01:21:03
>>741 数値の後のカンマか改行文字を取り除くために、一文字空読みしている。
# 尤も、改行文字は通常取り除く必要はないが。
>>745 コンパイル時のエラーメッセージを読めば全部書いてある
748 :
デフォルトの名無しさん:2007/12/29(土) 17:22:21
>>743 たぶんそうですw
なんか、たとえば、こことここを分けるとエラーでてコンパイルできんよ
みたいなところがあるじゃないですか?ウチそれがわからんくて・・
プログラムを2〜3個に分けても、コンパイルできればいいんだとおもいますw
大域変数のmain以外のファイルからの参照に関してはextrnキーワードを使うらしく、
例としては
gcc s1.c s2.c
gcc -o s.out s1.o s2.o
とするとs1とs2をリンクしてs.outを作成してくれるらしいです
>>748 externだ。
っていうか、エラーメッセージ晒せ。
そっちの方がたぶん早い。
>>745 ソース足らなくね?
とりあえず気づいたのは構造体をtypedefした名前と宣言で使ってる名前が違ってる。
751 :
745:2007/12/29(土) 23:19:26
>>751 fclostをfcloseに置換したら終わり。
>>752 コンパイルできました!!
ありがとうございます。
連投ごめんなさい。ここからが本題です。
[1] アルゴリズムとデータ構造
[2]
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5595.txt [3] 環境
[3.1] Windows
[3.2] Visual Studio 2005
[3.3] C
[4] 今年
@Dコマンドで削除するときに、本当に削除していいか確認メッセージの表示。
AIコマンドで学籍番号が4桁であることをチェックする。
BIコマンドで氏名や学番を改行だけにすると入ってしまうのを改良。
CIコマンドで既にある学番を入力するとエラーがでるようにする。
DIコマンドを入力した後でコマンド選択に戻れるようにする。
E即在データと同じ学番データ入力データ内に存在すると、
Rコマンド実行すると、同じ番号のレコードが挿入されてしまうのを改良。
F各コマンドに対応する関数を作り、分かりやすい形にする。
どれか一つでもいいのでよろしくお願いします。
※デバックはやってないし、動作も保障しない 書き忘れ
みんな楽しい課題があっていいな。
おいらも学生に戻りたい。
ところで、
>>727ってマニピュレータっていうのか?
流し込まれた変数が%の数に一致した時点でsprintf
→sprintfの戻り値が%の数と違ったらbad_format
→OKだったらostreamに流し込む
※%tはそのまま流し込む
リニアサーチなんて初めて聞いたわ
>>766 素朴な疑問なんだが、どの辺をC++じゃないと思ったの?
>流し込まれた変数が%の数に一致した時点でsprintf
>→sprintfの戻り値が%の数と違ったらbad_format
>→OKだったらostreamに流し込む
>※%tはそのまま流し込む
この辺
>>768 元の問題は>727であり、>764はそれの実装の話だと思うんだ。
まして、bad_formatやostreamがC++以外にあるとも思えないのだがそれでもC++と思えない理由が知りたい。
理由も何も
>>764はC++じゃなくて日本語で書かれてるんだよ
はぁ? あれだけ説明があっても自力でC++にできないんですか?
「コーディングもお願いします」位言っても罰は当たりませんよ。
772 :
764:2007/12/30(日) 21:57:49
>>766は「プログラム書けよw」というただの冗談(ちゃかし?)だろ?w
何をむきになってんだ
>>771
773 :
デフォルトの名無しさん:2007/12/30(日) 22:01:58
>>764 マニピュレータの正確な定義しらんからようわからんけど、
ちがうと思う。
774 :
773:2007/12/30(日) 22:52:33
777 :
デフォルトの名無しさん:2007/12/31(月) 02:35:10
C++の基本はC言語と同じなんですか?
グラフィックとかをいじる関数とかを
ひとつ教えて欲しいんですけど。
>>777 >C++の基本はC言語と同じなんですか?
どこまでを基本とするかは知らんが同じといえば同じ部分も多い。
グラフィック関係の標準関数については無い。というよりあるわけがない。
>>777 ここはC/C++の宿題を丸投げするスレです.スレ違いなので他へどうぞ
宿題かもーん。
年末まで宿題とはご苦労なことですね
プログラミングしながら年越しってのも良いものだよ。
おまいら良いお年を
年越しと同時にイく計画を立ててる
このために3日溜めたんだ
そんなに宿題溜め込むなよ
[1] 授業単元:クリスマス
[2] 問題文(含コード&リンク):
郵便屋さんが家々を順番に回り、年賀状を配ろうとしている。ただし、以下の条件がある。
・年賀状を配るべき家は50件ある。
・家々の距離はデータファイルから与えられる。
・自転車にはA,B,Cの3種類があり、それぞれ速さが違い、使用回数の制限がある。
・A→速さ5、回数制限8
・B→速さ3、回数制限16
・C→速さ1、回数制限25
・どの家から配り始め、どの家で配り終えるかは任意に選べる物とする
以上の条件の下で、最短ルートを導け
なお、データファイルは以下の形式で与えられる
(家の番号は0〜49)
0 1 15 //0番目の家から1場面の家までの距離は15、の意味
0 2 2
...
49 48 8
[3] 環境
[3.3] 言語: どちらでも可
[4] 期限: 1日昼過ぎまで
[5] その他の制限:
おめでとう!
>>787 ちょw単元をクリスマスから元日とか賀正とかに直した方がいいと思うぞw
790 :
おもち ◆pBCmNorh1. :2008/01/01(火) 04:25:08
[1] 授業単元: プログラミングU
[2] 問題文(含コード&リンク):
宿題1 定積分の計算
宿題2 年月日計算
の二つです。リンク先のZIPファイルに説明文と宿題に対応したファイルが入っています。
http://1rg.org/up/0752.zip (
>>1のアップローダーにはサイズが大きくてupできなかったので別のupローダを利用しました。)
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: c
[4] 期限: 2008年1月7日まで
[5] その他の制限:なし
明けましておめでとうございます。
宿題が2つ出たのですが、あまり理解できずに困っています。
申し訳ありませんが宜しくお願い致します。
792 :
デフォルトの名無しさん:2008/01/01(火) 17:58:12
>>791 或るTextの設問に附いて考えSourceを作成…
HelpApplicationにしようと考えたのですが?セグメンテーション違反…
仕方が無いので別動作のlibraryとして組込みました…
よく見るのに(int *)&hensuってのがあるんです。
これってなんで&の前にポインタ型の明示キャストしてるんですか?
hensuがint型じゃないとか
よく見るの?
同考えてもスレチだが。
>>659の
{
int i, j;
for (i = 0, j = 0; i < 39; ++i, ++j) {
result[38 - j] = (arg & 1) == 0? '0': '1'; arg >>= 1;
if ((i + 1) % 4 == 0) { ++j; result[38 - j] = ' '; }
}
result[39] = '\0';
}
この部分はどういった意味があるのでしょうか?
>>796 arg:二進数に変換したい数字(32ビットint)
result[]:変換結果(文字列)
{
int i,j;
for(i=0,j=0;i<39;++i,++j){
result[38-j]=(arg&1)==0?'0':'1';//argと1の論理積が0なら'0'、1なら'1'をresultに代入
arg>>=1;//argを右に1ビットシフト
if((i+1)%4==0){
++j;
result[38-j]=' ';//4ビットごとに空白を挿入
}
}
result[39]='\0';//resultの終端に\0を代入
}
多分これであってるはず。処理を順番に追っていけばすぐわかると思う。
それは10進数を2進数にする関数だが、基本的な2進数への
変換方法が分からないなら、そっちを先に勉強した方がいいかもね。
void ToBinaryString(char *result, int arg)
{
int i, j;
for (i = 0, j = 0; i < 39; ++i, ++j) {
if (arg % 2 == 0)
result[38 - j] = 0;
else
result[38 - j] = 1;
arg = arg / 2;
if ((i + 1) % 4 == 0) {
++j;
result[38 - j] = ' ';
}
}
result[39] = '\0';
}
しまった、result[38 - j] = '0'; と result[38 - j] = '1';だな
1とのand演算は、奇数なら1、偶数なら0を返す。
?演算子は無理して使わなくてもいい
>>796-799 >for (i = 0, j = 0; i < 39; ++i, ++j)
j<39の間違いだろ
>>799 ?演算子だと検索しにくいから、
条件演算子とか三項演算子って書いた方がいいと思う
そもそも、iとjと2つも使うから混乱するんじゃないか?
void ToBinaryString(char *result, int arg){
int i;
for (i = 0; i < 39; ++i){
if ( (i + 1) % 5 ){
result[38 - i] = '0' + !!(arg & 1);
arg >>= 1;
}
else result[38 - i] = ' ';
}
result[39] = '\0';
}
>>754さん分かりやすくしていただいてありがとうございました。
変更部分にメッセージ入れていただいたおかげで意味が分かりました。
しかし、また宿題が出てきました。
どなたかよろしくおねがいします。
[1] アルゴリズムとデータ構造
[2]
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5595.txt [3] 環境
[3.1] Windows
[3.2] Visual Studio 2005
[3.3] C
@H(ヘルプ)コマンド
コマンド?[I(挿入),D(削除),P(表示),W(書き込み),R(読み出し),X(終了)] :
と毎回出るのは煩わしいので「コマンド?」だけにして、
Hコマンドを投入すると各コマンドの説明が表示されるようにしなさい。
Aデータの追加
氏名と学籍番号の他に「eメールアドレス」と「担当教員名」も
格納できるようにしなさい。
BP(表示)コマンドでの範囲指定
Pコマンドで、表示範囲を指定できるようにせよ。
たとえば、前後の学籍番号を指定すると、その範囲だけが
表示されるようにせよ。
805 :
デフォルトの名無しさん:2008/01/03(木) 01:26:32
[1] 授業単元:情報処理
[2] 問題文
入力された整数を2進数に直して表示するプログラムを作成せよ。
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc 2.4
[3.3] 言語: C
[4] 期限:一月七日
[5] その他の制限:関数を用いる。
配列を使わずにできるのでしょうか?
806 :
デフォルトの名無しさん:2008/01/03(木) 01:41:07
>>805 #include <stdio.h>
int henkan(char x){
unsigned char i;
for(i=128;i>0;i=i
>>1){
if((i&x)==0){
printf("0");
}
else{
printf("1");
}
}
printf("\n");
return 0;
}
int main(){
unsigned char x;
scanf("%d",&x);
henkan(x);
return 0;
}
だめ?
[1] 授業単元:データ構造
[2] 問題文(含コード&リンク):
標準入力から10個の文字を入力し,文字型の配列に代入しなさい.
その配列に対して挿入ソートを行い,ソート後の配列の内容を標準出力に出力しなさい.
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン:gccコンパイラ
[3.3] 言語:C言語
[4] 期限: 1/7まで
[5] その他の制限:問題文には、以下の条件が追記されています
1. char data[10] を宣言する./*文字型の配列*/
2. fgetc() 関数を用い,標準入力から1文字ずつ読み込み,配列 data[] に代入する.
3. 配列 data[] に対して挿入ソートを実行する./*挿入ソーティング*/
4. ソート後の配列 sort[] の値を fputc() 関数を用いて1文字ずつ出力する./*挿入ソーティングの結果を適用*/
どなたかよろしくお願いします
>>807 #include <stdio.h>
int main(void){
int i, j;
char buf[10], tmp;
for(i = 0; i < 10; i++) buf[i] = fgetc(stdin);
for(i = 1; i < 10; i++){
tmp = buf[i];
for(j = i - 1; j >= 0 && tmp < buf[j]; j--)
buf[j + 1] = buf[j];
buf[j + 1] = tmp;
}
for(i = 0; i < 10; i++) fputc(buf[i], stdout);
return 0;
}
>>805 #include <stdio.h>
void f(int n)
{
int m = n >> 1;
if(m) f(m);
printf("%d", n & 1);
}
int main(void)
{
int n;
scanf("%d", &n);
f(n);
return 0;
}
2の補数も求めるにはどこを弄るか
811 :
700:2008/01/03(木) 16:33:12
どなたか
>>700やっていただけないでしょうか??
面倒な問題+他の人が作成したプログラムからのフローチャートなので難しいのかもですがよろしくお願いします。
フローチャートはスレ違い・・・
まぁ奇特な人が現れるのを待って頑張れ
814 :
700:2008/01/03(木) 17:48:57
奇特な人ですか…
信じて待ってみますw
816 :
815:2008/01/03(木) 18:53:22
分布データ格納用の配列サイズの宣言が何故か12で宣言してたわ、そこ11にしといて。39行目。
817 :
デフォルトの名無しさん:2008/01/03(木) 18:56:02
>>815を提出したら、C++をある程度できる子扱いになるなw
>>815 ありがとうございます、助かりました。
しかし、習っていないことばかりなのでこのまま提出したら怪しまれること間違いなしです。
まだ勉強を始めて間もないので簡単な構文のみを使った解答例をお願いできないでしょうか?
>>818 そういうときは、その他の制限にでも要望を書いておくべきだよ。
二度手間になるし。
>>818 宿題丸投げしてるんだから文句言えないだろう…常識的に考えて…
821 :
デフォルトの名無しさん:2008/01/03(木) 19:22:05
>>1にも注意書きしといたらいいんじゃないかな?
俺も今じゃ回答する側だが、
昔このスレで宿題やってもらったときは正直難しい回答を貰って困った経験がある。
そのときは何とかごまかしたが。
[1] 授業単元: プログラミング
[2] 問題文:
ランダムに文字列が書き込まれたtxtファイルから指定の文字列と文字列の間の
文字列を全て抜き出してtxtファイルへ出力する
改行は無視するが文字列の間にスペースが入っていると無効とする
例えば
指定文字1="abc" 指定文字列2="123"
txtファイルの中身
ppppabckkkkk123ww123ab
cooooooooooooooooooo12
3ssssssabcggggabcll123
abcmmm jj123a bc999123
の場合
abckkkkk123
abcooooooooooooooooooo123
abcll123
を新たにtextファイルに出力する
[3] 環境
[3.1] OS: Windows
[3.2] VisualStudio2005
[3.3] 言語: C,C++,WinAPI
[4] 期限:特になし
[5] その他の制限: 無し
>>818 簡単な構文とか勉強し始めといった不透明な要望は、
回答する側にとっては非常に理解し辛いのでなるべく明確に書いてくれ。
たとえば君がポインタを使えるのかどうか、
そしてベクターを使えるのかどうか、
さらに言えば配列がわかるのか、クラスや構造体を使ってよいのか等、回答者にはまったくわからない。
実はデキる奴だと思わせるチャンスではないか
はったりかます→勉強せざるを得なくなる→成長
いいことだらけだぜ
>>819>>820 その通りですね、要望にきちんと書いておくべきでした。
>>815さん、申し訳ないです。
>>823 そうですね、if文、while文、for文を学習して、今は配列の勉強をしているところです。
ポインタやベクター、クラスや構造体はまだ学習していません。
こんな感じだと伝わりますかね?
>>825 はったりかます→講師が騙されてよい成績をつける→おまいらの会社が騙されて採用→一緒に仕事するおまいら死亡
ああ
実にいいことだらけだとも
うちの会社はペーパーやるから丸投げな人はそこで落ちるな
無問題
[1] 授業単元:入社試験
830 :
815:2008/01/03(木) 19:59:48
>>830 いえいえ、空気読めてないのはどう見ても私のほうです。
お時間割いていただいて、ありがとうございます。
次回書き込むことがあれば、きちんと要望を明記したいと思います。皆さん、ご迷惑おかけしました。
math.h は cmathにしようぜぃ
構造体や記憶クラスから分からなくなってきた
>>822 > 3ssssssabcggggabcll123
例の3行目のところ、出力が「abcll123」になっているが、
その前に「abcgggg」とabcで始まるところがあるんだが、
abcが複数出てきた場合、最後に出てきたものから抜き出すの?
そっちの方が面倒くさい処理になりそうな気もする。
超初心者なのですが
Cで時間経過を表示するにはどうやったらよいのでしょうかね
たとえばループの前後で
時間表示
for{〜}
時間表示
のようにすると同じ時刻が表示されてしまいます。
どうもgettimeのライブラリをリンクして#includeで宣言した
ときの値で固定されてしまっているようなんですが。
スレ違いだが、秒単位での経過時間ならそれで計れるはずだよ。
しかし、winやlinuxのようなマルチタスクOSで厳密な経過時間を計ることは難しいな。
OSが提供しているAPIを使えば、それなりに精度は上げられるが。
今更って感じもしなくもないが、
>>700の出題者には日本語でおkと言いたい
838 :
700:2008/01/03(木) 21:59:37
>>837 確かにそうですね。
フローチャートを作成してくださいってことなんですが、文おかしかったですね。
すみません。
839 :
デフォルトの名無しさん:2008/01/03(木) 22:15:07
>>811 そもそも3次元方程式の解きかたがわからん
噛み砕いて説明してくれ
840 :
700:2008/01/03(木) 22:29:49
いや、正直
>>839さんより自分の方が理解してないと思います。
ニュートン法を用いた3次関数のプログラムも前スレで拾ったものですし…。
やっぱりここにいる方でも結構難しい宿題なんですかね??
841 :
デフォルトの名無しさん:2008/01/03(木) 22:32:20
とりあえず
(1) 問題をどのように理解し、どのようなアルゴリズム(算法)で処理を進め方。
を日本語に翻訳してください
842 :
700:2008/01/03(木) 22:36:17
(1) 問題をどのように理解し、どのようなアルゴリズム(算法)で処理を進めるかを書け。
ということなんですが、もうこの際フローチャートだけでいいです。
本当にすみません。
一応4次方程式まで解の公式があるの知ってるが…
おれ、3乗根の書き方知らないんだ
x^(1/3)
>>844 それ知ってもできねーだろうが。
俺も3次方程式はわからんけどw
数学得意じゃないおれは全くわからない。
というか、ニュートン法ってなに??
完成された数式を説明せよなんて問題が一番ウザイな。
情報系なら既にあるもの、アルゴリズムが完成したものは、
おとなしくブラックボックス化しておけばいい。
説明や証明は数学系がやるべきだと思うね。
三次方程式の解の公式はカルダノの解法と言われている。詳細はぐぐれ。結構簡単だ。
四次方程式はフェラーリの解法と言われているが、こちらはあまり簡単ではない。やはり詳細はぐぐれ。
全スレで拾ったていうのやめて全部つくってもらったら?
フローチャートもプログラムも。
数学できない自分はやる気すらおきないけどw
ニュートン法は理論も簡単だよ
問題はフローチャートを作らないといけないんでしょ?
このわけわからんスレの一体感は一年ぶりくらいだな
>>851 これを読む限りでは√2とかを手計算で求める方法が記述してあるようだ
で、それが
>>700のフローチャートとどう関係あるのか全くわからん
>>842 > (1) 問題をどのように理解し、どのようなアルゴリズム(算法)で処理を進めるかを書け。
> ということなんですが、もうこの際フローチャートだけでいいです。
フローチャートあったって仕方ないだろ?
ニュートン・ラプソン法を理解してないんだから…
要は、ニュートン・ラプソン法をフローチャート化しろと言ってるわけだが
俺にはフローチャートは書けない。
つか、書いてもそれに対する説明が wikipedia の説明程度には必要になると
思う
1. xの初期値を入力
2. イテレーションの最大回数を入力
3. xの変化量f(x)/f'(x)を求める
4. 変化量が十分小さければイテレーションを終了し7.へ
5. x - f(x)/f'(x)を新たなxとする
6. イテレーション回数が指定回数未満なら3.へ
7. 解を出力
>>811 べ、べつにあんたのお願いだからしてあげるってわけじゃないんだからねっ!
// /:/:::::::::::::: /:: /:::/ l:::::: \:::::::::::::::::::::::::::∨ン′! jヽ
l/:::::/::::::: /::_/_:/ l:::::| ::: \_:::::::::::::::::::',: K_/ ',
/::::〃:::::::,'::: / !:l ',:: lヽ´:::::\`:::::::::::::::: l |::::| l
. ,':::::::{{:::::::: |:::/ |:{ ヽl \|_ \ ::::::::::: | |::::| |
!:::::::/!::::::::jレ えテトミ ィ斗テ〒ア ::::::::::| |::::| |
|:::::/│::::::Wヾ r'::::::「 r'::::::: j バ ::::::: |_/ ::,|_,/
|:::/_厶:::::::|ハ Vヘ j !ヘイ/ ヘ :::: |:::::::::/:|
V ヾヘ::::|ヽハ ゞ '' ` ー'' レ'W^|):: /:: |
l ヽ|::::: { .:.:. ' ::.:.:. ,、 _ イ:::: /::::::|
|:::|:::::: 个 ヽ) イ/::::::::::':::: /::::::: |
|:::l::::::::::|::リ >t-r セヽ 〃:::::::::::::::/:::::::::::|
|::::l:::::::::|/ _/ /-} V /:::::::::::::: /::l::::::::: |
@ 解付近の初期値x(0)、収束値eps、試行回数limitの値を決めなさい!
A y = f(x)のx = x(n - 1)における接線と、x軸の交点のx座標をx(n)とするのよ!
B |x(n) - x(n - 1)|/|x(n)| < epsならば収束したとみなしなさい!
C limitに満たない場合はAに戻り、limitを超えた場合は収束しなかったとみなすのよっ!
Aの式はテイラー展開の1次近似なんだからね!
Bの式はf(x) = 0になるわけじゃないから、勘違いしないでよっ!
例えば、f(x)とx軸が交わらない場合でも、交わっているとみなす場合があるんだから!
>>700のソースで、a = 0, b = 10000000, c = 0, d = 0.00001, 初期値 = 1, 試行回数 = 100
とした場合収束したことになっちゃうんだからっ!
時々ここの住人がすごいって思うときがあるんだよね。
三流大学の俺にはなにをいってるかわからないけど、すごいってことだけはわかったw
860 :
デフォルトの名無しさん:2008/01/04(金) 00:13:29
>>857 なんだかよくわからんごちゃごちゃしたものが
なんだかよくわからんごちゃごちゃしたもんになってる
というかそれを見ても質問者は絶対図を作れる能力もってないでしょw
高卒就職の俺は、口調だけ読んでコーラ吹いてる。
>>854 確かに。時々あるね。
こういう雰囲気。
にしても
>>861の言うとおり図にする能力はもっているのだろうか。
しかし、このスレの人は図にしてくれる優しさをもっているだろうか。
>>864 なんだ、
これは振りか?
とりあえず、MS2000をインストールし始めました。
>>834 ありがとうございます。そういうことです
abcの後にabcがあれば前のabcは無視して次のabcから123までを抜き出して欲しい
C,C++,WinAPIなら何を使ってもいいと言われてるんで、WinAPIでファイルを読み込む
ところまではできたんですが、肝心の文字列を抜き出すのが分からないです
とりあえずファイルを読み込むまではこんな感じで書きました
〜省略〜
HANDLE hFile;
DWORD dwAcc,dwSize;
char *lpszBuf;
HGLOBAL hMem;
〜省略〜
hFile=CreateFile("in.txt",GENERIC_READ|GENERIC_WRITE|0,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
if(hFile==INVALID_HANDLE_VALUE)
MessageBox(hWnd,"読み込みエラー","読み込みエラー",MB_OK);
else
{
dwSize=GetFileSize(hFile,NULL);
hMem=GlobalAlloc(GHND,sizeof(char)*dwSize);
lpszBuf=(char *)GlobalLock(hMem);//ファイルサイズ分の領域を確保
ReadFile(hFile,lpszBuf,dwSize,&dwAcc,NULL);//lpszBufに読み込む
}
〜省略〜
ニュートン法って言うのはねぇ、
関数 f(x)=0 となる x を求めるためのアルゴリズム。
で、どうやって求めるかというと、
ある適当な点(初期値とも言う) x0 における、 y=f(x) という曲線の接線の方程式を求めるわけ。
で、その曲線が y=0 となる x の点=x1 を求めると、
x0 より x1 の方が f(x)=0 の解に近づいているってこと。
但し、これが成り立つ条件は吟味してね。
で、x1 の方が近いということで、次は x1 で接線を求めてというのを繰り返えしていく。
どんどん繰り返すと目標の誤差の範囲内に入ってくるので、その時の xn を出力すればいいだけ。
つか、三次ごときでニュートン法ってのも分からんけどな……
ニュートン法って情報系の学科じゃ必ずといっていいほどやるもんじゃないの?
Fランでもやったなぁ
もう覚えてないけど
まじかよwwFラン以下か俺の大学wwww
そうじゃなくて、一々誤差がどーこーなるまで繰り返すってのがちょっとなぁ……
解の公式使えばいいじゃねーかって思う
ニュートン法は五次でも六次でもそれ以上でも使えるよ
>>873 3次方程式はあくまで練習のためということなんだろう
解の公式があるからプログラムの吐いた答えが正しいかどうか、学生が分かる。
実際には公式がない方程式(指数函数を含んでいたりして)を数値的に解きたいわけだし。
質問者は『前スレ』から拾ってきたっていってたから別にニュートン法が大事じゃなくて3次方程式をとくプログラムとチャートが欲しいんじゃないの?
俺の勘違い?
>>876 俺もそう思う
三次方程式を解くプログラムであって、
ニュートン法は質問者が勝手に持ち出しただけだろ
以下解の公式を用いた3次方程式のプログラムとフローチャートの作成が始まります。
やっぱりな(´ー`)
乙www
>>880 荒らし専門のおれだが久々に一体感に感動した
マジで1年前もこんな感じのあった気がするんだが
質問者はもちっと勉強してから宿題投下すべきだと思うんだぜ
しょうがないでしょ。
ここに来てる時点で。
それよりみんな乙。
今来た俺が若干悔しいw
>>883 ありがとう。゜(゚´Д`゚)゜。
今までずっとやってたけど上手くいかなくて泣きそうになってた
次はこれを理解する作業に移ります