C/C++の宿題片付けま ..
595:デフォルトの名無しさん
09/07/04 13:34:22
[1] 授業単元: 関係演算子
[2] 問題文(含コード&リンク):
どんな計算式でもいいが、10で割ると余りが0になる場合だけをprintf文で表示させろ
[3] 環境
[3.1] OS: (Windows)
[3.2] コンパイラ名とバージョン: gcc )
[3.3] 言語: (C/C++/どちらでも可)
[4] 期限: 明後日まで
[5] その他の制限: 制限なし
596:デフォルトの名無しさん
09/07/04 13:53:08
>>595
#include <stdio.h>
int main(void){
int n = 100;
if( n%10 == 0 ){
printf("%dは10の倍数\n");
}
return 0;
}
こういう意味でおk?
597:デフォルトの名無しさん
09/07/04 13:54:51
>>596
訂正:
printf => printf("%dは10の倍数\n", n);
598:デフォルトの名無しさん
09/07/04 14:01:36
どんな計算式の、計算式が重要。n=100か?
599:デフォルトの名無しさん
09/07/04 14:09:58
>>598
どんな10で割ったら余りが0になる数値を特定しろ
特定方法(計算式)はどんなのでも構わない
って意味じゃないの?
600:598
09/07/04 14:15:41
商を用いて、10で割ると余りが0になる場合だけをprintf文で表示させろ <= これが設問じゃないかと
どんな計算式でもいいが商を用いて、10で割ると余りが0になる場合だけをprintf文で表示させろ
601:デフォルトの名無しさん
09/07/04 14:23:18
>>587
ありがとうございます。
602:599
09/07/04 14:28:30
>>600
int n1, n2
n1 = 123; /* 調査対象 */
n2 = n1 / 10;
n2 *= 10;
if(n1 - n2 == 0){
表示処理
}
こんなん?
603:aka
09/07/04 14:33:17
情報オリンピックの2008年度予選問題3の連鎖のプログラムを教えてください。
URLリンク(www.ioi-jp.org)
604:598
09/07/04 14:33:30
ループすべき。
#include <stdio.h>
int main() {
int ans;
for(ans=-21;ans<=21;ans++)
if(!(ans%10)) printf("%d ",ans);
else printf(".. ");
}
605: ◆/91kCCQXBo
09/07/04 14:58:08
URLリンク(jbbs.livedoor.jp)
>>538 課題1 % gcc -o space space.c
#include <stdio>
>>538 課題2 % gcc -o innpro innpro.c
#include <stdio>
>>538 課題3 % gcc -o janken janken.c
char janken_com(int seed){
int t;
srand(seed); //乱数の種(seed)を設定.
t=rand()%3; //rand()は整数の乱数を返す関数.rand()%3により0から2の乱数を発生させることができる.
if(t==0) return 'g';
if(t==1) return 'c';
return 'p';
}
606:デフォルトの名無しさん
09/07/04 16:03:08
[1] 授業単元:C
[2] 問題文(含コード&リンク):
URLリンク(kansai2channeler.hp.infoseek.co.jp)
URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
[3.1] OS: XP
[3.2] コンパイラ名とバージョン:Visual Studio 2008
[3.3] 言語: C
[4] 期限: 7月7日
[5] 番号の場所を書き直すようお願いします。
607:デフォルトの名無しさん
09/07/04 16:07:08
[1] 授業単元:プログラミング言語2
[2] 問題文(含コード&リンク)
簡単なデータベース機能を持つプログラムを作成しなさい.対象となるデータは自分で考えてください.
(住所録,商品の在庫,図書,ワールドカップの勝敗....)
以下の要件を示します.
1. ファイルからデータを読み込む機能をつけること.
2. データは4つ以上の項目を保持させること.
(住所録では、「名前」「住所」「郵便番号」「電話番号」等で4項目以上)
3. 並び替えの機能をつけること.また並び替える項目が指定できること.
4. 各項目についてデータの検索を行う機能をつけること.また,検索条件を組み合わせることができること.
(住所録なら,「郵便番号」が 399 で始まって,かつ,「電話番号」が 026 で始まる 等)
5. データは半角英数字(英語やローマ字)で扱ってよい
6. データの追加ができること.
7. データの削除ができること.削除は上記の検索と組み合わせることで,ある条件に合致したデータを削除できること.
8. 追加・削除した結果をファイルに保存できること.
[3] 環境
[3.1] OS: windows
[3.2] コンパイラ名とバージョン: cygwinのgccです。 バージョンはわかりません。
[3.3] 言語: C
[4] 期限: 2009年7月13日まで
[5] その他の制限: 双方向リストまで、終わりました。
対象となるデータは住所録でお願いします。
プログラムに説明を付けてくれると、助かります。
よろしくお願いします。
608: ◆/91kCCQXBo
09/07/04 16:33:55
>>595
#include <stdio.h>
int main(int argc, char *argv[]) {
int i, c;
FILE *fp;
if(argc < 2) {
printf("Usage : %s filename.ext", argv[0]); return 1; }
if((fp=fopen(argv[1],"r")) == NULL) {
printf("%s file open error!", argv[1]); return 1; }
puts("ASCIIコードが10の倍数の時の、ファイル先頭からの位置:");
for(i=1; (c=getc(fp)) != EOF; i++) { // 結果の値はファイルから読み込む
if(!(c%10)) printf("%dx%d ", i, c); // 結果の値が、10 で割ると余りが0になる場合だけを表示
// else if(!(i%10)) printf("x%d ", c); // 繰返しの回数が、10 で割ると余りが0になる場合
// else printf("."); // その他の場合
}
fclose(fp);
}
609:デフォルトの名無しさん
09/07/04 18:07:38
>>603
URLリンク(kansai2channeler.hp.infoseek.co.jp)
610: ◆/91kCCQXBo
09/07/04 18:57:23
>>606 リストを用いて個人データを格納する表を作成。(穴埋め問題)
URLリンク(kansai2channeler.hp.infoseek.co.jp)
611:デフォルトの名無しさん
09/07/04 19:29:17
>>609
これ「落ちた状態」をいちいち作って数えたんだけど
よく考えたらその必要なかった…。無駄無駄無駄ー!
612:デフォルトの名無しさん
09/07/04 19:53:43
未回答文plz
613:デフォルトの名無しさん
09/07/04 20:12:41
>>603
URLリンク(kansai2channeler.hp.infoseek.co.jp)
>>609で作ったやつの修正版
614:デフォルトの名無しさん
09/07/04 20:55:21
>>607
>8. 追加・削除した結果をファイルに保存できること.
これって追加・削除の「履歴」じゃなくて単に「現在のデータ」でいいんだよね?
615:デフォルトの名無しさん
09/07/04 21:21:31
[1] 授業単元: C言語
[2] 問題文
URLリンク(kansai2channeler.hp.infoseek.co.jp)
これを参考に、100人以内の生徒ID、名前を入力するプログラムを作る
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: VisualC++
[3.3] 言語 C
[4] 期限: 7月6日
[5] その他の制限 ソースプログラムにある形の関数を使うこと
616:デフォルトの名無しさん
09/07/04 21:34:14
>>615
これでいいのかな
#include<stdio.h>
#include<string.h>
#define SIZE 100
略
int main(){
int i;
student_type students[SIZE];
for( i = 0; i < SIZE; ++i ){
read_student( &students[i] );
}
}
617:デフォルトの名無しさん
09/07/04 22:26:52
>>613
高校生でも分かる簡単なプログラムになりませんかね?
図々しくてごめんなさい…
ぜひお願いします。
618:613
09/07/04 22:37:57
>>617
いや、そう言われても…
この板の住人なら高校生でも>>613は読めると思うが
一般的な高校生レベルってどんなのよ
まあ、どの行がわからんのか言ってみれ
619:デフォルトの名無しさん
09/07/04 22:52:23
ホント無知で申し訳ないっす。。
printf("%s : %d --> %d\n", filename, N, min);
free(array);
fclose(fp);
}
int check_okikata(int *array, int size, int index, int color)
{
らへんがよく分かりません
どういう意味でしょう?
620:デフォルトの名無しさん
09/07/04 23:30:29
>>614
そうです。
項目が削除されたリストと、項目が追加されたリストを出力します。
621:デフォルトの名無しさん
09/07/04 23:35:28
>>619
つまり動的な配列の確保(mallocとfree)がわからないんだな
じゃあ固定配列で書き換えるから
622:デフォルトの名無しさん
09/07/04 23:56:20
>>619
malloc()とfree()を使わないようにした
URLリンク(kansai2channeler.hp.infoseek.co.jp)
623:デフォルトの名無しさん
09/07/05 00:18:10
>>620
えっ?2つのリストが出力されるの!?
追加や削除をして変更された「現在のデータベースのデータ」のリスト1つじゃないの?
624:デフォルトの名無しさん
09/07/05 01:35:36
[1]数値情報解析
[2]ガウス−ザイデル法によりn元1次方程式を解くプログラムを作りなさい。
[3]
[3.1]Windows
[3.2]Visual Studio 2008
[3.3]C
[4]2009年7月15日
[5]ほぼ素人なので、少しでも優しい表現にしていただけるようよろしくお願い致します。
あと、パワーポイントでこのプログラムのフローチャートを書いていただければありがたいです。
625:デフォルトの名無しさん
09/07/05 02:42:19
>>624 >>162 問題 >>174 >>177 >>183 解答
626:デフォルトの名無しさん
09/07/05 02:57:38
ガウスザイデル法って反復法だからガウス法と違うだろ
627:デフォルトの名無しさん
09/07/05 03:19:53
C++なんですが、
文字変数aの中身が'a'ならば『aが格納されています』と表示させ、'a'でないならば、
『'a'でない文字が格納されています』と表示させるプログラムを作成せよ
誰かお願いします
#include<iostream>
using namespace std;
int main(){
return 0;
}
628:デフォルトの名無しさん
09/07/05 03:21:02
>>627ですが、間違えました。
文字変数aの中身→文字変数mの中身
でした
629:デフォルトの名無しさん
09/07/05 03:22:32
ファイルから読み込みするの?
それともキーボードの入力を待って入力された文字を判断するの?
630:デフォルトの名無しさん
09/07/05 03:26:02
>>627
文字変数mの中身が'a'ならば『aが格納されています』と表示させ、'a'でないならば、
『'a'でない文字が格納されています』と表示させるプログラムを作成せよ
としか書かれてないんですよね。
ただ書き始めと終わりは下の定型文みたいのを使うんですが
#include<iostream>
using namespace std;
int main(){
return 0;
}
631:デフォルトの名無しさん
09/07/05 03:26:46
>>630ですが間違えました
>>627じゃなくて>>629でした
632:デフォルトの名無しさん
09/07/05 03:55:39
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
下に示すように,非負の整数を次々と読み込んでいき,各値の二乗値の和を表示するプログ
ラムを作成せよ.なお,整数の読み込みは,負の整数を読み込んだ段階で終了するものとし,
その数の二乗値の和は加算しないものとする.
整数を入力してください
整数1 : 3
整数2 : 5
整数3 : -1
二乗値の合計は34 です.
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン:Visual Studio 2008
[3.3] 言語: C
[4] 期限: 09年07月07日
[5] その他の制限:なし。
633:デフォルトの名無しさん
09/07/05 04:00:22
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
下に示すように,行数と列数を読み込み,1 行目には1234567890…を列数の個数だけ,2 行
目には2345678901…を列数の個数だけ,…と表示するプログラムを作成せよ.
ファイル提出: 実行ファイル
何行ですか: 7
何列ですか: 12
123456789012
234567890123
345678901234
456789012345
567890123456
678901234567
789012345678
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン:Visual Studio 2008
[3.3] 言語: C
[4] 期限: 09年07月07日
[5] その他の制限:なし。
634:デフォルトの名無しさん
09/07/05 04:02:16
>>632
#include <stdio.h>
int main(void)
{
int i = 0, sum = 0, n;
while(1) {
printf("整数%d :", ++i);
scanf("%d", &n);
if(n < 0) break;
sum += n * n;
}
printf("二乗値の合計は%d です.\n", sum);
return 0;
}
635:デフォルトの名無しさん
09/07/05 04:06:28
>>633
#include <stdio.h>
int main(void)
{
int i, j, n, m;
printf("何行ですか:");
scanf("%d", &n);
printf("何列ですか:");
scanf("%d", &m);
for(i=1; i<=n; i++) {
for(j=0; j<m; j++) printf("%d", (i+j)%10);
putchar('\n');
}
return 0;
}
636:デフォルトの名無しさん
09/07/05 06:59:52
>>627
#include<iostream>
using namespace std;
int main(){
char m;
if (m == 'a') cout << "『aが格納されています』" << endl;
else cout << "『'a'でない文字が格納されています』" << endl;
return 0;
}
637: ◆/91kCCQXBo
09/07/05 09:01:09
>>627 関数が使えるなら。
#include<iostream>
using namespace std;
namespace {
int m;
void sub(void) {
if (m == 'a') cout << "『aが格納されています』" << endl;
else cout << "『'a'でない文字が格納されています』" << endl;
}
}
int main(){
m='a';
sub();
m='x';
sub();
return 0;
}
638: ◆/91kCCQXBo
09/07/05 09:47:08
>>627 テンプレートの中だけ書く。>>626 は無しで。
char m = '\a';
int i;
char data[4]={'m', 'a', 'i', 'n'};
for(i=0; i<=sizeof data/sizeof(char); m = data[i++]) {
if (m == 'a') cout << "『'a'が格納されています』\n";
else cout << "『'a'でない文字が格納されています』\n";
}
639:デフォルトの名無しさん
09/07/05 10:42:52
そのループはギャグのつもり?
640:デフォルトの名無しさん
09/07/05 10:51:16
1週間ぐらい前に文字列表示とか、四則演算とか聞いてた人でしょ。
授業は if 文に入ったらしいが、何も分からないから全部聞くと。
641: ◆/91kCCQXBo
09/07/05 12:35:40
>>595 ループか関数のどちらかは使う必要あり。
#include <stdio.h>
void div10(int c) {
if(c%10) ; else printf("%dは10で割り切れる数\n", c);
}
int main() {
div10(1);
div10(20);
div10(21);
div10(30);
div10(13);
return 0;
}
642:デフォルトの名無しさん
09/07/05 13:10:10
>>638
そのおソースは頂けない
せめてこうしよう
#include <iostream>
using namespace std;
int main()
{
char* data = "main";
for(char* ite = data;*ite != '\0';ite++){
if(*ite == 'a') cout << "aが格納されています" << endl;
else cout << "'a'でない文字が格納されています" << endl;
}
return EXIT_SUCCESS;
}
643: ◆/91kCCQXBo
09/07/05 13:29:31
>>627 どお?
#include <iostream>
using namespace std;
int main(){
int i = 0;
char m, data[] = {'m', 'a', 'i', 'n'};
while( m = data[i], i++ < sizeof data/sizeof(char) ) {
if (m == 'a') cout << "『'a'が格納されています』\n";
else cout << "『'a'でない文字が格納されています』\n";
}
return 0;
}
644:デフォルトの名無しさん
09/07/05 13:53:38
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
モンテカルロ法を用いて、円周率を計算しなさい。なおランダムに打つ点は1000点用いること。
また上記プログラムを改良して、50点打つごとに、真の円周率(ここでは3.1415926とします)
との差を求め、その差をスペースと*を用いてグラフ化しなさい。
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C
[4] 期限:7/9
[5] その他の制限:
申し訳ありませんがよろしくお願いします
645:デフォルトの名無しさん
09/07/05 16:52:12
>>644
喜べ、これでキミは英雄だ
URLリンク(kansai2channeler.hp.infoseek.co.jp)
hit-or-missは中心(0,0)半径1の円に入るかどうかで判定した
一様乱数はC標準のものを用いた
おまけとして100000回試行したデータも付けておいた
この判定法と乱数では試行回数が1000回では不十分であると分かるはずだ
改善は他の住人に任せた
646:デフォルトの名無しさん
09/07/05 17:11:25
>>535
遅くなりました
ありがとうございます><
647:デフォルトの名無しさん
09/07/05 17:40:26
>>638
sizeof data/sizeof(char)
>>639が指してるのがこれかどうか分からんけど、とりあえず気持ち悪い
648:デフォルトの名無しさん
09/07/05 17:43:21
>>647
固定配列のサイズを表現する普通の記述だが
なんで気持ち悪いと思う?
649:デフォルトの名無しさん
09/07/05 17:46:18
そっか。
俺ならsizeof(data)/sizeof(data[0])と書くから。
片方にしか括弧つけない意味も分からないし。
650:デフォルトの名無しさん
09/07/05 17:49:14
ああ、そういう意味なら気持ち悪いな
確かに
651:デフォルトの名無しさん
09/07/05 17:51:08
[1] 授業単元:数値計算
[2] 問題文(含コード&リンク):Ax=bの連立1次方程式の解を求めるプログラムを作成しなさい。
(この行列を使用してください
A={{10,-9,0,0,0,0,0},
{-9,17,-8,0,0,0,0},
{0,-8,17,-9,0,0,0},
{0,0-9,13,-4,0,0},
{0,0,0,-4,12,-8,0},
{0,0,0,0,-8,10,-2},
{0,0,0,0,0,-2,2}}
b={0,0,0,0,0,0,7})
[3] 環境
[3.1] OS: Windows Vista
[3.2] Visual Studio 2008
[3.3] 言語: C++
[4] 期限: 2009年7月1日まで]
[5] その他の制限:特にありませんがなるべく簡単なものでお願いします
解が{0.37,0.41,1.28,2.06,3.81,4.69,8.19}に近いものになるはずです。
652:デフォルトの名無しさん
09/07/05 17:53:09
>>651
既に期限過ぎてるんだが
653:デフォルトの名無しさん
09/07/05 17:53:15
あとsizeof(char)は常に1だから冗長とかいう奴もよくいるねw
おれは冗長でも書くべきと思う派
654:デフォルトの名無しさん
09/07/05 17:54:36
>>650
どういう意味なら気持ち悪くないの?
655:デフォルトの名無しさん
09/07/05 17:57:09
>>648
読みにくいし i <= sizeof〜 だと境界越えてるじゃん
>>642とどっちが読みやすいよ
656:デフォルトの名無しさん
09/07/05 18:00:36
うわあほんとだ。。。
sizeof記述の気持ち悪さに気を取られすぎた俺バカ
657:デフォルトの名無しさん
09/07/05 18:18:03
<<651
私の計算ミスでした。すいません
658:デフォルトの名無しさん
09/07/05 18:55:03
>>651 >>162 問題 >>174 >>177 >>183 解答
何の計算ミス?
659:デフォルトの名無しさん
09/07/05 19:38:56
>>623
返信遅れてすみません。
追加、削除された1つのリストで大丈夫です。
660:デフォルトの名無しさん
09/07/05 20:49:18
[1] 授業単元:情報
[2] 問題文(含コード&リンク):
パソコン甲子園 2008 予選問題 問7 ふしぎな虫
URLリンク(www.pref.fukushima.jp)
[3] 環境
[3.1] OS: Windows xp
[3.2] コンパイラ名とバージョン:Visual Studio 2008
[3.3] 言語: C
[4] 期限: 7月6日
よろしくお願いします。
661:デフォルトの名無しさん
09/07/05 21:34:32
>>645
ありがとうございます。
凄い。誤差ってなかなか安定しないんですね
ですが中身が問題分からなかった低能では
いささか理解が追いつきません
このまま出したら本当に英雄になっちゃいそうです
662: ◆/91kCCQXBo
09/07/05 21:47:10
>>644 差の絶対値をグラフにした。
#include <stdio.h>
#include <stdlib.h>
#define PI 3.1415926
int main() {
int i, j, imax = 1000; /* 乱数の発生回数 1000 */
int n, inter = imax/20; /* グラフの表示インターバル 50 */
float x,y,pi=PI,eps,mul;
for(n=0, i=1; i<=imax; i++) {
/* 0以上1未満の乱数を生成する */
x = rand()/((float)RAND_MAX+1);
y = rand()/((float)RAND_MAX+1);
/* 0<=x,y<=1の範囲にある中心原点半径1の扇形の中に乱数による点が入ったらカウントする */
if( x*x + y*y < 1) n++;
if( i%inter ) ; else { /* 円周率の計算とグラフの表示 */
pi = (float)n/i*4; /* 半径1の円の面積すなわち円周率 */
eps = PI-pi; eps = (eps<0)? -eps : eps;
if(i==inter) mul = 70/eps; /* 1回目はグラフの倍率を決める */
printf("%5.3f ", pi);
for(j=eps*mul; j>=1; j--) putchar(' '); printf("*\n");
}
}
printf("PI=%f\n", pi);
}
663:デフォルトの名無しさん
09/07/05 22:30:36
>>662
ありがとうございます
コメントまで…
何度実行しても値が変わらない気がするのはそういう物ですか?
664: ◆/91kCCQXBo
09/07/05 22:37:17
srand(time(NULL)); を、最初に呼べば毎回変わるはず、>>645のように。
665:デフォルトの名無しさん
09/07/05 22:41:51
>>664
出来ました。が、ときたまグラフが崩れるので封印しときます
勉強になりました
666:デフォルトの名無しさん
09/07/05 23:08:32
>>234で、>>251さんに
URLリンク(kansai2channeler.hp.infoseek.co.jp)
というプログラムを書いて頂いたのですが、RAND_MAXがrand関数の利用に当たるとして
再提出になってしまいました。
rand_maxはrandのとる最大値とのことですが、これを使わないで同様の趣旨を実現するにはどうしたらよいのでしょうか?
667:デフォルトの名無しさん
09/07/05 23:14:25
RAND_MAXをINT_MAXに変える
668:デフォルトの名無しさん
09/07/05 23:53:23
2つの整数をキーボードから入力して、最初の数の方が小さい場合には、『最初の数の方が小さいか等しいです』と表示させて、大きい場合には、『後の数の方が小さいです』と表示させるプログラムを作成せよ
#include<iostream>
using namespace std;
int main(){
return 0;
}
の中に入る文を作るんですが、どうすればいいですか。使うのはifとcoutとelseくらいだと思うんですが
669:デフォルトの名無しさん
09/07/05 23:54:46
>RAND_MAXがrand関数の利用に当たるとして
何ソレ
ただの定数マクロでしょ?
670:デフォルトの名無しさん
09/07/06 00:24:57
>>666
関数の利用に当たる・・・だと・・・
数学科で出された問題?
だったらそのトンチンカンな主張も納得できるけど工学科だったら・・・
671:デフォルトの名無しさん
09/07/06 00:28:29
>>668 例はいらない。
// ↑C++テンプレート
int a1, a2;
cout << "2つの数を入力してください:";
cin >> a1 >> a2;
if(a1<=a2) cout << "最初の数の方が小さいか等しいです\n";
else cout << "後の数の方が小さいです\n";
// ↓C++テンプレート
672:デフォルトの名無しさん
09/07/06 00:49:54
>>671
// ↑C++テンプレート
// ↓C++テンプレート
なんだよ、このコメントは。w
まぁ、>>671の予想通り、minを使うのが速いよってことですね。
673: ◆jmI6IAV7WI
09/07/06 05:28:45
[1] 授業単元: 構造体
[2] 問題文(含コード&リンク): URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語: C
[4] 期限: 7月10日
[5] その他の制限:
よろしくお願いします
674:デフォルトの名無しさん
09/07/06 06:48:27
書くとこ入力部だけじゃねーかw
675: ◆jmI6IAV7WI
09/07/06 07:43:14
>>674
入力部だけでもお願いできないでしょうか
難しくて何がなんだかさっぱりわからないので
すみません
676: ◆/91kCCQXBo
09/07/06 14:11:15
>>673
1.
printf("1番目のX Y座標をスペースを開けて入力して下さい:");
scanf("%lf%lf", &my_line.p1.x, &my_line.p1.y);
printf("2番目のX Y座標をスペースを開けて入力して下さい:");
scanf("%lf%lf", &my_line.p2.x, &my_line.p2.y);
printf("2点間の直線距離は:");
2. 三角形の面積 area = fabs(t.p2.x * t.p3.y - t.p3.x * t.p2.y)/2;
printf("1番目のX Y座標をスペースを開けて入力して下さい:");
scanf("%lf%lf", &my_triangle.p1.x, &my_triangle.p1.y);
printf("2番目のX Y座標をスペースを開けて入力して下さい:");
scanf("%lf%lf", &my_triangle.p2.x, &my_triangle.p2.y);
printf("3番目のX Y座標をスペースを開けて入力して下さい:");
scanf("%lf%lf", &my_triangle.p3.x, &my_triangle.p3.y);
printf("3点で囲まれた三角形の面積は:");
677: ◆/91kCCQXBo
09/07/06 14:25:27
>>624 ガウス・ザイデル法の計算方法 山本昌志 2005年12月16日
URLリンク(akita-nct.jp)
必要なら以下にコメントも付けとく。仮にエクセルのPADでもいい?
#if 0
for( j=1; j<=N; j++ ){
temp += a[i][j] * x[j];
}
/* a[i][i] * newx + (temp - a[i][i] * x[i]) = b[i]; */
/* a[i][i] * newx = b[i] - (temp - a[i][i] * x[i]); */
newx = 1.0 / a[i][i] * (b[i] - (temp - a[i][i] * x[i]));
#else
for( j=1; j<=N; j++ ){
if( i==j ) continue;
temp += a[i][j] * x[j];
}
/* Xi(k+1) = 1/Aii * ( Bi - (Ai,1*X1(k) + Ai,2*X2(k) + ... + Ai,i-1*Xi-1(k) + Ai,i+1*Xi+1 + ... + Ai,n*Xn )) */
newx = (b[i] - temp)/a[i][i];
#endif
678:デフォルトの名無しさん
09/07/06 17:30:17
[1] 授業単元: 情報処理
[2] 問題文(含コード&リンク):
URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: gcc 3.4
[3.3] 言語: C/C++
[4] 期限: [2009年7月7日10:00まで]
[5] その他の制限: 特にありません。
よろしくおねがいします。
679:デフォルトの名無しさん
09/07/06 18:07:23
[1] 授業単元: オペレーティングシステム
[2] 問題文(含コード&リンク):
URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
[3.1] OS: VineLinux4.2
[3.2] コンパイラ名とバージョン: GCC 4.3
[3.3] 言語: C/C++
[4] 期限: [2009年7月8日10:00まで]
[5] その他の制限: 特にありません。
C言語なら俺に聞け(入門篇) Part 50
スレリンク(tech板)
の>>221で質問しましたが結局分からなかったので
ここに投げさせて頂きました。よろしくお願いします。
よろしくおねがいします。
680:デフォルトの名無しさん
09/07/06 18:25:28
>>493で質問し、一題目を当スレで解答していただいたものです。
その際二題目は問題の意味が解らないということで保留にしていたんですが、
二題目もしなければ駄目ということで再度質問願います。
[1] 授業単元:Cプログラミング入門編
[2] 問題文(含コード&リンク):URLリンク(www-it.sci.waseda.ac.jp)
[3] 環境
[3.1] OS: UNIX
[3.2] コンパイラ: gcc
[3.3] 言語: C
二題目の問題の意味ですが、outputでV1〜Vnが表示される度にそれぞれの行列の要素の中で
『V1二乗+V2二乗−V3二乗』を画面Printするという意味と思います。
教授曰くピタゴラスのなにやらと言うらしいのですが、、、。
よろしくお願いします。
681: ◆jvdNOCQgZU
09/07/06 18:31:14
[1] 授業単元:windows開発
[2] 問題文(含コード&リンク): URLリンク(down11.ddo.jp)
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン:Visual Studio 2008
[3.3] 言語:C++
[4] 期限: [2009年7月9日まで]
[5] その他の制限:DirectX SDK N2008を使用します。
ファイルが大きかったので別のロダ借りました。パス「111」
682:デフォルトの名無しさん
09/07/06 18:49:24
>>680
最初に解答いただいたプログラムです
URLリンク(codepad.org)
よろしくお願いします。
683:デフォルトの名無しさん
09/07/06 19:01:54
>>679
問題 >>前930(9532)>>093(9559)>>172(9532)
このプログラムに、リダイレクション、パイプ機能を実装してください。
>>265(9607)
684:デフォルトの名無しさん
09/07/06 19:23:17
>>679
もう上で答えられてるけど作っちゃったので俺も
URLリンク(kansai2channeler.hp.infoseek.co.jp)
685:デフォルトの名無しさん
09/07/06 19:35:09
>>680
#include <stdio.h>
#include <stdlib.h>
void multiply(int *mat, int *vec, int *out, int N) {
int i, j;
for (i = 0; i < N; i++) {
out[i] = 0;
for (j = 0; j < N; j++) {
out[i] += mat[i*N+j] * vec[j];
}
}
}
int main(void) {
int i, k, N = 3, n = 10;
int *v = (int *)malloc(N * sizeof(int));
int *t = (int *)malloc(N * sizeof(int));
int *P = (int *)malloc(N * N * sizeof(int));
v[0] = 3; v[1] = 4; v[2] = 5;
P[0] = 1; P[1] = -2; P[2] = 2;
P[3] = 2; P[4] = -1; P[5] = 2;
P[6] = 2; P[7] = -2; P[8] = 3;
for (k = 1; k <= n; k++) {
multiply(P, v, t, N);
for (i = 0; i < N; i++) {
v[i] = t[i];
}
printf("v_%d = (%d, %d, %d), ", k, v[0], v[1], v[2]);
printf("v1^2 + v2^2 - v3^2 = %d\n", v[0]*v[0]+v[1]*v[1]-v[2]*v[2]);
}
free(v); free(t); free(P);
return 0;
}
686:デフォルトの名無しさん
09/07/06 20:04:06
>>678
URLリンク(kansai2channeler.hp.infoseek.co.jp)
687:デフォルトの名無しさん
09/07/06 21:00:23
>>685
ありがとうございます。
本当に助かります。
こんなにサッと出来るなんて尊敬します。
688:デフォルトの名無しさん
09/07/06 21:30:15
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
多数のファイルをクローズせずに何個もオープンするとどうなるか実験せよ.
実験用プログラム fopen.c のソースと実験結果と考察をレポートすること.
% ./fopen
入力ファイル:fopen.c
オープン 1 回目
オープン 2 回目
オープン 3 回目
...
オープン ??? 回目
これ以上オープンできません!
注意:「○○回までオープンできた」とかでは,現象・結果の説明にすぎず,考察とは言えない. その結果から何が理解できるのか?推理せよ. 換言:実験結果(具体例)から一般規則を導き出せ.
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限:09/07/08
[5] その他の制限: 特になし
689:デフォルトの名無しさん
09/07/06 21:36:20
>>688
追記
その他の制限:ファイル名は決め打ち(ソースファイルなど)でよい.
自分なりに作ったソースは
URLリンク(kansai2channeler.hp.infoseek.co.jp)
考察がわかりません.
セグメンテーションエラーが出るのはわかるのですが…
690:デフォルトの名無しさん
09/07/06 21:47:23
>>689
セゲメンテーションフォルトは fclose(NULL) が悪いだけで考察とは関係ないよ
691:デフォルトの名無しさん
09/07/06 21:55:34
>>690
fclose(NULL)がエラーになる理由を考察に書けばいいと思うんですが、具体的にどう書けばいいのでしょうか
692:デフォルトの名無しさん
09/07/06 21:55:34
>>680
ピタゴラスのなにやらって、三平方の定理じゃねーかw
693:デフォルトの名無しさん
09/07/06 22:11:23
>>691
ストリームをクローズします。
fclose は,引数 stream で指定されたストリームをクローズします。
そのストリームに対応付けられているすべてのバッファは,クローズする前に
フラッシュされます。システムが割り当てたバッファは,クローズすると解放されます。
setbuf または setvbuf を使って割り当てられたバッファは,自動的に解放される
わけではありません(ただし,setvbuf にバッファポインタとして NULL が渡されると,
クローズするときに解放されます)。
とあるから、NULLを無理矢理クローズしようとしてエラーが生じるんじゃない?
規格票には何か書いてあるかな
694:デフォルトの名無しさん
09/07/06 22:16:47
>>691
perror()かなにかでエラー原因表示させてみ
[略)
perror("fopen"); ←ここらへんでperrorを呼んでみる
printf("これ以上オープンできません. \n");
[略)
695:デフォルトの名無しさん
09/07/06 22:23:45
[1] 授業単元:プログラミング入門
[2] 問題文(含コード&リンク):
リスト構造で接続された構造体に含まれる名前を比較し、辞書順にリスト構造の接続を再構成せよ。
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 2009年07月7日8:00まで
[5] その他:自分で書いたのですが、セグメントエラーになってしまいます。
URLリンク(kansai2channeler.hp.infoseek.co.jp)
なお、これは一番若い名前を見つけたら一旦保持して、最後まで探し終えたら、先頭と保持したものを入れ替えるという動作を
最後までループさせるつもりで書きました。
696:デフォルトの名無しさん
09/07/06 22:36:25
>>693ご教示ありがとうございます.
ファイルをオープンできなかった場合に,そのファイルをクローズしようとするとどうなるかと言う課題もあるのですが,
これも同じ原因でエラーが発生するのでしょうか.
ソースは
URLリンク(kansai2channeler.hp.infoseek.co.jp)
です.
>>694
1回オープンしました.
…
46回オープンしました.
47回オープンしました.
fopen: Error 0
これ以上オープンできません.
となりました
697:デフォルトの名無しさん
09/07/06 23:01:33
>>684>>685
ありがとうございます。
ちゃんと動作しました。
698:デフォルトの名無しさん
09/07/06 23:06:42
整数2つをキーボードから入力し、(最初にキーボードから入力させる数値を
入れる変数をa、2番目にキーボードから入力させる数値を入れる変数をbとする。)、
最初の数の方が大きい場合には、『最初の数の方が大きいです』、等しい場合には、『両方は等しいです』、2番目の数の方が大きい場合には、『2番目の数の方が大きいです』と表示するプログラムを作成せよ
ある整数変数をキーボードから入力し、その数値が9以下なら『入力した値は1桁です』と表示させて、10以上、99以下の場合は、『入力した値は2桁です』と表示させ、
100以上なら『入力した値は3桁以上です』と表示するプログラムを作成せよ
#include<iostream>
using namespace std;
int main(){
return 0;
}
の中に入る文を作るんです。else とか else if とか ifとか使うはずなんですが誰か教えてくれませんか
699:デフォルトの名無しさん
09/07/06 23:12:55
>>695
ちょっと見ただけだが、
↓これはまずくない?
>struct data* str,str1,str2,tmp,target;
>struct data *str,*str1,*str2,*tmp,*target;
後、動作可能な形で全体をさらす方がアドバイスを受けやすいと思うよ。
700:デフォルトの名無しさん
09/07/06 23:15:40
int first,second;
printf("first: ");
scanf("%d",&first);
if(first>=100)
printf("入力した値は3桁以上\n");
else if(first>=10)
printf("入力した値は2桁以上\n");
else if(first<=9)
printf("入力した値は1桁\n");
printf("second: ");
scanf("%d",&second);
if(second>=100)
printf("入力した値は3桁以上\n");
else if(second>=10)
printf("入力した値は2桁以上\n");
else if(second<=9)
printf("入力した値は1桁\n");
if(first>second)
printf("firstが大きい\n");
else if(first==second)
printf("同じ\n");
else
printf("secondが大きい\n");
701:デフォルトの名無しさん
09/07/06 23:28:11
>>700
あれ?C++なんですけど
coutとかなのですが
702:デフォルトの名無しさん
09/07/06 23:30:28
>>701
C++もCコードかけるからねえ
最初にそういうのは注文で出しておいた方がいいかも
703:デフォルトの名無しさん
09/07/06 23:32:19
using〜を見落としてたわ
もう寝るから別の人やって
ところで、テンプレ使えと逆ギレOK?
704:デフォルトの名無しさん
09/07/06 23:45:35
だから、今まで何度もC言語とC++は別言語だからスレッドを分けてくれと言ってきたじゃないか
705:デフォルトの名無しさん
09/07/06 23:54:07
初耳だ
706:デフォルトの名無しさん
09/07/07 00:09:40
[1] 授業単元:C言語
[2] 問題文(含コード&リンク):
URLリンク(www.dotup.org)
[3] 環境
[3.1] OS:linux
[3.2] コンパイラ名とバージョン:gcc 3.4
[3.3] 言語:c
[4] 期限: 7月7日23:59
[5] 特になし
よろしくお願いします
707:デフォルトの名無しさん
09/07/07 00:54:21
>>701
なにがcoutなのですか?
printfはC++じゃないとおっしゃる?
708: ◆/91kCCQXBo
09/07/07 00:56:04
>>698
// ここまではC++テンプレート
cout<<"1番目の整数: ";
cin>>first;
cout<<"2番目の整数: ";
cin>>second;
if(first>second)
cout<<"最初の数のほうが大きいです"<<endl;
else if(first<second)
cout<<"2番目の数のほうが大きいです"<<endl;
else
cout<<"両者は等しいです"<<endl;
cout<<"3番目の整数: ";
cin>>first;
if(first>=100 || first<=-100)
cout<<"入力した値は3桁以上です"<<endl;
else if(first>=10 || first<=-10)
cout<<"入力した値は2桁です"<<endl;
else
cout<<"入力した値は1桁です"<<endl;
// ここからはC++テンプレート
709:デフォルトの名無しさん
09/07/07 01:02:07
>>689
多数のファイルをだからこんな感じじゃないの
うちの環境だとエラーすら出ずに29ファイル目で終わった
コンパイラはbcc,OSはXP SP3
原因はリソース不足?
#include <stdio.h>
#define N 1000
int main(){
int i;
char fname[256];
FILE* in[N];
FILE* out;
for(i = 0;i < N;i++){
sprintf(fname,"hoge%u",i);
out = fopen(fname,"w");
fclose(out);
if((in[i] = fopen(fname,"r")) == NULL){
perror("error");
for(i--;i >= 0;i--){
fclose(in[i]);
}
exit -1;
}
}
for(i = 0;i < N;i++){
fclose(in[i]);
}
return 0;
}
710:512
09/07/07 01:07:49
>>680
>>685で解答済みみたいだけど、一応>>512のコードで求めてみた
URLリンク(codepad.org)
「ElementOf(mat,row,clm)」と「PrintPythagoreanTheorem(int v1, int v2, int v3)」を追加して
main関数に1行追加しただけ
#こっそりMltMatrixをMulMatrixに修正してたりw
711:デフォルトの名無しさん
09/07/07 01:09:23
>>709
1020ファイル作ってsegmentation faultだった。
CentOS5.3(仮想マシン) gcc4.1.2
712:デフォルトの名無しさん
09/07/07 01:11:50
>>711
丁度 out==NULL になったんじゃないかな
713:711
09/07/07 01:12:41
流れをなんにも見てなくてとりあえず動かしただけだったすまん。
>>691
ええと、fclose(NULL)がなぜダメなのかを考察するのはちょっとズレてる
その前にfopenがNULLを返したことに対して考察をすべきよー
714:デフォルトの名無しさん
09/07/07 01:14:45
>>712
大抵out==NULLになって終わるんじゃないかな
715:デフォルトの名無しさん
09/07/07 01:15:34
>>714
in[i]==NULL になることもあるさ
716:711
09/07/07 01:22:12
#include <stdio.h>
#include <stdlib.h>
#define N 10000
int main(){
int i;
char fname[256];
FILE* in[N];
FILE* out;
for(i = 0;i < N;i++){
sprintf(fname,"file/hoge%04u",i);
out = fopen(fname,"w");
if(out == NULL){
perror("error[out]");
for(i--;i >= 0;i--){ fclose(in[i]); }
exit(-1);
}
fclose(out);
if((in[i] = fopen(fname,"r")) == NULL){
perror("error[in]");
for(i--;i >= 0;i--){ fclose(in[i]); }
exit(-1);
}
}
for(i = 0;i < N;i++){ fclose(in[i]); }
return 0;
}
とりあえずちょっと変えてみた。
まあ、他の要因で落ちることを考慮すればin[i]==NULLになることもあるのだろうけれど、
ファイルの開きすぎで落ちるという観点で行けばoutのみじゃない?
717:デフォルトの名無しさん
09/07/07 01:35:43
>>695
いろいろ間違ってる。
nextを使うべきでないところで使っている(このためstr->next・str2->nextでstrやstr2がNULLになることがある)。
最小値がstr1でない場合に、次のループではstr1を跳ばしている(このためstr1がNULLになることがある)。
どうしてもtop入れ換えでやりたいなら、図でも書いて落ち着いて考えること。
top入れ換えではなく、最小値を1個ずつ抜いて別のツリーをつくる方がややこしくなくてお勧め。
struct data *sort(struct data *top){
struct data work, *d, *target = top, *current = &work;
for(target = top; target != NULL; target = top){ //元のツリーがなくなるまで
for(d = target->next; d != NULL; d = d->next){ //最小値探索
if(strcmp(target->name, d->name) > 0) target = d;
}
if(top == target){
top = target->next; //最小値がtopならtopにnextを保持
}else{
for(d = top; d->next != target; d = d->next) ; // 最小値がtop以外なら最小値の親と最小値の子をつなげる
d->next = target->next;
}
current->next = target; // 新しいツリーの末尾に最小値を追加
current = target;
current->next = NULL;
}
return work.next;
}
718:デフォルトの名無しさん
09/07/07 01:42:03
1] 授業単元:C言語
[2] 問題文(含コード&リンク):n個の整数データを入力し,最後に平均を出力,nは最初に入力する(nは自然数),平均は小数部まで求める実行例として
[3] 環境
[3.1] OS:Windows
[3.2] gcc 3.4
[3.3] 言語:C
[4] 期限:7/7 18時まで
#include<stdio.h>
void main(void)
{
int x,y,z,sum;
double ave;
y=1;
sum=0;
printf("入力するデータ数は? ");
scanf(" %d", &x);
if(x>1){
for(y=1; y=x; y++){
printf("No .%d",y);
y++;
scanf("%d", &z);
sum=sum+z;
}
ave=sum/x;
printf("以上%d個の平均は:%.6f",x,ave);
}
}
とりあえず自分でここまでやってみましたけどわかりません><
719:デフォルトの名無しさん
09/07/07 01:52:24
>>716
横レスだけどファイルを開きすぎて落ちるってどういうこと?
outはきちんとfcloseしてるから再利用してよさそうなんだけどやっちゃダメなの?
後学のためにご教示願います。
720:デフォルトの名無しさん
09/07/07 01:57:27
outはちゃんと閉じてるけどinは増える一方でしょ
0
1 out open
0 out close
1 in open
2 out open
1 out close
2 in open
というながれで、ファイルカウントが最初に最大になるのはoutをopenしたときでしょ
721:デフォルトの名無しさん
09/07/07 02:06:14
なるほどそういうことか。サンクス。
722:デフォルトの名無しさん
09/07/07 02:26:49
>>718
#include<stdio.h>
void main(void)
{
int x,y,z,sum;
double ave;
sum = 0;
printf("入力するデータ数は? ");
scanf("%d", &x);
if(x>=1){
for(y=1; y <= x; y++){
printf("No.%d ",y);
scanf("%d", &z);
sum=sum+z;
}
ave=(double)sum/x;
printf("以上%d個の平均は:%.6f",x,ave);
}
}
723:デフォルトの名無しさん
09/07/07 02:48:35
>>722
ありがとうございます
次ページ最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
4970日前に更新/375 KB
担当:undef