07/11/05 20:38:18
あなたが解けないC言語/C++言語の宿題を片付けもらうスレッドです。気に入らない質問やその他や発言はスルーの方向で。
【質問者へ】
回答者の便宜のため、質問の際は以下を行うことを推奨します。
・質問は【質問テンプレ】を利用してください。
・問題文は、出題されたまま全文を書いてください。
・計算問題は数式をあげ、どのような計算をするのか詳しく説明してください。
・エラーは、その詳細と発生した行を書きましょう。エラーメッセージはコピペしてください。
・後から問題に付け足しするのはやめましょう。付け足しは作業を無駄にしがちです。
・なりすましを防ぐため、トリップを使ってください。名前欄に、「#」に続けて任意の文字列を入力して投稿すると、その文字列を知らない他人に騙られることを防ぐことができます。
【質問テンプレ】
[1] 授業単元:
[2] 問題文(含コード&リンク):
[3] 環境
[3.1] OS: (Windows/Linux/等々)
[3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
[3.3] 言語: (C/C++/どちらでも可 のいずれか)
[4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか)
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
【アップローダー==ラウンジ】(質問が長い時はココ使うと便利 回答者もコードが長ければここに)
URLリンク(kansai2channeler.hp.infoseek.co.jp)
【C 関数検索 man on WWW】 URLリンク(www.linux.or.jp)
【過去ログ検索】 URLリンク(chomework.sakura.ne.jp)
【wiki】 URLリンク(www23.atwiki.jp)
【前スレ】
C/C++の宿題を片付けます 97代目
スレリンク(tech板)
2:C
07/11/05 21:00:26
[1]3
[2]
数値(0:END):2
現在までの合計:2
一つ前の合計:0
a=2, b=0
数値(0:END):5
現在までの合計:7
一つ前の合計:2
a=2, b=7
数値(0:END):7
現在までの合計:14
一つ前の合計:7
a=14, b=7
数値(0:END):9
現在までの合計:23
一つ前の合計:14
a=14, b=23
数値(0:END):3
現在までの合計:26
一つ前の合計:23
a=26, b=23
数値(0:END):0
終了します。
↑を↓の感じでお願いします。
3:C
07/11/05 21:01:18
#include <stdio.h>
#include <stdlib.h>
int main() {
int a=0, b=0;
int *now, *prev;
/* 変数宣言、および処理を書く */
printf("現在までの合計:%d\n一つ前の合計:%d\n", *now, *prev);
printf("a=%d, b=%d\n", a, b);
/* 処理を書く */
}
[6]6日まで
C言語でお願いします
4:デフォルトの名無しさん
07/11/05 21:08:43
[1] 授業単元: C++
[2] 問題文(含コード&リンク):
・CPlayerクラスの定義
・CPlayerのオブジェクトをnew演算子の4個の変数を動的に確保
・4つの変数それぞれのm_nLifeに任意の値を入力させる
・入力された4つの変数それぞれのm_nLifeを表示する。
・確保したオブジェクトを開放
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: VS2005
[3.3] 言語: C++
[4] 期限: 2007年11月6日10:00まで
[5] その他の制限:特になし
よろしくお願いします
5:デフォルトの名無しさん
07/11/05 21:29:35
>>4
問題の意味がわからん
6:デフォルトの名無しさん
07/11/05 22:14:19
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):
ニュートン法と二分法の両方を用いて、直線y=x+1/2と単位円x*x+y*y=1の交点のの近似解(小数点以下第6位まで)を求めよ。
1つのプログラムに書くこと。
二分法の初期値[a,b]=[-1,1]
ニュートン法で用いる初期値は2つとも0とせよ。
ニュートン法も二分法もともに何回で収束したかがわかるようにすること。
関数へのポインタは必ず使うこと。
[3] 環境
[3.1] OS: UNIX
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: Cのみ
[4] 期限: 2007年11月6日17時
7:デフォルトの名無しさん
07/11/05 22:59:15
[1]授業単元:情報セキュリティ
[2]問題文
これらの変換方式を理解しその法則から数値を導き出すプログラムを書きなさい。
以下内容
スレリンク(tech板:133-134番)
これをCで吐けるようにしたいのですが
[3]環境
[3.1]OS:Windows
[3.2]コンパイラ:VC or BCC
[3.3]言語:C
[4]期限:2007年11月6日 8時
アセンブラのところにも書いたのですが、こちらのほうが良さそうなので
こちらで質問させていただきます。お願いします
8:aho
07/11/05 23:48:48
>>4
問題文をちゃんと書かんかい!
まあ一応作ったルわ
まずはCPlayerクラスの定義から
class CPlayer{
int* val1;
int* val2;
int* val3;
int* val4;
public:
CPlayer::CPlayer();
CPlayer::~CPlayer();
void CPlayer::inputData();
void CPlayer::showData();
};
9:aho
07/11/05 23:52:01
>>8続き
次にコンストラクタ内で動的にメモリを確保する。
CPlayer::CPlayer(){
int size = 10;
val1 = new int[size];
val2 = new int[size];
val3 = new int[size];
val4 = new int[size];
}
次は順番をちょっと変えてメモリの解放から先に
CPlayer::~CPlayer(){
if(val1){
delete[] val1;
val1 = NULL;
}
if(val2){
delete[] val2;
val2 = NULL;
}
if(val3){
delete[] val3;
val3 = NULL;
}
if(val4){
delete[] val4;
val4 = NULL;
}
}
10:aho
07/11/05 23:54:46
>>4
次はデータの入力の実装。
と思ったけど、面倒になったからやめる。
11:4
07/11/06 00:21:38
>>5
授業を理解してないので・・・
>>8
ありがとうございます。
頑張ってみます。
12:デフォルトの名無しさん
07/11/06 02:56:48
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク): URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: g++
[3.3] 言語: C++
[4] 期限: 11月6日22:00まで
[5] その他の制限: 条件が問題文と一緒にありますので確認お願いします
よろしくお願いしますm(_ _)m
13:デフォルトの名無しさん
07/11/06 08:43:49
前スレ>>955
>正四面体があるとする。底面(ある一つの面)に平行な(n-1)枚の面で高さをn等分することを考える。この作業を他の面に平行な面でも行う(他の方向にもn等分する)場合、正四面体は全部で何個に分けられるか。
正四面体をn等分すると正四面体と正八面体の二種類の立体が出来て、それぞれの数は下記の通りです。
正四面体 n*(n^2+2)/3
正八面体 n*(n+1)*(n-1)/6
数学的な証明は自分でしてください。
14:デフォルトの名無しさん
07/11/06 09:07:49
>>12
似たような課題前見て、そん時upしたソースファイルと開いた英文ファイルupしとく
URLリンク(kansai2channeler.hp.infoseek.co.jp)
まぁ、好きなように改造してくれ
strtok使ったりとまぁごちゃごちゃしてて読みづらいことこの上ないだろうけどな
15:デフォルトの名無しさん
07/11/06 13:49:04
void heikin_bunsan(int tensu[],int num){
int i;
double f;
double heikin;
double bunsan;
double goukei;
double total;
for(i=0;i<num;i++){
goukei=goukei+tensu[i];
}
heikin=goukei/num;
for(i=0;i<num;i++){
f=(tensu[i]-heikin)*(tensu[i]-heikin);
total=total+f;}
bunsan=total/num;
printf("平均点%3.3d点\n",heikin);
printf("分散%3.3d\n",bunsan);
}
goukeiとheikinの計算部分を間違えているようです、間違いの指摘お願いします。
もっと短縮できるところあったらそこもお願いします><
16:デフォルトの名無しさん
07/11/06 14:05:53
>>14
なに得意げにCの小汚いソースさらしてんだか
17:デフォルトの名無しさん
07/11/06 14:19:49
>>16
そういう前に綺麗なソースとやらを見せてくれ
18:デフォルトの名無しさん
07/11/06 14:33:03
>>15
goukeiとtotalが初期化されてない。
表示は%dじゃなくて%f。
工夫すればループは一回でできる。
void heikin_bunsan(int tensu[], int num) {
int i;
double goukei=0,total=0,heikin,bunsan;
for(i=0; i<num; i++) {
goukei += tensu[i];
total += tensu[i] * tensu[i];
}
heikin = goukei / num;
bunsan = total / num - heikin * heikin;
printf("平均点%3.3f点\n",heikin);
printf("分散%3.3f\n",bunsan);
}
19:デフォルトの名無しさん
07/11/06 14:40:31
>>17
やだよ。
std::stringを使えってことだから、あの小汚いソースにあるmallocやstrtokなどは不要だし、
リスト構造も不要(std::listを使えという意味じゃない)。
なにより、汚いじゃん。あれ読むのに時間を使うとしたら無駄なので、そう言ったまで。
20:デフォルトの名無しさん
07/11/06 16:21:50
>>14
>>12です。C言語があまりわからないです・・・
すいません・・・
21:デフォルトの名無しさん
07/11/06 16:29:53
>>19
小汚いソースや変態的ソースで回答するのがこのスレの醍醐味ですよ^^
22:デフォルトの名無しさん
07/11/06 17:43:25
>>12
もろもろ適当だけど、まぁ宿題の回答位にはなってると思う。
URLリンク(kansai2channeler.hp.infoseek.co.jp)
make&実行はしてみたが、テストはしてない。
23:デフォルトの名無しさん
07/11/06 18:23:10
【質問テンプレ】
[1] 授業単元:1次元配列&2次元配列&else if~&switch case文
[2] 問題文(含コード&リンク):
1つ目。生徒10人分の身長データがある。
この身長データを配列に読み込み、平均身長を計算しなさい。
また、画面に番号・身長、最後に平均身長及び最も高い人の番号と身長を表示させなさい。
なおここでいう番号とは配列番号とする。
2つ目。上のデータを、身長をキーワードにして降順にソートしなさい。
3つ目。最初のプログラムに身長の低い順に順位をつける処理を追加しなさい。
[3] 環境
[3.1] OS: Unix
[3.2] gcc34
[3.3] 言語: C言語
[4] 期限: ([2007年11月06日21:00まで)
[5] その他の制限: できるだけ初心者でもわかる文がいいです
24:デフォルトの名無しさん
07/11/06 18:37:04
>>23
身長データはテキストファイルから読み込むのですか?
25:デフォルトの名無しさん
07/11/06 19:00:29
>>23に追加です・・・
入力データ:165、173、169、178、175、159、171、169、170、168
です。最初の問題の追加です。入力もれすいません
26:デフォルトの名無しさん
07/11/06 19:03:58
[1] 授業単元:配列の使い方、関数の使い方
[2] 問題文:
(1)2行3列の行列AとBの和と差を求めよ.
c(i,j)=a(i,j)+b(i,j)
d(i,j)=a(i,j)-b(i,j)
(2)2行3列の行列Aと3行4列の行列Bの積Cを求めよ
c(i,j)=Σ(k=1~3)a(i,k)b(k,j)
(3)eのx乗=1+x/1!+xの2乗/2!+xの3乗/3!+・・・
を計算するプログラムを作れ
(4)これを関数として定義し、
x=0,0.1,0.2,・・・,1.0を計算せよ.
また、power(e,x)と比較せよ.
ただし、e=2,71828として計算せよ.
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン:不明
[3.3] 言語:C++
[4] 期限:2007念11月07日11:00まで
[5] その他の制限:なし
27:デフォルトの名無しさん
07/11/06 20:04:19
>>26
(3)と(4)、ネーピア数などを求めるプログラムは前スレ>>427にもあるみたいです。
#include <stdio.h>
#include <math.h>
double myexp(double x)
{
double s = 0.0;
double a = 1.0;
int n;
s += 1.0;
for (n = 1; n < 20; n++) {
a = a * x / n;
s = s + a;
}
return s;
}
int main(void)
{
double x;
printf("\t x\t myexp(x)\t exp(x)\n");
for(x=0.1;x<=1.0;x+=0.1)
{
printf("\t%2.1f\t%13.5f\t%13.5f\n", x, myexp(x), exp(x));
}
return 0;
}
28:デフォルトの名無しさん
07/11/06 20:14:17
[1] 授業単元:C
[2] 問題文(含コード&リンク):
nを入力して、次の級数の和[1+(1/2)+(1/3)+(1/4)+...+(1/n)]の値を計算して出力する。
(整数型変数と実数型変数の混合演算の結果は実数型となり、整数が頼みの演算結果は整数になることに注意せよ)
[3] 環境
[3.1] OS:Unix(MacOSX)
[3.2] コンパイラ名とバージョン:gcc 4.0.1
[3.3] 言語: Cにて
[4] 期限: [2007年11月6日まで]
[5] その他の制限:特にはないです。
当方、C言語初心者なのですが、
どうしてもわからないので支援をお願い致します。
軽く書いてみたのですが、結果が0しか返ってきません。
よろしくお願いします。
29:デフォルトの名無しさん
07/11/06 20:22:54
1.0にすればいいんじゃね?
30:デフォルトの名無しさん
07/11/06 20:34:21
#define MAX 1
#define MIN 3
int * ranking(int *n1, int *n2, int *n3, int rank) {
/* rankが1なら最大値、3なら最小値を返す */
/* 関数を作成 */
}
int main() {
int a, b, c, i;
printf("(a,b,c):");
scanf("%d %d %d", &a, &b, &c);
printf("(a,b,c)=(%d,%d,%d)\n", a, b, c);
printf("最大値 : %d\n", *ranking(&a, &b, &c, MAX));
printf("最小値 : %d\n", *ranking(&a, &b, &c, MIN));
}
31:デフォルトの名無しさん
07/11/06 20:43:33
>>28
double KyuuSuu(int n)
{
int i;
double num = 0.0;
for(i = 1; i <= n; i++)
num += (1.0/i);
return num;
}
32:shin
07/11/06 21:04:55
[1] 授業単元: 文字と文字列 ASCIIコード
[2] 問題文(含コード&リンク):
入力された文字列中に、文字 a がいくつ含まれているか個数を表示し、
見つけた箇所に「^」を表示するプログラム。
【動作例】
文字列を入力 >> aoriunvtyuoertnoainaainAi
a を4個発見しました。
文字列・・・aoriunvtyuoertnoainaainAi
^ ^ ^^
(本当は ^ が a 下にきます)
[3] 環境
[3.1] OS: Windows Vista
[3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
[3.3] 言語: C++
[4] 期限: 出来れば・・2007年11月7日 22:00までにお願いします
33:デフォルトの名無しさん
07/11/06 21:05:23
[1] 授業単元:C
[2] 問題文(含コード&リンク):
for( i?? ;i?? ;i?? ) { for ( j?? ;j?? ;j?? ) { printf("%d ",j); } printf("\n"); }
for文の中を埋めて一行目 1 2 二行目 2 4 6 三行目3 6 9 12 四行目 4 8 12 16 20
五行目 5 10 15 20 25 30と表示させよ
[3] 環境
[3.1] OS:WindowsXP
[3.2] コンパイラ名とバージョン:BCC 5.5
[3.3] 言語: C
[4] 期限: [2007年11月8日まで]
[5] その他の制限:特にはないです。
よろしくお願いします。
34:shin
07/11/06 21:05:50
ここまでは作りました・・(ちなみに「a」のASCIIコードは「0x61」です)
#include <iostream.h>
main()
{
const int Max_Length = 50 ; // 入力文字列の最大値
char sentence[Max_Length] ; // 入力文字列
int count ; // 文字カウンタ
// 文字列の入力
cout << "英数字のみの文字列を入力して下さい。 >>> " ;
cin.getline( sentence, Max_Length ) ;
// 文字数のカウント
count = 0 ;
while( sentence[count] != '\0'){
count++ ;
}
35:23
07/11/06 21:09:12
>>23ですが、とりあえず最初の問題はできました。
#include<stdio.h>
int main()
{
int a[9],sum=0,i,j,max=0,n;
printf("身長を入力してください\n");
for(i=0;i<10;i++){
printf("%d人目の身長を入力⇒",i+1);
scanf("%d",&a[i]);
sum=a[i]+sum;
if(max<a[i]){
max=a[i];
n=i+1;
}
}
for(j=0;j<10;j++){
printf("%d番目の身長は%dcmです\n",j+1,a[j]);
}
printf("平均身長は%.2fcm 最高身長は%d番目の%dcmです\n",(float)(sum)/(j),n,max);
}
です。しかし、2番目と3番目がどうしてもわかりませんどなたかご教授ください
36:shin
07/11/06 21:09:52
32と34の書き込みはつながってると思ってください!
おねがいします
37:デフォルトの名無しさん
07/11/06 21:24:34
>>31
ありがとうございましたm(__)m
完成しました。
明日の提出にも間に合いそうです。
38:デフォルトの名無しさん
07/11/06 21:40:03
>>33
for (i=1; i<=5; i+=1) { for (j=i; j<=i*(i+1); j+=i) { printf("%d ",j); } printf("\n"); }
39:デフォルトの名無しさん
07/11/06 21:41:39
// >>32 文中のaの数をカウントするプログラム
// bcc 5.5.1 for win32
#include <iostream.h>
int main(void)
{
const int Max_Length = 50 ; // 入力文字列の最大値
char sentence[Max_Length] , dummy[Max_Length]; // 入力文字列
int count = 0, a = 0; // 文字カウンタ
// 文字列の入力
cout << "英数字のみの文字列を入力して下さい。 >>> " ;
cin.getline( sentence, Max_Length ) ;
// 文字数のカウント
while( sentence[count] != '\0'){
if (sentence[count] == 0x61){
a++ ;
dummy[count] = '^' ;
} else {
dummy[count] = ' ' ;
}
count++ ;
}
dummy[count] = '\0' ;
cout << "aは次の数だけ見つかりました : " << a << "\n" << sentence << "\n" << dummy << endl ;
}
40:デフォルトの名無しさん
07/11/06 22:07:50
規制でパソコンから書けないので携帯から
1)C言語
2)積算日数計算(閏年含む)リンクはつなげません
3)環境
3、1)OS Linux
3、2)不明
3、3)言語 C言語
4)期限・2007年11月7日
5)void?は使わない方向で。if 又は for 文でお願いします。
月ごとに{31,28…}と指定したと思います。閏年は{31、29…}という感じで別に指定していました。
よろしくお願いします。
41:デフォルトの名無しさん
07/11/06 22:11:37
// >>23
#include<stdio.h>
int main(){
int a[10],sum=0,i,j,max=0,n,temp;
printf("身長を入力してください\n");
for(i=0;i<10;i++){
printf("%d人目の身長を入力 : ",i+1);
scanf("%d",&a[i]);
sum=a[i]+sum;
if(max<a[i]){
max=a[i];
n=i+1;
}
}
for(j=0;j<10;j++){
printf("%d番目の身長は%dcmです\n",j+1,a[j]);
}
printf("\n平均身長は%.2fcm 最高身長は%d番目の%dcmです\n\n",(float)(sum)/(j),n,max);
for (i = 0; i < 10 - 1; i++) {
for (j = 10 - 1; j > i; j--) {
if (a[j - 1] > a[j]) {
temp = a[j];
a[j] = a[j - 1];
a[j - 1] = temp;
}
}
}
for(j=0;j<10;j++){
printf("%d番目の身長は%dcmです\n",j+1,a[j]);
}
}
42:23
07/11/06 22:53:08
>>41さん
これは、1番最初のやつのプログラムでしょうか?
43:デフォルトの名無しさん
07/11/06 23:06:21
[1] 授業単元: C
[2] 問題文(含コード&リンク): int型の変数bunbo、bunshiをメンバに持つ、
構造体struct bunsuuを定義する。
2つのstruct bunsuu型の変数を引数として、
足し算、引き算、掛け算、割り算を行った結果を
戻り値とする関数をそれぞれ作成しなさい。
2つのint型を引数とし、その最大公約数を計算して
戻り値とする関数も作成し、必要に応じて利用しなさい。
struct bunsuu型の変数を出力する関数を作成しなさい。
出力は「分子 / 分母」の形で1行とする。
ただし分母が1の場合は、分子のみとする。
以上6種類の関数が作成できたら、
キーボードから2つの分数を入力し、
足し算、引き算、掛け算、割り算の計算結果を順に
分数で画面に出力するmain関数を作成しなさい。
[3] 環境
[3.1] OS: WindowsXP
[3.2] コンパイラ名とバージョン:VS2005
[3.3] 言語: C
[4] 期限: 11/8まで
[5] その他の制限: 特になし
44:デフォルトの名無しさん
07/11/06 23:07:26
[1] 授業単元: C
[2] 問題文(含コード&リンク):要素数が10のint型の配列に
キーボードから数値を入力する関数を作成し
(main関数の中で)呼び出しなさい。
配列はmain関数の中で宣言し、
入力を行う関数は、配列のアドレスと
配列の要素数を引数として受け取るものとする。
[3] 環境
[3.1] OS: WindowsXP
[3.2] コンパイラ名とバージョン:VS2005
[3.3] 言語: C
[4] 期限: 11/8まで
[5] その他の制限: 特になし
こちらもお願いします
45:shin
07/11/06 23:27:35
>>39
ありがとうございました(´`)!!!!!!!!!!
46:デフォルトの名無しさん
07/11/06 23:39:17
[1] 授業単元:オペレーティングシステム
[2] 問題文(含コード&リンク):
HTTPリクエストを受け付けると、URLに記載された名前のHTMLファイルをブラウザに返す
簡単なWebブラウザをC言語を用いて作成せよ。
このWebサーバはHTTPリクエストを受け付ける毎にforkシステムコールにより新しいプロセスを生成し、
そのプロセスがURLに指定されたHTMLファイルをファイルシステムから取り出して、ブラウザに返す。
基本的には、リクエストを送りリプライを返すことができればいい。
また、結果をブラウザで表示できる程度の実装で構わない。
[3] 環境
[3.1] OS: WindowsXP
[3.2] コンパイラ名とバージョン: cygwin
[3.3] 言語: C言語
[4] 期限: 11月15日
[5] なし
ブラウザに表示させることができません・・・どなたかお助けください
47:デフォルトの名無しさん
07/11/07 02:19:00
(x1+x2+x3+・・・xn)の2乗/N((x1)の2乗+(x2)の2乗+・・・
(xn)の2乗) を計算するプログラムってどうやって書くんですか?
教えてください!!
48:デフォルトの名無しさん
07/11/07 03:15:43
>>47
あなたにはプログラミングの前にテンプレの使い方を教えます。
[1] には授業名などを書いてください。
[2] には問題文を書いてください。
[3] には環境を書いてください。とくに、CかC++は重要です。
[4] には期日。
[5] にはその他を書いてください。
49:デフォルトの名無しさん
07/11/07 03:29:14
[1] C言語入門
[2] jain fairness index の式をC言語でプログラミングで書きなさい.
(x1+x2+x3+・・・xn)の2乗/N((x1)の2乗+(x2)の2乗+・・・
(xn)の2乗) という式
[3] C言語
[4] 11月9日
[5] なし
48さんご指摘ありがとうございました!
よろしくお願いします!
50:デフォルトの名無しさん
07/11/07 03:46:17
>>22
遅れましたがどうもありがとうございました。とっても助かりました
51:デフォルトの名無しさん
07/11/07 03:52:56
>>49
double f(double *x, int n)
{
double s = 0, ss = 0;
int i;
for(i=0; i<n; i++) {
s += x[i];
ss += x[i]*x[i];
}
return s * s / (n * ss);
}
52:デフォルトの名無しさん
07/11/07 06:48:54
>>44
#include <stdio.h>
void input_array(int *a,int *ptr)
{
printf("%d個目の数値入力\n",(*ptr)+1);
scanf("%d",(a+*ptr));
++*ptr;
}
main()
{
int a[10],ptr=0;
printf("数値を10個入力してください。\n");
while(ptr<10){
input_array(&a[0],&ptr);
}
printf("入力結果: ");
for(ptr=0;ptr<10;ptr++)
printf("%d ",a[ptr]);
putchar('\n');
return;
}
53:デフォルトの名無しさん
07/11/07 06:50:37
>>43
URLリンク(kansai2channeler.hp.infoseek.co.jp)
54:33
07/11/07 07:40:52
>>38
どうもありがとうございました~。
55:デフォルトの名無しさん
07/11/07 08:51:46
>>52
>入力を行う関数は、配列のアドレスと
>配列の要素数を引数として受け取るものとする。
56:名無し募集中。。。
07/11/07 09:20:23
[1] 自習 明解C++演習5_9
[2] b以上a以下の全整数の和を求める関数sumを作成せよ。
なお、bが省略されて呼び出される場合はbを1とみなして合計を求めること
[3] 環境
[3.1] OS:WindowsXP
[3.2] コンパイラ名とバージョン:bcc55
[3.3] 言語:C++
[4] 期限:11/7まで
お願いします。
57:デフォルトの名無しさん
07/11/07 09:27:25
#include <iostream>
using namespace std;
int sum(int a){return a*(a+1)/2;}
int sum(int b, int a){return a*(a+1)/2 - b*(b-1)/2;}
main(){
cout<<sum(2,10);
}
58:デフォルトの名無しさん
07/11/07 09:48:19
[1]情報処理
[2]二分法で y=x*x-5 の根をもとめる
[3]C言語 LInux
[4]10時半まで
[5]おねがいします><
59:デフォルトの名無しさん
07/11/07 10:06:56
#include <stdio.h>
double f(double x){return x*x-5;}
main(){
double a=0,b=10,x;
int i;
for(i=0;i<100;i++){
x=(a+b)/2;
if(f(a)*f(x)>0)a=x; else b=x;
}
printf("%.6f",x);
}
60:デフォルトの名無しさん
07/11/07 10:12:10
>59
めっっちゃありがとうございます!!
何回で収束するかもできますか?><
61:デフォルトの名無しさん
07/11/07 10:14:50
[1]情報処理
[2]第1引数で指定したint型の先頭から、第2引数で指定した数の要素に中に、
第3引数で指定した値と一致するものがあればその要素のアドレスを、一致す
るものが無ければNULLを戻り値とする関数を作りなさい。探索アルゴリズムと
して番兵法を用いなさい。作成した関数のテストは、戻り値として得たアドレス
に格納されている値を表示する main関数を作成して行いなさい。一致するもの
がない場合には何も表示しなくてよい。
[3]c言語
[4]11/7 23:00
お願いします。
62:デフォルトの名無しさん
07/11/07 10:15:50
>>60
できるけど、収束はいくつぐらいだよ たとえば2乗したときに5からのずれが0.00001とか
63:デフォルトの名無しさん
07/11/07 10:19:01
#include <stdio.h>
#define gosa 0.00001
double f(double x){return x*x-5;}
main(){
double a=0,b=10,x,y;
int i;
for(i=1;i<100;i++){
x=(a+b)/2;
y=f(x);
if(y<gosa && y>-gosa){printf("%d回目の試行で収束 x=%.6f",i,x);return 0;}
if(f(a)*f(x)>0)a=x; else b=x;
}
printf("収束しない");
}
64:デフォルトの名無しさん
07/11/07 10:21:52
ありがとうございました!!
条件じぶんでかえてやります><
65:教えてください
07/11/07 11:52:10
double bibun_f(double a, double b,double c, double d)
{
double f;
f = 1 / (1 - mu * pow(cos(d - c), 2)) * (mu * ga * sin(d) * cos(d - c) + mu * pow(a, 2) * sin(d - c) * cos(d - c) - ga * sin(c) + mu / lambda * pow(b, 2) * sin(d - c));
return(f);
}
ここでエラーが error C2018: 文字 '0x81' は認識できません。
と error C2018: 文字 '0x40' は認識できません。がでるのですが・・・どうすればいいのでしょうか??
66:名無し募集中。。。
07/11/07 11:55:15
>>57
ありがとうございました
67:デフォルトの名無しさん
07/11/07 12:05:21
>>65
エラーメッセージを読めばわかるように、全角スペースが混ざっている。
あと、宿題以外は基本的にはスレ違いだから、以後は別のところで聞いてね。
68:デフォルトの名無しさん
07/11/07 12:13:55
>>61
int *search(int *p, int n, int x) { /* destructive */
for (*(p+n) = x; *p != x; ++p);
return p;
}
main() {
int i, array[10+1]; /* +1 is for sentinel */
for (i = 0; i < 10; ++i) {
array[i] = i % 7;
printf("%p : %d\n", &array[i], array[i]);
}
printf("%d found at %p\n", 4, search(array, 10, 4));
}
69:デフォルトの名無しさん
07/11/07 12:17:48
[1] 授業単元: プログラミング演習
[2] 問題文(含コード&リンク):
N×N のチェス盤が与えられる( 左下を (1,1) とする )。
(x1,y1) にビショップを置いたとき、(x2,y2) に移動するまでの
最小手数を表示せよ。ただし移動できない場合は -1 と表示せよ。
[3] 環境
[3.1] OS: 指定なし
[3.2] コンパイラ名とバージョン: 指定なし
[3.3] 言語: どちらでも可
[4] 期限: 今日中
[5] その他の制限: 特になし
70:デフォルトの名無しさん
07/11/07 12:32:43
[1] 授業単元: プログラミング演習
[2] 問題文(含コード&リンク):
同じ形をした正方形のブロックが N 個与えられる (N ≦ 1000)。
各ブロックには自分自身の重さ weight[k] と、
自分の上に乗せられる重さ load[k] が設定されている。
縦に積める最大のブロックの個数を求めよ。
例:
N = 5, (weight, load) = (19,15), (7,13), (6,7), (6,8), (1,2) → 4
[3] 環境
[3.1] OS: 指定なし
[3.2] コンパイラ名とバージョン: 指定なし
[3.3] 言語: どちらでも可
[4] 期限: 今日中
[5] その他の制限: 特になし
71:デフォルトの名無しさん
07/11/07 12:37:29
>>70
>同じ形をした正方形のブロックが N 個与えられる (N ≦ 1000)。
違う形をした正方形があったら怖い。
同じ大きさと言う解釈でいいのかな?
72:デフォルトの名無しさん
07/11/07 12:43:34
>>71
そういうことです。形(大きさ)が問題になって積めない、ということはないとします。
73:デフォルトの名無しさん
07/11/07 12:45:24
>>71
重さ考えるだけでいんだから大きさはどうだっていいだろ
それより
>正方形のブロック
二次元か
74:デフォルトの名無しさん
07/11/07 12:45:46
>>69
#include<stdio.h>
int main(void){
int x,y,x1,y1,x2,y2;
printf("x1 y1 x2 y2 = ");
scanf("%d %d %d %d",&x1,&y1,&x2,&y2);
x=x1>x2?x1-x2:x2-x1;
y=y1>y2?y1-y2:y2-y1;
if(x==0&&y==0)printf("0");
else if(x==y)printf("1");
else if(x%2==y%2)printf("2");
else printf("-1");
printf("\n");
return 0;
}
75:デフォルトの名無しさん
07/11/07 13:02:11
>>68
ありがとうございました^^
76:デフォルトの名無しさん
07/11/07 13:45:49
このスレも遂に99代目、次100代目ですね。
[1] 授業単元: C言語演習Ⅲ
[2] 問題文(含コード&リンク):
前回の講義にてプログラム実行時の引数を表示するプログラムを作成した。
(実行例)
>ensyu1 file1
argv[0]:ensyu1
argv[1]:file1
>ensyu1 file1 file2
argv[0]:ensyu1
argv[1]:file1
argv[2]:file2
URLリンク(kansai2channeler.hp.infoseek.co.jp)
今回はプログラムが実行時にファイルを1つだけ引数として取るような
プログラムを作成したい。
そこで引数が違う場合には「Usagi: ./ensyu1 filename」と出力させ、
プログラムを終了するように修正せよ。
(実行例)
>ensyu1 file1
argv[0]:ensyu1
argv[1]:file1
>ensyu1 file1 file2
Usagi: ensyu1 filename
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: cygwin gcc
[3.3] 言語: C言語
[4] 期限: 11月8日(木)PM12時までにお願いします。
[5] その他の制限: ファイルの標準入出力まで習いました。
77:デフォルトの名無しさん
07/11/07 13:49:02
兎じゃなくて、普通はUsageですよ。
78:デフォルトの名無しさん
07/11/07 13:50:40
>>76
×「そこで引数が違う場合には「Usagi: ./ensyu1 filename」と出力させ、 」
○「そこで引数が2つ以上の場合には「Usagi: ensyu1 filename」と出力させ、」
でした./で実行はLinuxですね。(汗)
79:デフォルトの名無しさん
07/11/07 14:03:53
>>77
Usageです。兎だと思ってた。orz
80:デフォルトの名無しさん
07/11/07 15:27:01
すみませんが、お願いします。
[1] 授業単元: 音響工学
[2] 問題文(含コード&リンク):
正弦波に対してガウス窓を掛け、テキストファイルに出力せよ。窓間は任意。
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン:bcc
[3.3] 言語:C++
[4] 期限:2007年11月8日まで
[5] その他の制限:特にありません。
よろしくお願いします!
81:デフォルトの名無しさん
07/11/07 16:21:26
>>80
>>1 をきちんと読んだかい?
82:80
07/11/07 16:57:10
一応読みましたけど、至らない点ありましたか?
83:デフォルトの名無しさん
07/11/07 16:59:55
ガウス窓の説明とその描画方法を書くように
84:デフォルトの名無しさん
07/11/07 17:07:45
>>83
知らないんなら無視すればいいんじゃないかなー
やる気あるならググれば一発だしー
描画しろなんてどこにも書いてないしー
85:デフォルトの名無しさん
07/11/07 17:13:22
同意。それは兎も角、テキストファイルへの出力形式については質問させてくれ。
1行1データでずらっとならべればいいのか?
86:デフォルトの名無しさん
07/11/07 19:44:02
>>80
gnuplot使えば簡単にできるってことでいいのか
87:80
07/11/07 19:46:33
はい。
1行1データです。
ガウス窓でぐぐってもよくわからなかったので、お願いしに来た次第なのです。
すみませんが、できればお願いします。
88:80
07/11/07 19:47:48
>>86
gnuplotでできるんですか?
89:デフォルトの名無しさん
07/11/07 20:07:16
// >>80 ガウス窓
// gnuplot でやるには plot sin(x)*exp(-x*x/0.03*0.03)
#include <iostream>
#include <math>
#include <fstream>
#define pi 3.141592
int main (void) // window function - Gauss window
{
double x, sigma=0.03;
std::ofstream window("window.csv");
for (x=-pi; x<pi; x+=0.01){
window << x << ", " << sin(x) * exp(-x*x/sigma*sigma) << std::endl;
}
return 0;
}
90:80
07/11/07 20:15:28
ありがとうございます!
これでなんとかなるかもです!
ご迷惑おかけしました。
91:デフォルトの名無しさん
07/11/07 20:58:38
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
cat コマンドの作成
fgetc()とfputc() 関数の使用
標準出力とすること。ファイル名を指定しない場合は標準入力
[3] 環境
[3.1] OS:Linux
[3.2] gcc 3.4
[3.3] C
[4] 期限:無期限
[5] その他の:ポインタあたりからあやふやです
よろしくお願いします。
92:デフォルトの名無しさん
07/11/07 21:25:02
>[5] その他の:ポインタあたりからあやふやです
自己紹介はしなくておk
93:デフォルトの名無しさん
07/11/07 21:26:25
[1] プログラミング
[2] y=ax*x+b*x+cをfor文を使って計算しなさい。係数a b cは自分で入力
xの始めの値、終わりの値、増やす値も自分で入力できるようにしなさい。
[3] 環境
[3.1] OS:WindowsXP
[3.2] コンパイラ名とバージョン: gcc3.4
[3.3] 言語: Cでおねがいします。
[4] 期限: 明日(11月8日まで)
[5] その他
#include<stdio.h>
main()
{
int i, x, y, a, b, c, d, e, f;
printf("y=x*x*a+b*x+cを計算します。\n");
printf("aとbとcを入力して下さい。 --->");
scanf("%f %f %f",&a, &b,&c);
printf("Xの始めの値を入力して下さい。 --->");
scanf("%f",&d);
printf("Xの終わりの値を入力して下さい。--->");
scanf("%f",&e);
printf("Xを増やす値を入力してください。 --->");
scanf("%f",&f);
for(x=d; x<=e; x+f){
y=(x*x*a)+(b*x)+c;
ここまでは自力でやったんですけどその先がまったく分かりません。
よろしくおねがいします。
94:デフォルトの名無しさん
07/11/07 21:58:32
>>93
完成間近じゃねえかよw
95:デフォルトの名無しさん
07/11/07 22:02:18
>>53
コードありがとうございます。
所で・・・
答えとして
入力された分数が 1 / 2 と 2 / 3 のとき
1 / 2 + 2 / 3 = 7 / 6
1 / 2 - 2 / 3 = - 1 / 6
1 / 2 × 2 / 3 = 1 / 3
1 / 2 ÷ 2 / 3 = 3 / 4
こうなるんですが、マイナスの所だけ違うんですがどこを修正すれば
↑のようになりますか?
96:デフォルトの名無しさん
07/11/07 22:14:20
>>95
int gcd(int a,int b)
{
int c,tmp;
if(a<0) a=-a;
if(b<0) b=-b;
if(b>a){
tmp = b;
b = a;
a = tmp;
}
/* ユークリッドの互除法で最大公約数を計算 */
while(a%b!=0){
c = a % b;
a = b;
b = c;
}
return b;
}
符号をチェックしてなかった。gcdをこれに入れ替えてください。
あと、無意味な比較があったのでそれも外してます。
97:93
07/11/07 23:17:20
>>94いくらひねっても分からない・・・orz
98:デフォルトの名無しさん
07/11/07 23:57:15
[1] 授業単元: 応用プログラミング
[2] 問題文(含コード&リンク): URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: g++
[3.3] 言語: C++ (Cは全くわからないです)
[4] 期限: 11月8日21:00
[5] その他の制限: 条件は問題文と一緒にあります。
どうかよろしくおねがいいたします
99:デフォルトの名無しさん
07/11/08 00:05:27
>>93
基本的にはあと y の値と、必要なら x の値を表示するだけだろう
それに加えて x,y,a~f の型と、for のカッコの中身を修正するんだ
100:デフォルトの名無しさん
07/11/08 00:11:29
[1] 授業単元: C言語
[2] 問題文(含コード&リンク): 画像を上下反転させる
[3] 環境
[3.1] OS: Mac
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: Cです
[4] 期限: かなり急いでます、一時ぐらいまで・・・
[5] その他の制限: とりあえず基本的なこと(ポインタ、構造体等)はやりました。
簡単な解説とかあれば嬉しいです。よろしくお願いします。
101:デフォルトの名無しさん
07/11/08 00:18:05
二次元配列の上下の要素を入れ替えるやり方でいいんじゃないの?
102:デフォルトの名無しさん
07/11/08 00:28:09
それがわからないんです・・・。
ネットで探してみましたが、プログラムの内容がさっぱりわかりません。
103:デフォルトの名無しさん
07/11/08 00:36:08
単純な二重ループじゃない?
104:デフォルトの名無しさん
07/11/08 00:51:16
>>76
まだ待ってます。よろしくお願いします。
105:デフォルトの名無しさん
07/11/08 01:01:06
文字列の配列変数とか使いますか?
106:デフォルトの名無しさん
07/11/08 01:04:50
[1] 授業単元: プログラミング技術
[2] 問題文(含コード&リンク):
行列Aとベクトルxの積y=Axを求めるプログラムを作成したい。
・行列nと列数mを入力させる。
・n×x(nかけるx)の行列Aのメモリを動的に確保する。
・ベクトルx,yのメモリを動的に確保する。
・A[0][0]からA[n-1][m-1]までの数値を1つずつ入力させる。
・ベクトルxの要素x[0]からx[m-1]の数値を入力させる。
・計算結果yの要素y[0]からy[n-1]を出力する。
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: cygwin
[3.3] 言語: C
[4] 期限:11/11(日)
107:デフォルトの名無しさん
07/11/08 01:06:09
>>
106ーーー実行結果ーーー
./ensyu3
行(n)の数は?2
列(m)の数は?3
------
A[0][0]=1
A[0][1]=2
A[0][2]=3
A[1][0]=4
A[1][1]=5
A[1][2]=6
------
x[0]=1
x[1]=2
x[2]=3
------
y[0]=14
y[1]=32
$
108:デフォルトの名無しさん
07/11/08 01:07:27
>>105
どれ宛の安価?
109:デフォルトの名無しさん
07/11/08 01:10:00
そこまで書いてあるなら順番どおりにやるだけじゃん。
110:デフォルトの名無しさん
07/11/08 01:10:18
すみません、自分は100です。
色々定義しないとダメですよね・・・。
呼び出し関数を使わなくてもforを使えばいいのでしょうか?
111:デフォルトの名無しさん
07/11/08 01:30:02
>[4] 期限: かなり急いでます、一時ぐらいまで・・・
1時くらいまでといってる割には、ノンビリしてるな。
「1時くらいまでには、私は寝たい」から急いでるだけだろ?
こんなやつに、教える必要ないぞ。
112:デフォルトの名無しさん
07/11/08 01:56:26
>>110
#define SWAP(type, a, b) {type c;c=a;a=b;b=c;}
for(y=0;y<height/2;y++)
{
for(x=0;x<width;x++)
{
SWAP(data_t, data[y][x], data[height-1-y][x]);
}
}
113:デフォルトの名無しさん
07/11/08 01:59:36
期限近いヤツの先にやってやれよ。
>>76
URLリンク(kansai2channeler.hp.infoseek.co.jp)
114:デフォルトの名無しさん
07/11/08 02:02:29
>>113
ありがとうございます。
もう出来ないのかと思ってました。ほんとにありがとうございます。
115:デフォルトの名無しさん
07/11/08 02:12:31
>>91
#include<stdio.h>
void file_output(FILE *fp_in, FILE *fp_out){
int moji;
while((moji=fgetc(fp_in))!=EOF) fputc(moji, fp_out);
}
int main(int argc, char *argv[]){
FILE *fp=stdin;
int i;
if(argc==1) file_output(fp, stdout);
for(i=1;i<argc;i++){
fp=fopen(argv[i], "r");
if(fp==NULL) continue;
file_output(fp, stdout);
fclose(fp);
}
return 0;
}
116:デフォルトの名無しさん
07/11/08 11:40:25
【質問テンプレ】
[1] 授業単元:プログラミング基礎
[2] 問題文(含コード&リンク):
入力した文字列(行単位)n個をソートして
昇順に表示するプログラムを作成してください。
ただし同じ文字列は1回だけ表示します。
また、nは1024以下とし、文字列は1024文字までします。
<補足>
>以下を加えてください。
#include<stdio.h>
#include<string.h>
[3] 環境
[3.1] OS:Linux
[3.2] わかりません
[3.3] C言語
[4] 期限: 11月10日
[5] その他の制限:
文字列の関数
strlen(s):sの長さを数える
strcmp(s1,s2):2つの文字列s1,s2を比較し、辞書的に大きい、等しい、小さいに対して
正数、0、負数を返す。
strcpy(s1,s2):文字列s2をs1にコピーし、s1のアドレスを返す。
strcat(s1,s2):文字列s2をs1の後に付け、s1のアドレスを返す。
117:デフォルトの名無しさん
07/11/08 11:52:35
【質問テンプレ】
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
整数除算 a/b (a,b は正または負の整数)を計算する関数
int fdivide(int a, int b )を作成せよ。 a と b とを入力、
fdivide(a,b )を計算して出力するmain 関数を作成し、
プログラムと実行結果を提出せよ。
a/b は a がb未満になるまでaから b を繰り返し
引き続け、その回数を記憶することで実現させる。
[3] 環境
[3.1] OS: (WindowsXP)
[3.2] コンパイラ名とバージョン: (bcc)
[3.3] 言語: (C++)
[4] 期限: ([11月10日]まで)
[5] その他の制限:C++ の割り算演算子の利用は禁止
よろしくお願いします
118:デフォルトの名無しさん
07/11/08 14:43:16
#include <stdio.h>
#include <stdlib.h>
unsigned fdivide(unsigned a, unsigned b)
{
unsigned sum = 0;
for (unsigned ic = 1; ic < a; ++ic) {
sum += b;
if (sum > a) return ic - 1;
}
return a;
}
int main(int argc, char ** argv)
{
printf("%d\n", fdivide(atoi(argv[1]), atoi(argv[2])));
return 0;
}
119:デフォルトの名無しさん
07/11/08 15:00:38
>>116
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define WORD_LEN_MAX 1024
int cmp(char **a, char **b){
return strcmp(*a, *b);
}
int main(int argc, char *argv[]){
char buf[WORD_LEN_MAX+1+1], **word=NULL;
int len, wordnum=0L, i;
while(fgets(buf, sizeof(buf), stdin)!=NULL){
len=strlen(buf);
if(len>0 && buf[len-1]=='\n') buf[len-1]='\0';
word=realloc(word, sizeof(*word)*(wordnum+1));
word[wordnum++]=strdup(buf);
}
qsort(word, wordnum, sizeof(*word), cmp);
for(i=0;i<wordnum;i++) printf("%s\n", word[i]);
for(i=0;i<wordnum;i++) free(word[i]);
free(word);
return 0;
}
120:デフォルトの名無しさん
07/11/08 16:20:55
[1] 授業単元:
[2] 問題文(含コード&リンク): URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 11月9日10:00まで]
[5] その他の制限: 特にありません
どうぞよろしくお願いします
121:デフォルトの名無しさん
07/11/08 16:24:14
>>120
マルチ乙
スレリンク(tech板:546番)
122:デフォルトの名無しさん
07/11/08 16:40:29
>>91
学校特定しました。
123:デフォルトの名無しさん
07/11/08 17:18:56
>>117
#include <stdio.h>
int fdivide(const int a, const int b )
{
int numerator = a;
int denominator = b;
int result = 0;
int flg;
if(numerator < 0)
numerator *= -1;
if(denominator < 0)
denominator *= -1;
while(numerator >= denominator){
numerator -= denominator;
result++;
};
if((a > 0 && b > 0) ||(a < 0 && b < 0))
flg = +1;
else
flg = -1;
return result*flg;
}
int main()
{
printf("fdivide(6,2) = %d \nfdivide(1,3) = %d \nfdivide(6,-2) = %d \nfdivide(-6,2) = %d \n"
"fdivide(-7,2) = %d \nfdivide(7,-3) = %d \nfdivide(10,1) = %d \n"
,fdivide(6,2),fdivide(1,3),fdivide(6,-2),fdivide(-6,2),fdivide(-7,2),fdivide(7,-3),fdivide(10,1));
return 0;
}
124:デフォルトの名無しさん
07/11/08 18:21:56
[1] 授業単元: データ構造(アルゴリズム)
[2] 問題文:下記
[3] 環境
[3.1] OS: LINUX
[3.2] 言語: C
[4] 期限: 11月14日まで]
[5] その他の制限: 特にありません
どうぞよろしくお願いします
125:デフォルトの名無しさん
07/11/08 18:24:49
>>124
問題文書け
126:デフォルトの名無しさん
07/11/08 18:25:10
124続き
#include <stdio.h>
#include <malloc.h>
struct tfield {
int num[20];
struct tfield *pointer;
} ;
struct tfield *talloc(void);
int main(void)
{
struct tfield *head, *p;
head = NULL;
while (p = talloc(), scanf("%d", p -> num)!= EOF){
p -> pointer = head;
head = p; }
p = head; while(p != NULL){
printf("%d\n", p -> num);
p = p -> pointer; } }
struct tfield *talloc(void)
{return((struct tfield *)malloc(sizeof(struct tfield)));
}
上記を、二つのリストをソートした新たなリストを表示するように改変せよ。です
127:デフォルトの名無しさん
07/11/08 19:31:55
[1] 授業単元:データ構造とアルゴリズム1
[2] 問題文(含コード&リンク):待ち行列シミュレーションするプログラムを作成せよ
完成する関数:
void enqueue(char *x)
void dequeue()
void queue_print()
CPPファイル:URLリンク(kansai2channeler.hp.infoseek.co.jp)
作成するプログラムについて:URLリンク(kansai2channeler.hp.infoseek.co.jp)
実行例:URLリンク(kansai2channeler.hp.infoseek.co.jp)
ヒント:URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
[3.1] OS:win xp
[3.2] Microsoft Visual Studio .NET 2003
[3.3] 言語:c++
[4] 期限:2007年11月09日9:30まで
[5] その他の制限:(どこまで習っているか)構造体、ファイル処理あたりまで
よろしくおねがいします。
128:デフォルトの名無しさん
07/11/08 19:51:08
【質問テンプレ】
[1] 授業単元:プログラミング演習
[2] 問題文(含コード&リンク):
n変数の連立1次方程式をガウスの消去法で解くプログラムを作成せよ。
[3] 環境
[3.1] OS: Windows
[3.2] gcc 3.4
[3.3] 言語: C)
[4] 期限: 明日
[5] その他の制限:配列まで習いました。
129:デフォルトの名無しさん
07/11/08 20:28:33
[1] 授業単元:プログラミング練習
[2] 問題文(含コード&リンク):
あるテキストファイル「memo.txt」にexampleとかかれているとして
そのファイルを読み込み、その書かれている単語の1文字ずつ見ていき
母音なら1と、子音なら0と表示するプログラムをつくれ。
exampleなら1010001と表示するように
[3] 環境
[3.1] OS:Linux
[3.2]GCC
[3.3] C言語
[4] 期限: 11月10日
130:デフォルトの名無しさん
07/11/08 20:42:05
>>129
#include <stdio.h>
#include <ctype.h>
main()
{
int c;
FILE *fp;
if((fp=fopen("memo.txt","r"))==NULL){
printf("file can't open.\n");
return;
}
while((c=fgetc(fp))!=EOF){
switch(c){
case 'a': case 'A': case 'i': case 'I': case 'u':
case 'U': case 'e': case 'E': case 'o': case 'O':
putchar('1');
break;
default:
/* 何がきても0を出力するのならputchar('0');break;だけでいい */
if(isalpha(c))
putchar('0');
else
putchar(' ');
break;
}
}
putchar('\n');
fclose(fp);
}
131:デフォルトの名無しさん
07/11/08 23:21:29
>>124-126
URLリンク(kansai2channeler.hp.infoseek.co.jp)
132:131
07/11/08 23:39:48
配列使って書き直し。こっちのほうが安全。
URLリンク(kansai2channeler.hp.infoseek.co.jp)
133:デフォルトの名無しさん
07/11/08 23:40:24
[1] 授業単元:
[2] 問題文(含コード&リンク): URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 11月9日10:00まで
[5] その他の制限: 期限まであまり時間がありませんが、どうぞよろしくお願いします
134:デフォルトの名無しさん
07/11/09 00:17:40
どなたか>>127よろしくお願いします。どうもすみません
135:デフォルトの名無しさん
07/11/09 00:27:56
>>133
int binarysearch(int v){
/* ここにプログラムを追加 */
int l = 0, r = N-1,x;
while( l<=r )
{
x = (l + r) / 2;
printf("%d %d %d \n",l,x,r);
if( v == a[x] ) return 0; /* 見つかった */
if( v > a[x] ) l = x + 1;
if( v < a[x] ) r = x - 1;
}
return -1;
}
int interpolationsearch(int v){
/* ここにプログラムを追加 */
int l = 0, r = N-1,x;
while( l<=r )
{
x = l + (v - a[l]) * (r - l) / (a[r]-a[l]);
if(x < 0) return -1;
if(x >= N) return -1;
printf("%d %d %d \n",l,x,r);
if( v == a[x] ) return 0; /* 見つかった */
if( v > a[x] ) l = x + 1;
if( v < a[x] ) r = x - 1;
}
return -1;
}
136:デフォルトの名無しさん
07/11/09 00:32:17
>>135
一応な……
v>a[x]の場合、xの位置のデータは答えよりも小さいから、それよりも右に位置する(x+1)を新しいlにする。
v<a[x]の場合、xの位置のデータは答えよりも大きいから、それよりも左に位置する(x-1)を新しいlにする。
137:デフォルトの名無しさん
07/11/09 00:59:36
int binarysearch(int v){
/* ここにプログラムを追加 */
int mid;
int left = 0;
int right = 9;
while(left < right){
mid = (left + right)/2;
if(a[mid] < v)
left = mid + 1;
else
right = mid;
};
if(a[left] == v)
return left;
return -1;
}
138:デフォルトの名無しさん
07/11/09 01:41:38
>>134
URLリンク(kansai2channeler.hp.infoseek.co.jp)
この問題、やらしいな。
front = 0 , rear = 0; /* 空 */
front = 0 , rear = 1; /* 1つめ追加 */
front = 0 , rear = 2; /* 2つめ追加 */
front = 0 , rear = 3; /* 3つめ追加 */
front = 0 , rear = 4; /* 4つめ追加 */
front = 0 , rear = 0; /* 5つめ追加 */
ってなるので、空の場合と満杯の場合でfrontとrearの関係が同じなる。ということでflagたてて逃げてみた。
139:デフォルトの名無しさん
07/11/09 02:24:06
>>128
行列におけるガウスの消去法(掃き出し法)はサンプルコードが至る場所にあります。
URLリンク(www.mit.msn.to)
140:デフォルトの名無しさん
07/11/09 02:32:14
>>127
しかしC++でやるんならコンテナがあるんだからqueueの実装なんかやるだけ無駄、
空いた時間で、queueを使った応用をしたほうが宿題として合格だな
queueの応用問題を考えられないのは教師に欠陥があるからだ
141:デフォルトの名無しさん
07/11/09 09:32:28
>>138どうもありがとうございました。
助かりました
142:デフォルトの名無しさん
07/11/09 10:49:56
[1] 授業単元:C言語入門(第7週ファイルの入出力)
[2] 問題文(含コード&リンク):
簡単なファイル暗号化・復号化のプログラムを作成せよ。
今回の暗号化は、改行以外の文字のアスキーコードに1を足し、復号化はその逆を行うこととする。
最初の引数が暗号化(c)と復号化(d)のどちらかを決定し、次が入力ファイル名、最後が出力ファイル名を示す。
引数が間違っている場合は"error"を表示する。
(実行例)
$ cat input.txt(読み込むファイルの中身確認)
Hello!
Good bye...
$ ./q2-3 c input.txt output.txt
$ cat output.txt
Ifmmp"
Hppe!czf///
$ ./q2-3 d output.txt newinput.txt
$ cat newinput.txt
Hello!
Good bye...
ヒント:ファイルからfgetcで1文字づつ読み込み、int型の変数に入れる。
アスキーコードに1足し、fputcでファイルに書き出す。
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: GCC
[3.3] 言語: C
[4] 期限: 11/11(日)
[5] その他の制限: 暗号化(c)、復号化(d)の判別には「!strcmp」を使ってください。
143:デフォルトの名無しさん
07/11/09 11:06:18
[1] 授業単元: プログラミング演習
[2] 問題文(含コード&リンク):
正規分布に従って、乱数を発生させるプログラムを作成しなさい。
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: Borland C++ Compiler5.5
[3.3] 言語: C++
[4] 期限: 11/9 18時
[5] その他の制限:
よろしくお願いします
144:デフォルトの名無しさん
07/11/09 11:08:42
#include <stdio.h>
#include <string.h>
void encodeDecode(int codeOffset, FILE * fpIn, FILE * fpOut)
{
int ch;
while ((ch = fgetc(fpIn)) != EOF) {
fputc(ch == '\n' ? ch : ch + codeOffset, fpOut);
}
}
int main(int argc, char ** argv)
{
int codeOffset;
FILE * fpIn;
FILE * fpOut;
if (argc > 3) goto error;
if (strcmp(argv[1], "c") == 0) {
codeOffset = 1;
} else if (strcmp(argv[1], "d") == 0) {
codeOffset = -1;
} else {
goto error;
}
fpIn = fopen(argv[2], "r");
if (fpIn == NULL) goto error;
fpOut = fopen(argv[3], "w");
if (fpOut == NULL) goto error;
encodeDecode(codeOffset, fpIn, fpOut);
return 0;
error:
fprintf(stderr, "error\n");
return 1;
}
145:デフォルトの名無しさん
07/11/09 11:13:04
>>144
×argc > 3
○argc <= 3
146:デフォルトの名無しさん
07/11/09 12:13:53
>>143
上限と下限は指定しないのか?
あと、出力方法は?
147:デフォルトの名無しさん
07/11/09 12:23:52
>>146
>上限と下限は指定しないのか?
とりあえず、指定されてないので後から変えられるようにしてもらえますか?
あと、マイナスが出ないようにしてもらえると助かります。
>出力方法は?
数字が表示されればいいと思います。
148:デフォルトの名無しさん
07/11/09 12:25:30
やろうと思ったらC++かよ('A`)
149:デフォルトの名無しさん
07/11/09 12:55:18
>>144-145
期限まで待つつもりでしたが、お早い回答ありがとうございます。
変数名なども分かりやすく書いてもらったみたいで感謝しております。
150:129
07/11/09 14:47:59
[1] 授業単元:プログラミング練習
[2] 問題文(含コード&リンク):
129とほとんど同じなんですけど、
main(){
char str1[10]=”four”;
/*char型の配列”four”に母音が含まれれば1、子音が含まれれば0と表示する*/
}
を作れ。
3] 環境
[3.1] OS:Linux
[3.2]GCC
[3.3] C言語
[4] 期限: 11月10日
151:イトキン ◆lq89E2SwMI
07/11/09 15:09:16
[1] 授業単元: オペレーティングシステム
[2] 問題文(含コード&リンク):
コマンドufsinfoを実装し、ソースコードとレポートを提出せよ。
ufsinfoの概要
ufsinfoは、ファイルシステムから次の情報を取り出す。
○マジック番号(fs_majic)
○ディレクトリ中のファイル名一覧
◆ディレクトリを引数に指定した場合
○データブロックの番号の一覧
◆そのファイルの中身を格納するブロック
ufsinfoの書式
○ufsinfo パス名 スペシャルファイル名
◆パス名
ファイルシステム中のファイルへの絶対パス
◆スペシャルファイル名
ファイルシステム全体を表すファイル名
152:イトキン ◆lq89E2SwMI
07/11/09 15:10:24
[3] 環境
[3.1] OS: mac OS
[3.2] わかりません
[3.3] 言語: C言語のみ
[4] 期限: 12月5日
[5] その他の制限: mmapは使用禁止
スペシャルファイルでなく、イメージファイル上の動作でok
二重間接まで動作チェックせよ。
Cのみで350行程度でかけるみたいです。
問題文、が長過ぎて、何をここに書けばいいのかまよってしまいました。
問題について聞きたいことがあれば、レスお願いします。
153:デフォルトの名無しさん
07/11/09 15:40:01
期限過ぎてもいいんで、誰か143お願いします。
154:デフォルトの名無しさん
07/11/09 16:16:37
>>143
//ボックス=ミューラー法で100個の正規乱数を生成するテスト
#include<iostream>
#include<math.h>
#include<stdio.h>
#include<time.h>
int main()
{
int i;
double u1,u2,n1,n2;
srand(time(NULL));
for(i=0;i<50;i++){
u1=(double)(rand())/RAND_MAX;
u2=(double)(rand())/RAND_MAX;
n1=sqrt(-2*log(u1))*sin(2*M_PI*u2);
n2=sqrt(-2*log(u1))*cos(2*M_PI*u2);
std::cout <<n1<<" "<<n2<<std::endl;
}
return 0;
}
155: ◆a3LMU3qR26
07/11/09 16:36:08
1] 授業単元:アルゴリズム
[2] 問題文:巡回セールスマン問題を解くプログラムを作成しなさい。
今回は、あらゆる場合を全通り調べる方法で解を求めるプログラムでかまいません。
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: (gcc
[3.3] 言語: Cのみ
[4] 期限: できるだけ早く
[5] その他の制限: たいていあり
156: ◆a3LMU3qR26
07/11/09 16:38:30
>>155ですけど
for(i = 0; i < n; i++) used[i]=NO;
perm(0);
return(0);
}
void perm(int d)
{
int i,j;
int b[MAXN];
int s = adj[a[0]][a[n-1]];
if(d == n){
for(i = 0; i < n-1; i++){
s+=adj[a[i]][a[i+1]];
}
}
else {
for (i = 0; i < n; i++) {
if (used[i] == NO) {
a[d] = i;
used[i] = YES;
perm(d + 1);
used[i] = NO;
}
}
}
}
このプログラムを利用したいのですが
これだけだとただの列挙になってしまいます
最小値だけをだすにはどうしたらいいでしょうか?
157:153
07/11/09 18:46:49
>>154
ありがとうございます。
できれば、マイナスの値が出ないようにしていただきたいんですけど、無理ですか?
158:デフォルトの名無しさん
07/11/09 18:54:49
でてきた正規分布を正軸に好きなだけ平行移動させりゃいいじゃん
分散は変わらないから形は変わらないだろ
159:デフォルトの名無しさん
07/11/09 18:56:06
形っていうのは乱数の母集団分布な
160:デフォルトの名無しさん
07/11/09 19:25:13
何故マイナスの値を出さないようにしたいのか?その理由気になる。
161:デフォルトの名無しさん
07/11/09 19:30:40
>>106-107
順番がきましたら、こちらもよろしくお願いします。
期限は日曜日までありますので、土曜日が期限の人を優先していただいて構いません。
正確な期限は11/11(日) PM5時までです。
よろしくお願いします。
162:デフォルトの名無しさん
07/11/09 20:50:23
>>106>>161
URLリンク(kansai2channeler.hp.infoseek.co.jp)
期限や順番なんて関係無いよ。答える奴は自分がやりたい問題をやるだけ
163:デフォルトの名無しさん
07/11/09 21:33:34
[1] データ構造
[2] 問題文(含コード&リンク):
n個の頂点からなるグラフを、辺の両端の頂点に同じ色を塗らないようにし、すべての頂点を彩色するのに必要な色数を最小化する。
また、頂点iに接続する辺の数を頂点iの次数とよぶ。以下のアルゴリズムで作るように。
(1)
①頂点の次数を降順にソートする。
②頂点1に色1を割り当てる
③頂点i=2、...nについて、隣接する頂点に割り当てられていない最小の色番号を頂点iに割り当てる。
(2)頂点iの隣接頂点に彩色された異なる色数を頂点iの飽和次数とする。
①最大次数の頂点に色1を割り当てる
②飽和次数が最大の頂点を選ぶ。そのような頂点が複数ある場合は、
未彩色の部分グラフにおいて最大次数の頂点を選ぶ。
③選んだ頂点に彩色可能な最小の色番号を割り当てる
④全頂点が彩色済みならば終了。そうでないなら②にもどる。
[3] 環境
[3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C
[4] 期限: 2007年11月10日24:00まで(出来れば21:00
[5] その他の制限:
関数と変数の定義
#include <stdio.h>
#define TRUE 1
#define FALSE 0
#define MAX_N 2000
/*変数*/
int n; /*頂点数*/ int m; /*辺数*/
double x[MAX_N],y[MAX_N]; /*各頂点の座標*/
int a[MAX_N][MAX_N]; /*隣接行列*/
int color[MAX_N]; /*色*/
int max_color; /*最大の色番号*/
164:163
07/11/09 21:34:07
問題例データの読み込み
input_fire = fopen(argv[1],"r");
fscanf(input_fire,"%d %d\n",&n,&m); /*頂点数と辺陬の読み込み*/
for(i = 0;i < n;i++){
fscanf(input_file,"%1f %1f\n"&(x[1]),&(y[i])); /*頂点データの読み込み*/
}
for(i = 0;i < n;i++){ /*隣接行列の初期化*/
for(j = 0;j < n;j++){
a[i][j] = 0;
}
}
for(i = 0;i < m;i++){
fscanf(input_file,"%d %d\n",&k1,&k2); /*辺データの読み込み*/
a[k1][k2] = a[k2][k1] = 1; /*隣接行列の生成*/
}
for(i = 0;i < n;i++){
color[i] = -1; /*解の初期化*/
}
説明文に意味がわからないところがあったらご指摘ください。お願いします。
165:デフォルトの名無しさん
07/11/09 21:52:39
>>164
でーんつーだーい
166:デフォルトの名無しさん
07/11/09 22:25:47
[1] 授業単元: プログラミング演習
[2] 問題文(含コード&リンク):
URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 11/12
[5] その他の制限:
よろしくお願いします
167:デフォルトの名無しさん
07/11/09 22:35:03
>>163
それだと彩色数は最小化されないが
168:デフォルトの名無しさん
07/11/09 22:44:59
>>167
これ、近似アルゴリズムだから。
169:デフォルトの名無しさん
07/11/09 22:46:25
#include <stdio.h>
#include <math.h>
double f(double x){
return 1/sqrt(1+pow(x,4)); /*求める定積分*/
}
int main(void){
double x,sum=0,h;
printf("h:"); scanf("%lf",&h);
for(x=2*h;x<1;x+=2*h){ /*範囲指定*/
sum+=(f(x) + 4*f(x-h) + f(x-2*h)) * h/3; /*シンプソンの公式*/
printf("%f %f\n",sum,x);
}
}
170:デフォルトの名無しさん
07/11/09 22:47:19
for(x=0;x<1-2*h;x+=2*h){ /*範囲指定*/
sum+=(f(x) + 4*f(x+h) + f(x+2*h)) * h/3; /*シンプソンの公式*/
printf("%f %f\n",sum,x);
171:デフォルトの名無しさん
07/11/09 23:07:34
>>162
>>答える奴は自分がやりたい問題をやるだけ
と言いつつプログラム作ってくれた>>162さんに感謝。自分の課題解いてくれてありがとうございます。
わざわざプログラムコード中に説明文まで入れてもらって本当に感謝しています。
m(_ _)m
172:aho
07/11/10 01:06:59
>>142
これ以外に何かあればいってちょ!
encrypt()内がちょっと汚いから書き直してね。
void encrypt(char** argv){
int tmp; //文字読み込みバッファ
FILE* fp = fopen(argv[2], "rb");
if(!fp){
printf("file open error!\n");
return;
}
FILE* fout = fopen(argv[3], "wb");
if(!strcmp(argv[1], "c")){ //暗号化
while((tmp = fgetc(fp)) != EOF){
if(tmp == 0x0A){ //改行コード
fputc(tmp, fout);
continue;
}
tmp += 0x01;
fputc(tmp, fout);
}
}
else if(!strcmp(argv[1], "d")){
while((tmp = fgetc(fp)) != EOF){
if(tmp == 0x0A){
fputc(tmp, fout);
continue;
}
tmp -= 0x01;
fputc(tmp, fout);
}
173:aho
07/11/10 01:09:33
>>172
}
fclose(fout);
fclose(fp);
}
int main(int argc, char** argv){
if(!strcmp(argv[1],"c") && !strcmp(argv[1],"d")){
printf("argument error!\n");
return 0;
}
encrypt(argv);
return 0;
}
もっと細かい引数のチェック(argcでも判断, 拡張子判断etc)もした方がいいかもね。
疲れたので寝ます
174:デフォルトの名無しさん
07/11/10 01:14:06
>>172-173
つ「>>144-145」
まあ、作りが少し違う参考になるでしょ。
175:デフォルトの名無しさん
07/11/10 01:23:30
[1] 授業単元: 確率論
[2] 問題文:
URLリンク(www.uploda.org)
ここに書きました。
図はこんな感じです。
URLリンク(www.uploda.org)
[3] 環境
[3.1] OS: LINUX
[3.2] 言語: C
[4] 期限: 11月10日
[5] その他の制限: 特にありません
わかりにくいかもしれませんがお願いします。
176:デフォルトの名無しさん
07/11/10 01:31:02
>>168
それはもちろん知っているが、問題の一行目には最小化すると書かれている
177:153
07/11/10 03:10:07
>>176
このアルゴリズムでは最小化できないらしいので、アルゴリズムのほうを優先するみたいです。
よくみたら『この近似解法で作成せよ』と書いてありました。申し訳ございません。
178:デフォルトの名無しさん
07/11/10 06:18:17
誰かいますか?
179:デフォルトの名無しさん
07/11/10 06:25:27
います
180:デフォルトの名無しさん
07/11/10 06:26:41
イター!!!
お願いします俺の宿題やってくださいませ
181:デフォルトの名無しさん
07/11/10 06:28:07
どれどれ。
182:デフォルトの名無しさん
07/11/10 06:32:14
ありがとうございます!!!!
えーと
数独の問題をグラフ彩色問題に変換せよ
ってもんだいなんですけど
どうやらこれをアルゴリズムで説明させる問題らしいんです
183:デフォルトの名無しさん
07/11/10 06:38:08
縦横と正方形に同じ数字が入ってはいけないっていうことだろう
数字をいろと言い換えればいいだけだろう
184:デフォルトの名無しさん
07/11/10 06:40:27
やっぱそれでいいんですよね!
俺もそれ以外に思い浮かばなくて・・・
数独アルゴリズムの数字を色って書き換えるだけでいいですよね?
185:デフォルトの名無しさん
07/11/10 06:58:06
解くアルゴリズムは作らないと行けないのか?
186:デフォルトの名無しさん
07/11/10 07:01:30
16個のヒントの物は作れるか?
最初にヒントとして配置する数字の数は、24~32個程度が多く、これ以上だと解くのが簡単になる。
逆にそれ以下にするのは作者の技量も必要になってくる。
問題として成立する初期配置の数字の最少個数はまだ結論が出ていないが、
対称形の問題では18個(初出・パズル通信ニコリ31号 1990年)、
非対称の物では17個(初出・パズラー187号 1997年)のものが確認されている。
URLリンク(ja.wikipedia.org)
187:デフォルトの名無しさん
07/11/10 07:05:40
解くアルゴリズムはググッてわかりました
ただ、彩色問題とからめた記述がなかったのでどうしようかとおもいまして・・
188:デフォルトの名無しさん
07/11/10 07:06:38
方針としては、縦か横か、正方形で可能な形を全て埋めてみるといいとおもう
例えば正方形の可能数は9! 通りある 9カ所埋めてみて縦が平気か調べていく
189:デフォルトの名無しさん
07/11/10 07:14:21
参考になりました!
こんな朝早くにありがとうございました
190:デフォルトの名無しさん
07/11/10 07:24:27
最大でも、9*9! とおりしかないから、全配置を決定しておいてから、初期配置を満たすものをサーチすればいいと思う
9 * (9 !) = 3265920だから解けているからどうかを記録するには3MBくらいだ
191:デフォルトの名無しさん
07/11/10 07:26:18
1行目が 123456789 だとすると、2行目には上の数字はこないから減らせる
192:デフォルトの名無しさん
07/11/10 07:50:49
1から9の順列を昇順に求めるプログラム
#include <iostream>
using namespace std;
main(){
int a,b,c,d,e,f,g,h,i,chk[9]={1,1,1,1,1,1,1,1,1},N=0;
char **jretu=new char* [9];
for(a=0;a<9;a++) jretu[a]=new char [362880];
for(a=0;a<9;a++){ chk[a]=0;
for(b=0;b<9;b++){ if(chk[b]==0)continue; chk[b]=0;
for(c=0;c<9;c++){ if(chk[c]==0)continue; chk[c]=0;
for(d=0;d<9;d++){ if(chk[d]==0)continue; chk[d]=0;
for(e=0;e<9;e++){ if(chk[e]==0)continue; chk[e]=0;
for(f=0;f<9;f++){ if(chk[f]==0)continue; chk[f]=0;
for(g=0;g<9;g++){ if(chk[g]==0)continue; chk[g]=0;
for(h=0;h<9;h++){ if(chk[h]==0)continue; chk[h]=0;
for(i=0;i<9;i++){ if(chk[i]==0)continue;
jretu[0][N]=a;jretu[1][N]=b;jretu[2][N]=c;jretu[3][N]=d;
jretu[4][N]=e;jretu[5][N]=f;jretu[6][N]=g;jretu[7][N]=h;jretu[8][N]=i;
N++;
}chk[h]=1;
}chk[g]=1;
}chk[f]=1;
}chk[e]=1;
}chk[d]=1;
}chk[c]=1;
}chk[b]=1;
}chk[a]=1;
}cout<<N;}
193:デフォルトの名無しさん
07/11/10 08:03:31
32bit変数に、3bitずつデータ入れていけば列に同じ数字があるかどうかはXOR演算で出来るな
194:デフォルトの名無しさん
07/11/10 08:05:36
やっぱり駄目だ 結局9回のループか演算(ifなど)がいるな
195:デフォルトの名無しさん
07/11/10 08:09:10
123456789
251498736
987654321
に縦方向に同一文字があるかどうかはどう判定する?
196:デフォルトの名無しさん
07/11/10 08:58:30
>>182
演習問題1は、
>数独(ナンバープレイス) をグラフ彩色問題に変換せよ
だからアルゴリズムで説明させるってどういう意味?
>(a) あいているマスに1~9 までのどれかの数字を入れる
>(b) 縦・横の各列および太線で囲まれた3 × 3 のブロックに同じ数字が入ってはいけない
(b)の定義を以下のように読み替える。
(1)3×3の小ブロック内のマスは全て異なる数字であること
(2)あるマスに対して、同じx、yを持つマスは全て異なる数字であること
特定のマス集合に所属するマスが全て異なる数字である事は、
任意のマスを一つ取り出した場合に、そのマス以外の他のマス集合に所属するマスと数字が異なるということと同じである。
これをグラフで表せば、それぞれのマスをグラフの頂点とした完全グラフにおいて、
任意の辺においてその両端の数値が異なることと同義である。
これはグラフ彩色問題の定義である。
というか、お前>>166だろ?演習問題2ぐらい自分でやれよ。
197:デフォルトの名無しさん
07/11/10 09:06:46
ついでに、SEQまではとりあえずやってみて秋田。
URLリンク(kansai2channeler.hp.infoseek.co.jp)
URLリンク(kansai2channeler.hp.infoseek.co.jp)
DSATURは誰か頼む。
198:デフォルトの名無しさん
07/11/10 09:11:44
数独で16個の初期配置で解けるか調べるプログラム
199:デフォルトの名無しさん
07/11/10 09:12:24
問題として成立する初期配置の数字の最少個数はまだ結論が出ていないが、非対称の物では17個(初出・パズラー187号 1997年)のものが確認されている。
URLリンク(ja.wikipedia.org)
200:デフォルトの名無しさん
07/11/10 09:21:51
>>198
「問題として成立する」と「解けるか」は意味が違うだろ、常識的に考えて。
なんなら初期配置0個でも解けるぞ。
201:198
07/11/10 09:51:13
>>200 解ける = 配置が一意的に求まる 解けている全配置を求めるプログラム書いたが 二つ目が出てこない 時間がかかりすぎる
#include <iostream>
using namespace std;
main(){
int G[9][9],R[9][9],S[9][9];
int x,y[81],m,n,l,d,cnt;
for(n=0;n<81;n++)y[n]=0;
for(m=0;m<9;m++)for(n=0;n<9;n++)G[m][n]=R[m][n]=S[m][n]=1;
d=cnt=0;
for(;;){
x=y[d]; m=d/9; n=d%9; l= 3*(m/3) + n/3;
if( G[m][x]+R[n][x]+S[l][x]==3 ){
if(d<80){G[m][x]=R[n][x]=S[l][x]=0; d++; y[d]=0;continue;}
cnt++;for(int k=0;k<81;k++){if(k%9==0)cout<<endl;cout<<y[k]<<" ";};d--;}
ST:
if(y[d]<8)y[d]++;
else{
if(d==0){cout<<cnt;return 0;}
d--;
x=y[d]; m=d/9; n=d%9; l= 3*(m/3) + n/3;
G[m][x]=R[n][x]=S[l][x]=1;
goto ST;}
}}
202:198
07/11/10 10:08:16
回転や反転の同一視、数字の同一視などを考慮しても全解答を求めるのは困難そうだ
もし全配置が決定できれば、初期配置に対してそれを含む解答がただ一つがどうか調べるだけだ
203:デフォルトの名無しさん
07/11/10 11:03:59
*****
****
***
**
*
204:203
07/11/10 11:04:43
投稿ミスですorz
205:203
07/11/10 11:14:23
下の図形をfor文で作るのですが・・
よくわかりませんorz
*****
****
***
**
*
他スレでヒント貰ったのですが・・
俺の頭じゃ無理だったみたいです・・
206:203
07/11/10 11:15:26
なんだか一個づれてますが
ピラミッド型です。。本当にすみません
207:デフォルトの名無しさん
07/11/10 11:24:40
>>203
ピラミッドを作るなら各段'*'の数は奇数のような気が
偶数の段があると上手くいかないような
*******
*****
***
*
208:デフォルトの名無しさん
07/11/10 11:30:24
>>205
#include <stdio.h>
int main()
{
int i,j;
for(i=5;i>0;i--){
for(j=0;j<5-i;j++)
printf(" ");
for(j=0;j<i;j++)
printf("*");
printf("\n");
}
return 0;
}
209:203
07/11/10 11:30:59
宿題見る限りでは偶数も入ってるんですょね・・
多少いびつな形かもしれません
210:デフォルトの名無しさん
07/11/10 11:36:05
>>209
すると、問題が不明瞭だな。「ピラミッド型」が未定義だ。
これまでの回答で満足できないなら問題をきちんと確認してこい。
211:203
07/11/10 11:37:17
>208
ぉぉーー どうもです;;
212:デフォルトの名無しさん
07/11/10 12:00:34
>>175
ですけどこれじゃあちょっとわかりにくいので
50回移動すると考えれば、考えやすいのかなと。
無制限にこの確率で移動してendにたどり着くことなんて無限にあるんじゃないかと
おもってしまった。
213:デフォルトの名無しさん
07/11/10 12:55:04
0は空マス これ何秒で解ける?
000 000 061
000 200 007
000 940 000
087 000 000
006 000 400
000 000 230
000 078 000
200 006 000
490 000 000
214:デフォルトの名無しさん
07/11/10 13:40:53
542 783 961
839 261 547
761 945 823
387 524 619
126 839 475
954 617 238
615 478 392
278 396 154
493 152 786
1秒もかからんわ
215:デフォルトの名無しさん
07/11/10 18:09:05
[1] 授業単元:C言語
[2] 元のファイルslist.c: URLリンク(www.uploda.org)
自分で途中まで作ったやつ:URLリンク(www.uploda.org)
[3] 環境
[3.1] OS:Linux (家ではWindowsでMinGW+MSYS+XEmacs)
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C
[4] 期限:11月14日
[5] その他の制限:特にないです
[問題文]
課題:slist.c の改良
1.print_person関数を単方向リストを辿るように変更せよ。(自分なりに解決済み)
2.次の機能を実装せよ。
・標準入力から一行ずつ名前と年齢を読み込む
・名前と年齢はカンマ(,)で区切る
・"foo,19"など
・単方向リストに格納して出力
3.その他(授業でヒント「単方向リストの反転」が与えられ、自分なりに解決済み)
[問題文終わり]
自分で作った方はperson_input()の中が全然できてません。
次に続きます。
216:215
07/11/10 18:11:48
構造体に名前と年齢を標準入力して、単方向リストで出力をするプログラムを考えています。
標準入力の際に名前と年齢は「tanaka,20」のように一行にするよう指示されています。
ヒントとして以下が与えられました。
char buf[256] ;
char *name;
int age;
while (fgets (buf, sizeof(buf), stdin))
{
char *sep = rindex (buf, '\n');
if (!sep)
continue;
*sep = '\0';
sep = rindex (sep, ',');
if (!sep)
continue;
*sep = '\0';
name = buf;
age = atoi (++sep);
}
また使用している構造体pは
struct person {
char *name;
int age;
struct person *next;
};
です。このヒントを用いて一行の標準入力から適切に構造体に入れ、
単方向リストに格納するにはどうしたらいいでしょうか。
while文の中がややこしくて終了の仕方も分からないのでよろしくお願いします。
217:デフォルトの名無しさん
07/11/10 18:49:41
>>212
無理
218:163
07/11/10 18:53:17
>>197
ありがとうございます。
あと(2)のほうを、どなたかお願いします。
219:デフォルトの名無しさん
07/11/10 19:04:07
誰かいますか?
220:デフォルトの名無しさん
07/11/10 19:14:21
公にはいないことになっている
221:デフォルトの名無しさん
07/11/10 20:25:26
数独ソルバー
URLリンク(www.ffconsultancy.com)
222:デフォルトの名無しさん
07/11/10 20:41:35
>>192
char **jretu=new char* [9];
for(a=0;a<9;a++) jretu[a]=new char [362880];
となっているが
char jretu[9][362880];
とすればいいだけじゃないか?
というかこれは一体何をするプログラムなんだ。
223:デフォルトの名無しさん
07/11/10 21:07:51
>char jretu[9][362880];
>とすればいいだけじゃないか?
やってみろw
224:デフォルトの名無しさん
07/11/10 21:24:19
等比数列の和を求めるソースを教えてください
初項a,公比r、項数nとする
225:デフォルトの名無しさん
07/11/10 21:26:13
>>224
無能でも無能なりにテンプレを埋めてください
226:デフォルトの名無しさん
07/11/10 21:32:28
224です
教えてください(涙)
227:デフォルトの名無しさん
07/11/10 21:32:58
>>225
折角このオレでも答えられそうな問題なのに、そうつれなくするなよ
>>224
>>1 に質問(しつもん)テンプレっていうのが書(か)いてあるから、よく読(よ)むんだよ
読(よ)めない漢字(かんじ)は辞書(じしょ)を引(ひ)くといいよ
228:aho
07/11/10 21:34:14
>>215
struct person{
char name[20]; //char*では'q'の影響を受けるため
int age;
struct person* next;
};
struct person* addList(char* name, int age, struct person* head){
struct person* list;
/* メモリ確保 */
if((list = (struct person*)malloc(sizeof(struct person))) == NULL){
printf("malloc error!\n");
return NULL;
}
strcpy(list->name, name);
list->age = age;
list->next = head;
head = list;
return head;
}
229:aho
07/11/10 21:35:14
>>228
printf("type 'q' to exit\n");
while(fgets(buf, sizeof(buf), stdin)){
/* 改行コードを取り除く */
char* sep = rindex(buf,'\n');
if(!sep)
continue;
*sep = '\0';
if(!strcmp(buf, "q"))
break;
/* カンマまでをbufに格納 */
sep = rindex(buf, ',');
if(!sep)
continue;
*sep = '\0';
name = buf;
age = atoi(++sep);
head = addList(name, age, head);
}
何かあれば言ってちゃぶだい!
230:デフォルトの名無しさん
07/11/10 21:36:29
数独で16個の初期配置で解けるか調べるプログラム
問題として成立する初期配置の数字の最少個数はまだ結論が出ていないが、非対称の物では17個(初出・パズラー187号 1997年)のものが確認されている。
URLリンク(ja.wikipedia.org)
231:デフォルトの名無しさん
07/11/10 21:43:01
>>226
#!/usr/local/perl
$a = <STDIN>;$r = <STDIN>;$n = <STDIN>;
print $a*$n if($r == 1);print $a*(1-$r**$n)/(1-$r) if($r != 1);
232:デフォルトの名無しさん
07/11/10 21:46:45
質問テンプレってどこにあるんですか?
直接とべるようにしてくれたらうれしいです
233:デフォルトの名無しさん
07/11/10 21:52:50
等比数列の初項aと公比rと項数nをキーボードから入力して、それらを画面に表示して最後にそれらの総和を表示する。
ただし、a,rは実数とする
234:215
07/11/10 21:55:25
>>228
struct person{
char name[20]; //char*では'q'の影響を受けるため
int age;
struct person* next;
};
これはプログラム最初の6行目を書き直せということでしょうか?
addList()が何をしててmain内でどうすればいいのか分かりません。
235:デフォルトの名無しさん
07/11/10 22:09:21
宿題を書き込んだ人がこのスレの流れをみてるんだけど
難易度高いやつからくそ低い宿題まで書き込まれるんですね。。。
236:デフォルトの名無しさん
07/11/10 22:14:57
>>232
俺が適当にテンプレを埋めて置く、間違ってる所は指摘しろ
【質問テンプレ】
[1] 授業単元: プログラミング演習
[2] 問題文(含コード&リンク):
等比数列の初項aと公比rと項数nをキーボードから入力して、それらを画面に表示して最後にそれらの総和を表示する。
ただし、a,rは実数とする
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: BCC
[3.3] 言語: C
[4] 期限: 2007年11月11日零時零分零秒
[5] その他の制限: 普通に作ってってね。簡単すぎるからって
ふざけて物凄いコード書かないでね。
237:デフォルトの名無しさん
07/11/10 22:18:05
>>236
#include<stdio.h>
int main(void){
double a, r, an, sum;
int i, n;
printf("等比数列の初項 a (実数) を入力して下さい : ");
scanf("%lf", &a);
printf("等比数列の公比 r (実数) を入力して下さい : ");
scanf("%lf", &r);
printf("等比数列の項数 n (整数) を入力して下さい : ");
scanf("%d", &n);
printf("a=%g r=%g n=%d\n", a, r, n);
an=a;sum=0.0;
for(i=0;i<n;i++){
sum+=an;
an*=r;
}
printf("sum=%g\n", sum);
return 0;
}
238:aho
07/11/10 22:20:42
>>234
addList()については以下のページを参照。わかりやすくかいてある。
URLリンク(www9.plala.or.jp)
--構造体のメンバnameの型変更について--
while()内にif(!strcmp(buf, "q"))
ていう部分があるでしょ?
そこはbufが"q"だったらループを抜けるってこと。
ここまではOKっすよね?
この後の文の
name = buf;
が厄介なのである。
nameの先頭ポインタにbufの先頭ポインタを代入している。
これをaddList()内でstrcpyの代わりにやることが出来ない。
nameはbufのポインタを参照しているから、bufが変わればnameも一緒に変わってしまう。
説明下手でごめんちゃい。
239:デフォルトの名無しさん
07/11/10 22:20:43
巡回セールス問題を解くプログラムを順列を用いて書きたいのですけど
for(i = 0; i < n; i++) used[i]=NO;
perm(0);
return(0);
}
void perm(int d)
{
int i,j;
int b[MAXN];
int s = adj[a[0]][a[n-1]];
if(d == n){
for(i = 0; i < n-1; i++){
s+=adj[a[i]][a[i+1]];
}
}
else {
for (i = 0; i < n; i++) {
if (used[i] == NO) {
a[d] = i;
used[i] = YES;
perm(d + 1);
used[i] = NO;
}
}
}
}
これだけだとただの列挙になってしまいます
最小値だけをだすにはどうしたらいいでしょうか?
240:aho
07/11/10 22:22:15
>>235
その通り。
その中から暇人達がやりたい問題を選んでやるわけなのだよ、明智君。
241:デフォルトの名無しさん
07/11/10 22:26:14
協力お願いします。
スレリンク(news4vip板)
242:215
07/11/10 22:29:06
>>238さん感謝です。
まだよく分かっていませんが考えてみます。
分からなかったらまた質問したいので215のリンクを貼りなおしました。
先生の元データ:
URLリンク(kansai2channeler.hp.infoseek.co.jp)
自分の途中データ:
URLリンク(kansai2channeler.hp.infoseek.co.jp)
たぶんまた来ますがよろしくお願いします。
243:デフォルトの名無しさん
07/11/10 22:29:53
やりたい問題だけなのか。。。
175なんて理解不能な問題だしたおれってアホだな。。。
上の部分だけならなんとか計算できるレベルなのに
下にもあってしかも上と移動するなんてありえないな。。。
どう書いていけばいいのかわからないんだよね。。。
244:aho
07/11/10 22:32:52
>>175 >>243
もう一度upしてくれ!
ファイルが見つからん!
245:デフォルトの名無しさん
07/11/10 22:33:01
>>175 なんて問題すら見えないんだが…
余程のエスパーでないと解きようも無い
246:175
07/11/10 22:52:39
[1] 授業単元: 確率論
[2] 問題文:
URLリンク(toku.xdisc.net)
ここに書きました。
移動50回するものとします。
図はこんな感じです。
URLリンク(toku.xdisc.net)
[3] 環境
[3.1] OS: LINUX
[3.2] 言語: C
[4] 期限: 11月11日
[5] その他の制限:
図の上の1,2,3を構造体配列struct gstate upnum[3]
図の下の10,11を構造体配列struct gstate downum[2]として。
構造体メンバnumに1,2,3,10,11をいれるように。
お願いします。
247:デフォルトの名無しさん
07/11/10 23:05:10
>>246
gstateの定義は自由?
248:デフォルトの名無しさん
07/11/10 23:22:28
>>246
なんだ 簡単じゃん
249:175
07/11/10 23:26:17
自由でいいです。
まー図の状態数をもっと多くしたかったんですけど。
URLリンク(toku.xdisc.net)
こういう感じが本番なんですけどね。
250:デフォルトの名無しさん
07/11/10 23:27:36
増えただけで考え方は全く同じ
251:デフォルトの名無しさん
07/11/10 23:34:24
何かこれ有効グラフの最大流と最小カット問題みたいだな
252:デフォルトの名無しさん
07/11/10 23:40:15
>>246
行列につっこめれば、ただの積ですむのに……
253:175
07/11/10 23:42:31
上だけなら行列につっこめばいんだけど
下が邪魔なんですよ。
254:デフォルトの名無しさん
07/11/10 23:48:54
>>253
いや、かわんないだろ?
255:デフォルトの名無しさん
07/11/10 23:50:15
>>253
なぜ分けて考える
256: ◆54R0MOHTQo
07/11/10 23:58:08
[1] 授業単元:データ構造論
[2] 問題文(含コード&リンク):
フリーリストを用いた任意精度整数の実現
かなり長くなるのでアップロードしました
URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン:gcc 3.3
[3.3] 言語: C
[4] 期限: 11/11 24:00
[5] その他の制限: 特になし
自分の頭では1日かかっても全く分かりませんでした・・・
よろしくお願いします
257:デフォルトの名無しさん
07/11/11 00:11:22
>>246
URLリンク(kansai2channeler.hp.infoseek.co.jp)
上でも書いたけど、行列で組んだ方がシンプル。ま、いっかってことで。
258:デフォルトの名無しさん
07/11/11 00:13:05
>>246
構造体の名前は変更しておいて
使い方は data.txt をリダイレクトするだけ
ans246 < data.txt
URLリンク(kansai2channeler.hp.infoseek.co.jp)
259:175
07/11/11 00:21:33
>>257
>>258
ありがとうgございます
260:215
07/11/11 00:33:21
>>215-216で質問した者です。
>>228と>>238のahoさんによるヒントで書き直してみましたがうまくいきません。
うちのコンパイラに問題があるのかもしれません。
というのも>>238に紹介されたサイトの長いプログラムをコンパイルしてもうまく
実行されないからです。
URLリンク(kansai2channeler.hp.infoseek.co.jp)
作ったプログラムがうまくできているか確認お願いします。
でもたぶん間違っているので訂正もお願いします。
(もしahoさんがいれば話が早いかもしれません。)
261:215
07/11/11 00:36:10
ちなみに>>215はリンク切れで>>242にもう一度あげています。
262:デフォルトの名無しさん
07/11/11 00:57:13
246ですけどもうひとつ付け足しでいいですかね?
263:デフォルトの名無しさん
07/11/11 01:00:52
>>262
では断る
264:デフォルトの名無しさん
07/11/11 01:16:00
グラフって楽しいね
265:デフォルトの名無しさん
07/11/11 01:17:11
>>260
URLリンク(kansai2channeler.hp.infoseek.co.jp)
あ、めんどくさくてfreeの方直してなかった。ま、いっか。
266:デフォルトの名無しさん
07/11/11 01:20:31
>>256
でんつーだーい
BigNumberとBigNumberNodeの両方でフリーリスト使うようにするとか書かなきゃ
これじゃどっちかだけフリーリストを使って書くかもよ?
なんにせよ全部の問題やるとかなり長いので明日までにはやってられないと思うけど
つかフリーリストの構造がわからないんじゃあフリーリスト使わないで書いてみればいいのに
267:デフォルトの名無しさん
07/11/11 01:21:24
>>266
ちょwww またでんつーだーいかよwwww
268:デフォルトの名無しさん
07/11/11 01:22:22
[1] 授業単元: 確率論
[2] 問題文:
ここに書きました。
URLリンク(toku.xdisc.net)
図はこうです。
URLリンク(toku.xdisc.net)
[3] 環境
[3.1] OS: LINUX
[3.2] 言語: C
[4] 期限: 11月12日
[5] その他の制限:
A,B,C,Dはそれぞれファイルとして扱う
例えばAには 0.6 0.4の2つの数値だけ書かれてあり、その数値を読み取るようにする。
1と1、0と0が一致したらその状態同士、3つ選択肢ができることになるので
右の確率を半分にわけて0.6 0.2 0.2として
とどまる確率0.6 上の次の状態に移動する確率0.2 下のつながった状態に移動
する確率が0.2となります。
下も同様に。
269:デフォルトの名無しさん
07/11/11 01:25:55
>>267
今回は5%3年生のま科だな
ちょっと上は7%4粘性のか科だったはず
正直お前らもうちょっと頑張れと
270:デフォルトの名無しさん
07/11/11 01:25:58
>>268
つーか、もとの問題文でも上と下は別要素で扱えってなってるの?
激しくクソなんだが。
271:215
07/11/11 01:30:41
>>265
ありがとうございます!
うちのコンパイラ(msys)では実行されませんでしたが学校でコンパイルしてみます。
person_free()微妙に変わってましたがさらに手を加えたほうがいいですか?