08/03/10 11:12:29
宿題ではないのですが
[1] 授業単元:n/a
[2] 問題文(含コード&リンク):n/a
[3] 環境
[3.1] OS: (WindowsXPproSP2)
[3.2] コンパイラ名とバージョン: (bccフリー版最新)
[3.3] 言語: (どちらでも可)
[4] 期限: (無期限)
[5] その他の制限: ()
基本的なノリは成分分析やバーコードバトラーです。
・任意の文字列(桁数固定表記の数値がメイン)を任意のリスト(*)に基づいて一字ごとに点数化し、その和を返すプログラム。
・a.txtファイル内に一行毎に一個の文字列を記録した文字列を、上記で丸ごと処理しc.txtファイル(**)として返すプログラム。
リスト自体は別個に独立したb.txtファイルで。
* リストの書式は丸投げですが、二軸マトリックス(x軸…対象文字列内の位置、y軸…対象となる文字の内容)でお願いします。
** 点数が一行に一個ずつ並んでるだけです。
cd実行後のコマンドは"enscore a.txt b.txt c.txt"みたいな感じで。
例:"14159265358979323846"を点数化したい場合
x(左からA~T),y(上から0~10)。尚、y=10は数字以外の場合に適用されます、だから大小区別の英数字ならy=0~62になります。
以下、該当部分が()で括られています。
{y=0|8,56,88,114,100,88,67,10,12,116,107,18,126,60,92,42,44,3,41,73}
{y=1|(124),56,(46),41,81,15,126,95,86,17,105,80,126,71,35,5,107,109,118,15}
{y=2|122,61,19,107,96,(50),128,96,64,46,6,18,73,69,44,(69),33,83,8,27}
{y=3|84,57,100,128,38,88,86,52,(110),7,42,43,23,101,(47),45,(1),81,6,99}
{y=4|3,(116),77,62,88,45,32,1,17,101,59,20,27,26,69,18,41,81,(24),107}
{y=5|25,17,13,(2),108,120,7,(98),123,(65),121,122,116,91,40,109,70,13,73,23}
{y=6|2,19,7,44,91,121,(88),10,58,98,123,109,119,93,88,40,88,99,112,(33)}
{y=7|72,83,32,66,88,86,63,104,27,2,106,84,(7),9,73,18,0,64,6,118}
{y=8|51,75,79,16,102,98,78,51,48,31,(118),36,110,47,12,68,98,(17),106,80}
{y=9|68,109,114,49,(53),70,84,9,62,67,1,(44),80,(117),0,79,16,84,66,56}
{y=10|60,34,105,58,73,99,110,127,9,61,115,23,45,60,39,80,36,3,14,101}
124+116+46+2+53+50+88+98+110+65+118+44+7+117+47+69+1+17+24+33}
=1229
578:デフォルトの名無しさん
08/03/10 15:58:16
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
0001.jpg 0002.jpg 0003.jpg ....というファイルを順に読み込み、
動画として表示するアプリケーションを作成せよ。
問題文全文
URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
[3.1] OS:linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語:C++
[4] 期限:[2008年3月15日まで]
[5] その他の制限:
FLTKを使用する。
映像を直接扱うクラスやライブラリは使わない。(e.g., mpegs)
URLリンク(kansai2channeler.hp.infoseek.co.jp)
上は、自分でやったとこまでです。初心者なので訳が分からなくなってます。
あと、問題文が英語で本当にすみません。
579:デフォルトの名無しさん
08/03/10 16:55:37
>>577
Cで作ってみた
URLリンク(kansai2channeler.hp.infoseek.co.jp)
580:デフォルトの名無しさん
08/03/10 21:11:36
>>579
ありがとう、夜勤から帰ったらためしてみる。まずは取り急ぎ
581:デフォルトの名無しさん
08/03/10 22:57:24
>>576
当方の環境は WindowsXP, 処理系は cygwin(gcc 3.4.4) です。
URLリンク(kansai2channeler.hp.infoseek.co.jp)
K&R2 4.3 よりも無駄に長く汚くなってしまいました。とりあえず、そっちを読んでください。
582:デフォルトの名無しさん
08/03/11 01:55:05
>>581
バグがありました。
URLリンク(kansai2channeler.hp.infoseek.co.jp)
583:577
08/03/11 11:25:18
>>579
折角作って頂いたのに本当に申し訳ないんだが、enscoreコマンド実行時にリストの中身と計算過程の表示を省くには何処を削ればいいんでしょう?
処理個数が多くなりそうなので…。
584:デフォルトの名無しさん
08/03/11 12:40:59
>>583
あれ?リストの中身表示、計算過程って表示されちゃってる?
#define DEBUG ってなってなければ、表示されない(プログラムの実行コードに含まれない)はずなんだけど・・・
コンパイラによってデフォルトで DEBUG ついちゃうのかな?
まぁ、#ifdef DEBUG ~ #endif の間を削除しちゃえばいいさぁ~
585:デフォルトの名無しさん
08/03/12 11:51:16
宿題じゃないいんですけれども
[1] 授業単元:独学
[2] 問題文(含コード&リンク):stl
[3] 環境
[3.1] OS: ubuntu
[3.2] コンパイラ名とバージョン: g++
[3.3] 言語: c++
[4] 期限: (無期限)
[5] その他の制限:
stlの使い方について質問です。今リストの中に1,2,4,8,16,32,64
と入っているんですが、"erase" を使って5番目の数字を削除して中身を表示し、
その後に3番目の数字を削除して表示。 そして、"insert"を使って3番目と4番目の
数字の間に7を入れて表示という感じにするにはどうしたらいいんですか?
#include <iostream>
#include <iterator>
#include <list>
using namespace std;
int main(){
list<int> mylist;
for(int i=1; i<=64; i *= 2)
mylist.push_back(i);
cout<<endl;
list<int>::const_iterator itr1;
for(itr1 = mylist.begin(); itr1 != mylist.end(); itr1++)
cout<< *(itr1)<<" ";
return 0;
}
586:デフォルトの名無しさん
08/03/12 13:18:17
>>585
スレ違い。
初心者歓迎スレでもSTLスレでもお好きな方ヘどうぞ。
587:デフォルトの名無しさん
08/03/13 00:15:41
あー・・・春だなぁ。5~6月までは、あんまりネタがないのかなぁ。
588:デフォルトの名無しさん
08/03/13 02:20:40
今のうちに、C/C++とかアルゴリズムを勉強しておくといいんじゃね。
Structure and Interpretation of Computer Programs (SICP)辺りを読むのも良いかもな
589:デフォルトの名無しさん
08/03/13 16:58:40
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):約分を行う関数を作成せよ。
ただし、分子と分母をメンバとする構造体を用いて、分数を表す。
構造体タグには、typedefによってBUNSUという名前をつけて使用する。
[3] 環境
[3.1] OS:WindowsXP SP2
[3.2] コンパイラ名とバージョン:Developer studio
[3.3] 言語:C++
[4] 期限:無制限
[5] その他の制限:URLリンク(kansai2channeler.hp.infoseek.co.jp)
*1~2の、約分処理と関数の呼び出し方がわかりません。
もしよければお願いします。
590:デフォルトの名無しさん
08/03/13 17:07:56
>構造体タグには、typedefによってBUNSUという名前をつけて使用する。
は?
C++に構造体タグなんてありませんが。構造体名自体が型として使えるので、typedefする必要もありませんが。
591:デフォルトの名無しさん
08/03/13 18:21:48
どっちかといえば期限無制限に突っ込むべきだろ
592:デフォルトの名無しさん
08/03/13 21:20:13
俺の半分は優しさで出来ています
#include<stdio.h>
typedef struct bunsu{
int bunshi;
int bunbo;
} BUNSU;
int getgcd(int m, int n){
while(m*n){ if(m>n) m%=n; else n%=m; }
return m+n;
}
void yakubun_p(BUNSU *x){
int gcd;
gcd = getgcd(x->bunshi, x->bunbo);
x->bunshi /= gcd;
x->bunbo /= gcd;
}
int main(void){
BUNSU a;
printf("分子?"); scanf("%d", &a.bunshi);
printf("分母?"); scanf("%d", &a.bunbo);
printf("%d / %d = ", a.bunshi, a.bunbo);
yakubun_p(&a);
printf("%d / %d\n", a.bunshi, a.bunbo);
return 0;
}
593:デフォルトの名無しさん
08/03/14 00:31:46
>>592
ありがとうございました。
C言語をはじめたばかりですが、がんばっていこうと思います!
594:デフォルトの名無しさん
08/03/14 00:54:42
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
VisualC++を使用して「はさみ将棋」を作成せよ。
テクスト、授業で配布したプリントのほかにも、自分で参考となる資料を集めて利用しても構わない。
[3] 環境
[3.1] OS: WinXP
[3.2] コンパイラ名とバージョン: VC 6.0
[3.3] 言語: C++
[4] 期限: 2008年3月28日まで
[5] その他の制限:特になし。ただ、出来るだけ平易な文で作っていただけると助かります。
595:デフォルトの名無しさん
08/03/14 01:15:00
てst
596:541
08/03/14 01:59:06
[1] 授業単元:オペレーティングシステム
[2] 問題文(含コード&リンク):ls -lの加え-a、-w、-F結果が表示出来るようにしなさい
[3] 環境
[3.1] OS:Linux
[3.2] gcc
[3.3] 言語: C
[4] 期限:2008年3月17日まで
URLリンク(kansai2channeler.hp.infoseek.co.jp)
前回は助けて頂きありがとうございました。
↑自力でここまで作ってみたのですが、-a、-wなどの部分を作成がまったく見当がつきません。
助けて頂けるとありがたいです、よろしくお願いします。
597:デフォルトの名無しさん
08/03/14 04:50:33
>>593
ちょっと待て。
> [3.3] 言語:C++
>C言語をはじめたばかりですが、がんばっていこうと思います!
おまいさんは、何語を習っているのかさえ判っていなかったのか?
598: ◆nUWYoBn0RQ
08/03/14 16:48:25
助けてください。
課題で
c言語の文字列ソートで
char * month[]={"january" ,"february", "march","april","may","june","july"}
をアルファベット順にソートかつ大文字に変えて表示するやり方
がわかりません。
教えてください。今日までなので時間がありません。
お願いします
599:サッカー
08/03/14 17:09:48
1] 授業単元:プログラミング
[2] 問題文 :c言語の文字列ソートで
char * month[]={"january" ,"february", "march","april","may","june","july"}
をアルファベット順にソートかつ大文字に変えて表示しろ。
[3] 環境
[3.1] OS: windowsxp
[3.2] コンパイラ名とバージョン: VC 6.0
[3.3] 言語: C言語
[4] 期限: 2008年3月15日まで
助けてください。
やり方が全くわかりません。
教えてください。
お願いします
600:デフォルトの名無しさん
08/03/14 17:43:58
>>599
ほいよ
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int cmp(const void*a,const void*b){return strcmp(a,b);}
int main(void){
char * month[]={"january" ,"february", "march","april","may","june","july"};
const int N = sizeof month / sizeof * month;
int i;
qsort(month , N , sizeof * month , cmp);
for(i=0;i<N;++i){
const char*it;
for(it=month[i];*it;++it)putchar(toupper(*it));
puts("");
}
return 0;
}
601:600
08/03/14 17:46:38
わりい一行バグってた。cmpを置き換えてくれ
int cmp(const void*a,const void*b){return strcmp(*(char**)a,*(char**)b);}
602:デフォルトの名無しさん
08/03/14 17:50:09
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):
1、,学籍番号と名前と年齢からなる構造体「学生」を定義して、以下の二人の「学生」を
作りなさい。
・学籍番号1番、「青木三郎」20歳
・学籍番号2番、「加藤武雄」21歳
2,「学生」の学籍番号、名前、年齢を設定する関数を作り、1の問題を行いなさい。
[3] 環境
[3.1] OS: (Windows/Linux/等々) Windows
[3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等) Borland C++
[3.3] 言語: (C/C++/どちらでも可 のいずれか) C++
[4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか) できるだけ早く
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
クラスの作り方がよくわかりません。
よろしくお願いします。
603:サッカー
08/03/14 17:53:30
マジ天才です。
助かりました。
ありがとうございます。
604: ◆zCS1o.kilU
08/03/14 18:17:37
1] 授業単元:プログラミング
[2] 問題文 :mystrlen関数作成せよ。プロトタイプはint mystrlen (char*);
またmain関数からmystrlen関数を呼び出し自分の名前の長さを求め
なさい。
実行例「 ”山田太郎”は0008バイトです 」
[3] 環境
[3.1] OS: windowsxp
[3.2] コンパイラ名とバージョン: VC 6.0
[3.3] 言語: C言語
[4] 期限: できるだけ早くお願いします。
[5] strlen関数使用禁止
お願いします。
605:デフォルトの名無しさん
08/03/14 18:27:16
>>604
好きなんどーぞ
int mystrlen(char*p){
return strcspn(p,"");
}
int mystrlen(char*p){
return (char*)memchr(p,0,-1) - p;
}
int mystrlen(char*p){
return strchr(p,0) - p;
}
606:デフォルトの名無しさん
08/03/14 18:27:23
>>602
struct Gakusei {
int num; char* name; int age;
void set(int _num, char* _name, int _age) {
num = _num; name = _name; age = _age;
}
};
int main() {
// 1
Gakusei g1 = {1, "青山三郎", 20};
Gakusei g2 = {2, "加藤武雄", 21};
// 2
g1.set(1, "青山三郎", 20);
g2.set(2, "加藤武雄", 21);
}
607: ◆zCS1o.kilU
08/03/14 18:40:28
ありがとうございます。
もうひとつだけお願いがあります。1] 授業単元:プログラミング
[2] 問題文 :キーボードから西暦と月を入力するとカレンダーを
表示するプログラムを作成せよ
[3] 環境
[3.1] OS: windowsxp
[3.2] コンパイラ名とバージョン: VC 6.0
[3.3] 言語: C言語
[4] 期限: できるだけ早くお願いします。
[5] scanf使用不可. fgetsでお願いします。
お願いします
608:デフォルトの名無しさん
08/03/14 18:44:19
>>604
当方で確認した環境はcygwin/WindowsXP, 処理系はgcc3.4.4 です。
URLリンク(kansai2channeler.hp.infoseek.co.jp)
609: ◆zCS1o.kilU
08/03/14 19:03:27
そうなんですか。
ありがとうございます。
610: ◆TJ9qoWuqvA
08/03/14 19:55:04
教えてください。
わからないよ~。
最後にこれができないと
単位がもらえないよ。
611:デフォルトの名無しさん
08/03/14 20:06:27
>>610
お前が誰だかわからないよ
612:607
08/03/14 20:21:56
607
です。ありがとうございます。
もうひとつだけお願いがあります。1] 授業単元:プログラミング
[2] 問題文 :キーボードから西暦と月を入力するとカレンダーを
表示するプログラムを作成せよ
[3] 環境
[3.1] OS: windowsxp
[3.2] コンパイラ名とバージョン: VC 6.0
[3.3] 言語: C言語
[4] 期限: できるだけ早くお願いします。
[5] scanf使用不可. fgetsでお願いします。
お願いします
613:デフォルトの名無しさん
08/03/14 21:20:32
>>607
>>612
当方で確認した環境は cygwin/WindowsXP, 処理系はgcc3.4.4 です。
URLリンク(kansai2channeler.hp.infoseek.co.jp)
614:デフォルトの名無しさん
08/03/14 22:21:48
[1] 授業単元:プログラミング演習
[2] 問題文(含コード&リンク):データ構造・スタックの作成
[3] 環境
[3.1] OS: windows vista
[3.2] コンパイラ名とバージョン: bcc32
[3.3] 言語: C
[4] 期限: できるだけ早く
URLリンク(www2.uploda.org)
↑スタックとして、これを使用したいと思います。
しかし、整数しか扱えず、浮動小数点数のプッシュが行えません。
関数の返却値をdouble型に変更してみたり、確保する型の変更など
試してみましたが、うまくいきませんでした。
浮動小数点数を扱える様に変更をよろしくおねがいします。
615:デフォルトの名無しさん
08/03/14 22:25:22
ksk
616:デフォルトの名無しさん
08/03/14 22:39:38
>>614
当方で確認した環境はcygwin/WindowsXP, 処理系はgcc3.4.4です。
URLリンク(kansai2channeler.hp.infoseek.co.jp)
617:デフォルトの名無しさん
08/03/14 22:47:22
>>616
614です。
ありがとうございます。
実行してみたところ、一か所エラーがでてしまいました。13行目ですが、
エラー E2034 13: 'void *' 型は 'double *' 型に変換できない(関数 StackAlloc(Stack *,int) )
処理系の違いによるものでしょうか。
何か対策がありましたら教えて頂けると助かります。
618:デフォルトの名無しさん
08/03/14 22:49:54
>>617
元のファイルもコンパイルできなかったのかな?
619:デフォルトの名無しさん
08/03/14 22:50:46
>>617
if ((s->stk = (double *)calloc(max, sizeof(double))) == NULL) {
でどうでしょうか?
620:デフォルトの名無しさん
08/03/14 22:59:48
614です。
>>618
614のファイルでは、整数のみ扱える状態でコンパイル、実行が行えました。
>>619
実行できました。ありがとうございます。
本当に助かりました。
このスタックを用いてプログラムの作成を行うのですが、
また解らないことがありましたら、質問させていただけたらと思いますので
その際はよろしくお願いいたします。
621:デフォルトの名無しさん
08/03/14 23:08:12
>>617
C++としてコンパイルしているだろ?
622:607
08/03/14 23:21:48
613さんありがとうございます。たすかりました。
623:デフォルトの名無しさん
08/03/14 23:33:12
614です。
>>617
拡張子を.cpp としてコンパイルしていました。
Cでコンパイルしたところ動きました。
ご指摘ありがとうございます。今後気を付けます。
>>619
訂正していただいたのにすみませんでした。
言語をCとせずにコンパイルしていたのが原因でした。
616が動作することも確認できました。
ありがとうございました。
624:616
08/03/15 05:59:16
>>620
該当行は double のときは、calloc() -> malloc() に訂正しておいてください。
625:デフォルトの名無しさん
08/03/15 07:40:55
>>596
後半だれてたから、読みづらいソースになってるかもしんないけど、
一応できたからうp。参考程度にどうぞ (間違ってたらごめんね)
URLリンク(kansai2channeler.hp.infoseek.co.jp)
626:デフォルトの名無しさん
08/03/15 09:00:05
英文字A-Zに対して、異なる二つの文字ごとに得点が与えられているとします
最も得点が高くなる文字列を求めたい
例えば3文字で次のように得点が与えられていれば
AB 1
AC 5
BA 2
BC 3
CA 10
CB 1
BCA の得点13が最高得点
627:デフォルトの名無しさん
08/03/15 09:02:50
英字(26文字)を、1-1000までの数字に置き換えても求められるプログラムがよいです
計算量が増えますから、総当たりが難しいです
628:626
08/03/15 09:17:13
巡回セールスマンで最短を最長に変えたものと同じですね
距離をマイナス倍すれば(例えば10から引く)巡回セールスマンと一致しますね
629:デフォルトの名無しさん
08/03/15 09:29:21
でももとの位置へ戻ってこなくて良いところが違いますが・・・
レンタカーやタクシーで巡回するようなものです
630:541
08/03/15 10:48:04
>>625
ありがとうございます。
参考にさせて頂きます。
631:デフォルトの名無しさん
08/03/15 11:06:09
>>626
同じ点(文字)を二度以上通ってもいいですか?
もし、いいなら単純な動的計画法が適用できる気が。
632:デフォルトの名無しさん
08/03/15 11:13:59
>>631
おなじ文字を何度も使ったら値は無限に増えます
ACACACACA・・・・とか 一度だけの並べ替えにしてください
633:デフォルトの名無しさん
08/03/15 11:17:26
>>632
ACA で終わりじゃないの?
634:デフォルトの名無しさん
08/03/15 11:21:06
一度だけの使用で、最も高得点になるものを求めたいです
文字は全て使わなくても良いですが、全部使った方が高得点になります
635:626
08/03/15 11:35:08
すみません 設定を間違えました 出直してきます
636:デフォルトの名無しさん
08/03/15 12:01:14
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):英和辞書を作成せよ。
辞書データはプログラム開始時にファイル(ファイル名はdic.dat)より読み込みメモリ上にリスト構造を構築する。
以下これをリストという。
次の機能をメニューで選べるようにすること。(機能ごとに関数にしておく)
(1)検索:英単語(半角)を入力すると、リストより検索して日本語(全角)の意味を表示する。
(2)追加:新しい単語とその意味をキーボードより入力し、リストに追加する。
(3)修正:リストのデータを修正する。
(4)削除:リストより任意の単語を削除する。
(5)保存:リストをファイルに保存する。
(6)終了:プログラムの終了。もしデータが変更されているのに保存されていない時は、
保存せず終了して良いか確認する処理を行う。
[3] 環境
[3.1] OS:WindowsXP
[3.2] コンパイラ名とバージョン:Visual Studio 2005
[3.3] 言語:C
[4] 期限:3月中
[5] その他の制限:URLリンク(kansai2channeler.hp.infoseek.co.jp)
お願いします。
637:デフォルトの名無しさん
08/03/15 13:01:11
>>634
>文字は全て使わなくても良いですが、全部使った方が高得点になります
それは得点配分しだいじゃないか?
638:デフォルトの名無しさん
08/03/15 20:00:13
>>636
STLのmapをCに移植すればいいんじゃね?
639:デフォルトの名無しさん
08/03/15 20:03:22
リスト構造で実現しろって言ってるのに。
640:デフォルトの名無しさん
08/03/15 20:08:23
>>639は出世しないタイプ
641:デフォルトの名無しさん
08/03/15 20:29:04
>>638
これがマリー・アントワネットの力か……
642:デフォルトの名無しさん
08/03/15 21:14:11
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
標準入力からファイル名を受け取り、ファイル内容を以下のように要素毎に整列し出力せよ
入力ファイル:URLリンク(kansai2channeler.hp.infoseek.co.jp)
出力ファイル:URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3]
環境
[3.1] OS:WindowsXP
[3.2] コンパイラ名とバージョン:gcc3.4
[3.3] 言語:C
[4] 期限:3月20日
[5] その他の制限:
入力するファイルの行数は1000行以内とする
「Perlの方が楽かもねぇ」と言われてもどっちもわからず・・・
643:デフォルトの名無しさん
08/03/16 05:45:48
>>642
URLリンク(kansai2channeler.hp.infoseek.co.jp)
644:642
08/03/16 06:50:08
>>643
6日かけてもロクにできなかったのに・・・ありがとうございます
ソース内容理解して説明できるよう頑張ります
645:デフォルトの名無しさん
08/03/16 11:29:30
>>594
取り合えず動く程度の簡易なもの(非VC++)。
ルールはググって上2つぐらいをざっと見ただけなんでもしかしたら間違ってるかも。
役に立つか分かりませんが参考程度にどうぞ。
URLリンク(kansai2channeler.hp.infoseek.co.jp)
646:594
08/03/16 15:41:04
>>645
本当にありがとうございます、助かりました。
参考にさせていただきます。
647:sage
08/03/16 18:04:32
[1] 授業単元:プログラミング
[2] 問題文 :入力した西暦が閏年かどうか出力せよ
閏年:4年に一度であり、100年に一度ではなく、400年に一度である
[3] 環境
[3.1] OS: windowsxp
[3.2] コンパイラ名とバージョン: VC 6.0
[3.3] 言語: C言語
[4] 期限: なるべく早く
よろしくお願いします
648:デフォルトの名無しさん
08/03/16 18:23:04
>>647
#include <stdio.h>
int is_leap_year(int year)
{
return (year%400==0) || ((year%100!=0)&&(year%4==0));
}
int main()
{
int year;
printf("西暦:");
scanf("%d", &year);
printf("%d年は%sです。\n", year, is_leap_year(year) ? "閏年" : "平年");
return 0;
}
649:デフォルトの名無しさん
08/03/16 18:27:02
>>647
>[4] 期限: なるべく早く
Cより先に、この変な言葉を直すよう日本語を学べ。
#include <stdio.h>
int main(void)
{
int d;
char* toshi[] = {"平", "閏"};
scanf("%d", &d);
printf("%s年\n",toshi[!(d&3)-!(d%100)+!(d%400)]);
return 0;
}
650:デフォルトの名無しさん
08/03/16 18:28:39
×char* toshi[]
○static const char * const toshi[]
651:636
08/03/16 18:57:42
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):英和辞書を作成せよ。
辞書データはプログラム開始時にファイル(ファイル名はdic.dat)より読み込みメモリ上にリスト構造を構築する。
以下これをリストという。
次の機能をメニューで選べるようにすること。(機能ごとに関数にしておく)
(1)検索:英単語(半角)を入力すると、リストより検索して日本語(全角)の意味を表示する。
(2)追加:新しい単語とその意味をキーボードより入力し、リストに追加する。
(3)修正:リストのデータを修正する。
(4)削除:リストより任意の単語を削除する。
(5)保存:リストをファイルに保存する。
(6)終了:プログラムの終了。もしデータが変更されているのに保存されていない時は、
保存せず終了して良いか確認する処理を行う。
[3] 環境
[3.1] OS:WindowsXP
[3.2] コンパイラ名とバージョン:Visual Studio 2005
[3.3] 言語:C
[4] 期限:3月中
[5] その他の制限:URLリンク(kansai2channeler.hp.infoseek.co.jp)
1~6の「」のに入っている処理の仕方がわかりません。
お願いします!
652:デフォルトの名無しさん
08/03/16 21:55:52
>>636
URLリンク(kansai2channeler.hp.infoseek.co.jp)
651より以前から作ったので適当に変えた箇所がある。
653:デフォルトの名無しさん
08/03/17 00:54:00
>>650
>>649のままで良いんじゃね?こんな所で質問するような奴が
staticだconstを使ったら変に思われちまう。
654:デフォルトの名無しさん
08/03/17 06:18:05
というか、そろそろうるう年の条件式を、効率の良いものにしない?
最初に y%4 == 0 で条件に合わないものはそれ以降は比較しないと。
それが通ったら y%100 != 0 || y%400 == 0 にすると。
655:デフォルトの名無しさん
08/03/17 08:53:34
>>654
A || B はAが真ならBは評価されない。
A && B はAが偽ならBは評価されない。
Bの位置に関数呼び出しを入れたりするとA次第で実行されない、というのはよくバグの原因になる。
656:デフォルトの名無しさん
08/03/17 08:53:55
[1] 授業単元:プログラミング
[2] 問題文 :英小文字をgetsで標準入力より配列テーブルへ入力する
入力されたデータの個数と共に配列の先頭アドレスを関数 英大文字変換に渡す
英大文字に変換されたデータをprintfで標準出力に出力する
ただし、入力するデータの個数は最大10個までとする
入力のときの表示は「str=」、出力のときの表示は「STR=XXX....X」とする
[3] 環境
[3.1] OS: windowsxp
[3.2] コンパイラ名とバージョン: VC 6.0
[3.3] 言語: C言語
[4] 期限: 今日のお昼頃
よろしくお願い致します
657:デフォルトの名無しさん
08/03/17 09:14:10
>>656
#include <stdio.h>
void capital_letter(char *str, int num);
int main(void)
{
char str[10];
printf("str=");
gets(str);
// fgets(str, sizeof(str), stdin); にしたいところ
capital_letter(str, sizeof(str));
printf("STR=%s",str);
return 0;
}
void capital_letter(char *str, int num)
{
int i;
for(i = 0; i < num; i++)
{
if('a' <= str[i] && 'z' >= str[i])
{
str[i] += 'A' - 'a';
}
}
}
658:デフォルトの名無しさん
08/03/17 09:15:36
>>655
だから何?閏年の条件式になんでそんな無意味な突込みを???
Bの位置に関数呼び出しをするような条件式じゃないからw
659:デフォルトの名無しさん
08/03/17 09:20:20
>>658
>>654が言うような最適化はすでにされてるって意味なんだが。
660:デフォルトの名無しさん
08/03/17 09:21:57
>>659
はぁ?ちゃんと読め。それから、数多く繰り返し実行をしてみろ。
明らかに4の倍数以外を400で割り切れるかまで条件判定しなくても済むから
処理時間に差が出ているんだが?
661:デフォルトの名無しさん
08/03/17 09:24:10
わかった、ではその速度差が出ると言うコードを提示してくれ。
662:デフォルトの名無しさん
08/03/17 09:27:20
int is_leap_year(int year)
{
return (year%400==0) || ((year%100!=0)&&(year%4==0));
}
int is_leap_year(int year)
{
if(year%400) return 1;
else if((year%100!=0)&&(year%4==0)) return 1;
else return 0;
}
663:デフォルトの名無しさん
08/03/17 09:28:19
>>661
いや、なんで自分で clock() を用いて検証しない?
何噛み付いてんの?理屈からして筋の通る理論に
無駄で間違った持論で噛み付かれても迷惑。
お前が理解していないとしか言いようがないんだが
664:デフォルトの名無しさん
08/03/17 09:31:14
>>662
いや、だから違うって、なんで先に400で割り切れる条件判定をするんだ?
それが400年に1度で、更に4で割り切れない年も判定するのが無駄だって話なんだが・・・
まず4で割り切れなきゃ、100で割り切れない、または、400で割り切れるという条件判定に
持ち込まないという条件について述べているんだが?
665:デフォルトの名無しさん
08/03/17 09:32:59
裏切り者の福留を許さない。
666:デフォルトの名無しさん
08/03/17 09:39:22
return (year%400==0) || ((year%100!=0)&&(year%4==0));
return (year%4==0 && (year%100!=0 || year%400==0));
667:デフォルトの名無しさん
08/03/17 09:44:42
ここであえて%100から試すのを提案する。
year % (year % 100 != 0 ? 4 : 400) == 0
668:デフォルトの名無しさん
08/03/17 09:52:23
URLリンク(kansai2channeler.hp.infoseek.co.jp)
回数を多くすれば、些細なことだが無駄に気づくだろう
669:デフォルトの名無しさん
08/03/17 10:02:13
>year%4==0 && (year%100!=0 || year%400==0)
測ってないけどこの形が最速じゃね。
670:661
08/03/17 10:16:09
>>663
なんで私にレスするのか理解に苦しむ。
噛み付くも何も、>660が阿呆なことを言うから論破しようと思っただけなんだが。
671:デフォルトの名無しさん
08/03/17 13:13:55
>>670
> 阿呆なこと
何が?そうやってアホとか相手を罵倒する発言、人間性を疑うよ。
言葉にはあんたの人間性がモロに露呈しているが、噛み付いているのが
あんただけって気づかない?そう、あんたが話題の本質を理解せずに
勘違いしているだけだろ。論より証拠。あんたもソースで示したら?
論点が食い違っていることが明白だから。
672:661
08/03/17 13:15:34
>>671
このスレは、>661と>670しか書いていないんですが。
それとも、勝手に他人の発言を拡大解釈したがる阿呆ですか?
673:656
08/03/17 13:17:10
>>657
ありがとうございます。助かりました
674:デフォルトの名無しさん
08/03/17 13:17:56
>>669
理屈としてはそれでおk。
675:デフォルトの名無しさん
08/03/17 13:19:19
>>672
あんたさすがに自分の勘違いを認めない上に、このスレに粘着しているのか。
未熟者がでしゃばると、お前みたいな墓穴を掘っても、更に何か言い訳をしたり
相手を否定して自分を押し切ろうとするから嫌われるんだよ。マジ、ソースを出せよ
gdgd言ってねーで。ごちゃごちゃとみっともないんだよ、言い訳するやつって。
676:661
08/03/17 13:21:16
>gdgd言ってねーで。ごちゃごちゃとみっともないんだよ、言い訳するやつって。
いや、自己紹介しなくてもw
677:デフォルトの名無しさん
08/03/17 13:21:50
>>655をもう一度読んでみな。いつ誰がBの位置に関数を呼び出す処理について
話を始めた?ここから勘違いを始めて、それについて必死に弁解する意味がないだろw
なのに、アホだの、なんだこの低俗な品のない奴は?まぁ、春休み中なんで、
どんな精神レベルの低い子供かは分かるが、こんなのがそのまま大人になったら面倒だな。
678:661
08/03/17 13:25:35
おーい、>655はどこに行った?
あんたのレスに粘着されてるぞ~w
まぁ、いきなり関数呼び出し云々を持ち出した>655も半端に知識をひけらかしたいだけに見えなくもないが。
言っていることは正しいだけに、場とタイミングを間違えたとしか言いようがないな。
恐らくは、安易に短絡構文を使ってデバッグに苦労した経験でもあったのだろう。
>>677
で、誰が何をどう勘違いして、どう弁解していると「あんたは」考えているのかな?
679:デフォルトの名無しさん
08/03/17 13:50:49
言ってることは正しくてもコミュニケーション能力が不足していたら伝わらない典型だな。
別に君が相手側を説得することにメリットがあるわけでも無し、そろそろ放っておいたらどうよ。
どっちにとは言わんけど。
680:デフォルトの名無しさん
08/03/17 13:51:37
議論なら他でやれカスども
681:デフォルトの名無しさん
08/03/17 14:02:30
>>668
> for(i=1; i<=MAX; i++) {
> for(y=1; y<=MAX_Y; y++) {
> if( y%4 != 0 ) leap=0;
> else if( y%100 != 0 || y%400 == 0 ) leap = 1;
> }
> }
潜在的バグがあるね
以下のようにすれば顕在化する
for(y=1; y<=MAX_Y; y++) {
↓
for(y=1; y<=MAX_Y; y++,leap=1) {
682:デフォルトの名無しさん
08/03/17 14:46:59
うるう年の判定なんて別に高速じゃなくてもいいじゃないか。
683:デフォルトの名無しさん
08/03/17 14:50:06
まぁ、事実上4年に一度で充分だしね。
# まさか、1900年や2100年を処理しなくてはいけないケースなんてそうそうないだろ。
684:デフォルトの名無しさん
08/03/17 14:53:45
問題になるほど何回も何回も判定を行うなら、0~3000くらいの判定表(0か1が入るintとかcharの配列)を作ってテーブル参照にするとか。
範囲外はいつものの方法でやるとして。
685:デフォルトの名無しさん
08/03/17 15:00:48
発想は悪くないけど、無駄だから。
686:デフォルトの名無しさん
08/03/17 16:23:50
はぁ・・・効率よく、無駄を省くという点が重要なのに、やれ自分にとって
必要あるないだの、何を基準に話を始めてんだ?
それが分かってないから、お前らはいつまで経っても
客観的な立場、意見が重要となる社会に出てまともに活動が出来ないんだよ。
路上じゃあんたらにとってそんなルールは必要ないとか都合が悪いとか言ってると
すぐに事故るぞ。自分が原因で。
687:デフォルトの名無しさん
08/03/17 16:28:44
まともに議論できる奴はこのスレにはいないな。
所詮は宿題スレか。
688:デフォルトの名無しさん
08/03/17 16:34:18
効率の基準が違うから~♪
スレ違いはしょうがない~♪
689:デフォルトの名無しさん
08/03/17 16:36:06
宿題スレに何を期待してたんだ…
690:デフォルトの名無しさん
08/03/17 17:24:37
>>668
かなり差が出るんだな。
正直、感動した。
>>681
もう少し詳しく
691:デフォルトの名無しさん
08/03/17 20:02:49
400の倍数に該当しない、100で割り切れたときの判定が不十分か。
たまたまその前年が平年でleapを平年の値で受け継いでいるが。
692:デフォルトの名無しさん
08/03/17 20:24:39
>>691
説明ありがとん。
つーか、自分の鈍さに絶望。
693:648
08/03/17 22:17:07
俺が最初に4で割り切れるかを判定しなかったばかりに、スレがこんなことに!w
694:デフォルトの名無しさん
08/03/18 00:19:46
[1] 授業単元:プログラミング
[2] 問題文 :5つの数字を標準入力より配列テーブルへ入力する。
配列の先頭アドレスと共に結果用の配列の先頭アドレスを関数 四則演算に渡す。
四則演算された結果をprintfで標準出力に出力する。
入力のときの表示は DATA = とする
出力のときの表示は X + Y = Z X - Y = Z X * Y = Z X / Y = Z とする
なお、加算はaの0と1番目、減算はaの0と2番目、乗算はaの0と3番目、
除算はaの0と4番目をそれぞれ行い、計算結果をpに入れる。
注)ポインタを使用すること。
リンク方法 cal(a,p);
入出力情報・「記号 a 型名 char *」「記号 p 型名 int *」
[3] 環境
[3.1] OS: windowsxp
[3.2] コンパイラ名とバージョン: VC 6.0
[3.3] 言語: C言語
[4] 期限: 今日の朝まで
よろしくおねがいします
695:デフォルトの名無しさん
08/03/18 00:33:20
>>694
#include <stdio.h>
void cal(char *a, int *p) {
p[0] = a[0]+a[1];
p[1] = a[0]-a[2];
p[2] = a[0]*a[3];
p[3] = a[0]/a[4];
}
int main() {
char a[5];
int p[4], i, tmp;
/* 入力 */
for(i=0; i<5; i++) {
printf("DATA=");
scanf("%d", &tmp);
a[i] = (char)tmp;
}
/* 計算 */
cal(a, p);
/* 出力 */
printf("%d+%d=%d %d-%d=%d %d*%d=%d %d/%d=%d\n",
(int)a[0], (int)a[1], p[0],
(int)a[0], (int)a[2], p[1],
(int)a[0], (int)a[3], p[2],
(int)a[0], (int)a[4], p[3]);
return 0;
}
696:デフォルトの名無しさん
08/03/18 06:33:18
久しぶりにアイツが来たのかと思ったじゃねーかw
697:デフォルトの名無しさん
08/03/18 07:03:53
>>654
過去スレでも似たような議論あったな。
int isLeapyear(int year)
{
return year%4 ? 0 : year % 100 ? 1 : year % 400 ? 0 : 1;
}
&&とか||使わないでこれで十分じゃね?
698:デフォルトの名無しさん
08/03/18 07:31:13
えっと、4で割り切れても100で割り切れた場合の対処が不十分だったという指摘があったが・・・
とにかく、4の倍数に当たらないものまで、100で割り切れるかどうか、400で割り切れるかどうか
といった判定にまで持ち込まなければ、その無駄がかなり省けるというのは
繰り返す回数を増やして目に見える処理時間の差を出したコードを参照して頂ければお分かりになられるかと。
699:694
08/03/18 07:43:30
>>695
ありがとうございます
700:デフォルトの名無しさん
08/03/18 08:47:13
まぁ、それほど大きなロスではないが、関数を呼び出して値を返す仕組みと、
main関数の中に条件判定を入れて処理するのとでは、自分の環境で計測したところ、
1.7倍の差が出た。mainの中で判定した場合で1秒だと、関数を呼び出した方は1.7秒。
701:デフォルトの名無しさん
08/03/18 09:05:24
まさかとは思うが、最適化しないで較べてないか?
702:デフォルトの名無しさん
08/03/18 13:59:46
最適化しちまったら同じになってしまうだろう
703:デフォルトの名無しさん
08/03/18 19:13:06
最適化して同じになるなら
コードが読みやすいほうが良いに決まってるだろ。
実用時は最適化するんだから。
704:名無しです
08/03/19 22:00:09
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
・リスト構造の実現
1,グラフデータを記憶する隣接リストの作成,
2,深さ優先探索に必要なスタック,
3,幅優先探索に必要なキューの作成に必須なデータ構造です.
4,ポインタを用いて動的に確保するかの選択が必要です.
5,また,データへのアクセス効率を考えて,両方向環状リストとして構築する
・上記リスト構造を用いて,スタックおよびキューの実現
もっとも大雑把に書くと,
スタックを使ったグラフの深さ優先探索,キューを使ったグラフの幅優先探索,グラフの連結成分分解の実装.
ファイル(複数のグラフデータが列記されている)からグラフを1つずつ読み込み,プログラム上で扱い
やすいデータ構造上にグラフデータを反映させ,その上で探索してもらうという構成になっています.
グラフは無向グラフです
[3] 環境
[3.1] OS: Windows XP
[3.2] コンパイラ名とバージョン:visual studio 2003
[3.3] 言語: C言語
[4] 期限: 20008年3月20日20:00まで
[5] その他の制限: C言語初心者なのでなるべく簡単にしてくれるとありがたいです.
リンクの張り方がわからず、問題文が長くなりお手数をかけて申し訳ありません。
どうぞよろしくお願いします。
705:デフォルトの名無しさん
08/03/20 06:51:42
>>704
4.が意味不明。
ポインタを使わなければ任意で複数のエッジの表現はできない。
706:名無しです
08/03/20 09:40:57
4について、領域を(配列を用いて)静的に確保するか,ポインタを用いて動的に確保するかの選択が必要です.
「静的」と「動的」とは,例えば配列 a[10]のように格納する領域が指定されているのを静的といい,
動的というのは問題によりその格納する領域が変化すると、説明されました
文章が稚拙でわかりにくいところが多々あるかもしれませんが、よろしくお願いします
707:デフォルトの名無しさん
08/03/20 11:43:20
>>706
リストは動的に領域を確保しないと意味ないぞ。
目的が単にスタック、キューの実現なら、配列を使って実装できるけど、
リストを使うことが課題で決められているなら、動的に確保するしかない。
708:デフォルトの名無しさん
08/03/20 11:52:50
多分リスト構造で表現するのと
ノード数Xノード数の2次元配列を使う表現の2種類を区別しろというこではなかろうか?
709:名無しです
08/03/20 11:55:02
なるほど。課題でリストを使うようにと言われているので動的に確保したいです。
後出しになってしまってすいません。ご教授お願いします
710:デフォルトの名無しさん
08/03/20 12:06:38
あとファイルのフォーマットがわからないと
後出しでファイルの入出力の仕様追加が発生すると困りそうだな。
711:デフォルトの名無しさん
08/03/20 12:08:32
>>708
なんか俺もそう思うんだが、
>>704の1にはグラフデータを記憶する隣接リストの作成って書いてあるんだよな。
なんか余計分からなくなってきた…orz
712:デフォルトの名無しさん
08/03/20 12:15:52
>>709
もう少し詳しい課題の内容が分からないと教えられないかも
713:デフォルトの名無しさん
08/03/20 12:22:42
実は元教官の俺が言うのもなんだが、
ワザと曖昧な出題をして学生がちゃんと仕様を確定する的確な質問をするか。
頓珍漢な答えを提出するか。
曖昧さの中から考えられるすべてのケースを想定して複数回答を提出するか
というのを試したことがある。
714:デフォルトの名無しさん
08/03/20 12:32:57
>>713
>>704が出された正確な課題で、わざと曖昧な課題にしてあるのなら
いくらでも作りようがあるけど、なんか単に課題が書ききれてないだけのような気が…。
715:デフォルトの名無しさん
08/03/20 13:17:43
このスレのことをよく知っていて、わざと曖昧に出題してるとか…
716:デフォルトの名無しさん
08/03/20 13:23:05
ちなみに713がどんな問題を出したのか気になる
717:名無しです
08/03/20 13:47:10
たぶん>>708だと思います。
ファイルの入出力の仕様というのはfopenとかのことでしょうか?
「リスト構造」を基に「スタック」,「キュー」,およびグラフのデータ構造(隣接リスト等)を実現し,
アルゴリズムに従い,グラフ上を探索し,得られた探索木を出力してもらうプログラムの作成と課題には
書いてあるのですが、これじゃ情報不足でしょうか?
至らぬ文章力ですいません orz
718:デフォルトの名無しさん
08/03/20 14:04:39
どこかに書いてあるなら、書いてあることすべて写して書き込めばいいのに
量が多いなら>>1のうpろだを使うとかして。
719:名無しです
08/03/20 19:55:13
ファイル URLリンク(kansai2channeler.hp.infoseek.co.jp)
読み込むデータはこれを渡されました。
720:名無しです
08/03/20 22:46:18
期限で3月20日20:00と書きましたが解けるまでやらなきゃいけないので
ぜひご指導お願いします 何度も書き込んですいません orz
721:デフォルトの名無しさん
08/03/20 23:26:25
>>720
で、グラフの探索とのことですが、何を探索すればいいのでしょうか?
1: 2 3 4 5 10
とかあるのは、「ノード1 と隣接するのは、ノード2, 3, 4, 5, 10 である。」という意味でしょうか?
そして、互いに一番遠い距離にあるノードの組を求めればいいのでしょうか?
何か情報をくださらないと、これだけでは私は解けないのです。
722:名無しです
08/03/21 07:52:46
1: 2 3 4 5 10とあるのは、「ノード1 と隣接するのは、ノード2, 3, 4, 5, 10 である。」
という意味です。
ファイル URLリンク(kansai2channeler.hp.infoseek.co.jp)
深さ優先探索を途中までやって間違っているやつを知り合いにもらいました。これを
書き直してわかりやすようにしてはもらえないでしょうか? お願いします
723:デフォルトの名無しさん
08/03/21 10:21:30
>>704
URLリンク(kansai2channeler.hp.infoseek.co.jp)
ごり押しで作ってたら、かなり汚いソースになってしまった
初心者には難しいと思うから、ほとんど参考にはならないと思うけど
だれもうpしてないので上げてきます
724:デフォルトの名無しさん
08/03/21 12:48:03
スレチなのを承知でお願いします。気に触ったら無視して下さい。
[1] 授業単元:C#の個人課題
[2] 問題文(含コード&リンク):VC#(VS2008C#)にてwindowsフォームアプリケーションにて
WEBカメラ(USB)をプレビューするプログラムを書け。
[3] 環境
[3.1] OS: (WindowsXP)
[3.2] コンパイラ名とバージョン:VC#2005or2008
[3.3] 言語: (C#)
[4] 期限: [無期限]
C#だけどやってもいいか。という方いらっしゃいましたらお願いします。
725:デフォルトの名無しさん
08/03/21 16:05:35
内容が変じゃないか?ここ作成依頼スレじゃないぞ
ぶっちゃけ知りたいこと課題に偽装しただけにしかみえない
726:名無しです
08/03/21 22:17:45
>>704作って頂きありがとうございます。
ですがすいませんわからないです orz
>>722のやつを作り変えて簡単なプログラムを作れないでしょうか?
何度もお願いして悪いと思うのですがお願いします。
727:デフォルトの名無しさん
08/03/22 13:16:37
未だに>>704の問題文が意味わからんのは俺だけ?
「ノード1 と隣接するのは、ノード2, 3, 4, 5, 10 である。」
これだけ求めたいのなら、ファイルから読み込んだデータを線形リストに格納して
ノード番号の位置のデータを参照するだけで済むだろう。
スタック、キューなんて使う必要ないし使いどころがないよな。
>>721のいうように互いに一番遠い距離にあるノードの組を求めるとか、そんな問題ならわかるが。
728:デフォルトの名無しさん
08/03/22 13:37:49
URLリンク(www.na.cse.nagoya-u.ac.jp)
URLリンク(tnt.math.metro-u.ac.jp)
URLリンク(tnt.math.metro-u.ac.jp)
729:デフォルトの名無しさん
08/03/22 13:43:50
>>727
> 未だに>>704の問題文が意味わからんのは俺だけ?
本人も含めて誰もわかっていないのでは?
>>704からは、実装方法に関する制限は読み取れるが、
結局どういう問題を解きたいのかが示されていない。
730:デフォルトの名無しさん
08/03/22 13:48:19
とりあえず混乱しすぎだぞ。おまいら。
・隣接リスト != リンクリスト, 連結リスト etc.
・動的確保しない連結リスト表現
struct Node { int num; int next; } nodes[20]; とでもして next は次のノードを指す添え字番号を指す。
例えば次の要素アクセスするなら nodes[nodes[i].next]。無効値は -1 とか。
C 使いなら普通ポインタ使うんでこんなことしないだろうが、アルゴリズムやデータ構造の教科書的にはたまにある表現だと思う。
・「ノード1 と隣接するのは、ノード2, 3, 4, 5, 10 である。」はファイルフォーマットの説明。
・「スタック、キューなんて使う必要ないし使いどころがないよな。」→幅優先探索と深さ優先探索で使うって書いてあるじゃん。
・(とりあえずの)探索内容→グラフ上を探索し,得られた探索木を出力
つまり単純に辿るだけ。出力フォーマットはしらんが、とりあえずどういう風に探索したかを出力できればいいんだろ。
木というからにはちゃんと親子が分かるようにするべきっぽく、>722 もそんな感じだ。
・グラフの連結成分分解って書いてあるからここは深さ優先を使うことになるはず。
731:デフォルトの名無しさん
08/03/22 13:52:04
まとめるとこういうことだろう。
・両方向環状リストの実装
・上記を用いた、スタック、キュー、隣接リストの実装
・上記を用いた、深さ優先探索、幅優先探索アルゴリズムの実装(出力は探索木)
・上記を用いた、グラフの連結成分分解の実装
これ、何回かに分けて出された課題をまとめてやろうとしてるんじゃないの?
732:名無しです
08/03/22 15:01:51
説明が下手でみなさんを混乱させてしまって本当に申し訳ありません。
>>731さんがまとめてることをしたいんです。こんなにわかりにくい説明で
理解してくださってありがとうございます。
733:名無しです
08/03/22 19:43:43
>>731さんのを基にもう一度作ってもらうわけにはいかないでしょうか?
私が最初から>>731さんのように書けば良かったのですが、説明が下手なのと
理解力がないばかりに orz
734:デフォルトの名無しさん
08/03/22 23:56:13
>>733
双方向リングリストの実装のみ
URLリンク(kansai2channeler.hp.infoseek.co.jp)
735:733
08/03/23 00:03:31
>>734
リングリストなのに double ended はねーよ orz
736:デフォルトの名無しさん
08/03/23 00:17:48
double circular linked list が正しい英語
737:733
08/03/23 00:21:49
>>734 はバグってた
URLリンク(kansai2channeler.hp.infoseek.co.jp)
訂正内容
次の行を追加
list->next->prev=ret;
738:デフォルトの名無しさん
08/03/23 06:55:06
>>733
>>737 を元にスタック実装して、グラフの連結成分分解を作ってみた
連結成分について考え方が間違ってたらすまん
できるかぎり簡単にしたつもり
URLリンク(kansai2channeler.hp.infoseek.co.jp)
739:デフォルトの名無しさん
08/03/23 10:14:59
[1] 授業単元:プログラミング
[2] 問題文:
問1)次のコードの実行結果を答えなさい。
byte a = 3;
System.out.println(a = 2);
問2)次のコードの実行結果を答えなさい。
short a = 3;
System.out.println(a == 2);
問3)次のコードの実行結果を答えなさい。
int a = 0;
if (a == 1)
System.out.print("aの値:");
System.out.println(a);
System.out.println("終了");
[3] 環境
[4] 期限:[無期限]
[5] その他の制限: なし
レベルが違うような質問で申し訳ありません・・。
スレ違いでしたらスルーでお願いします。
740:デフォルトの名無しさん
08/03/23 10:19:48
Javaの宿題スレにゴー
741:デフォルトの名無しさん
08/03/23 10:34:10
>>740
ご親切にありがとうございました。
742:デフォルトの名無しさん
08/03/23 17:05:36
なんだか和んだぞ。
743:デフォルトの名無しさん
08/03/23 19:59:02
ナゴナゴ
744:名無しです
08/03/23 22:19:32
みなさん>>704を解いて頂きありがとうございました。
745:デフォルトの名無しさん
08/03/24 00:22:15
>>738
あぁ・・・ミスった
memset(adj, 0, sizeof(adj)*NODENUM*NODENUM); を
memset(adj, 0, sizeof(int)*NODENUM*NODENUM); に変えてね・・・
746:デフォルトの名無しさん
08/03/24 04:54:50
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
[3.1] OS:windowsXP
[3.2] コンパイラ名とバージョン: visual studio 2005
[3.3] 言語:C言語
[4] 期限:2008年3月24日午前11時(できれば午前中で・・
急なお願いですがよろしくお願いします。
[5] その他の制限:なし
747:デフォルトの名無しさん
08/03/24 06:15:00
教官からどう指示されたのか不明だが、
フローチャートは矢印で繋ぐだけじゃ不十分だよ。
748:746
08/03/24 08:06:46
矢印だけではダメなのはわかっています、確かに不十分ですよね
それ以外は自分でんはんとかしようと思っているので・・・
ここではそれしか表現できなくて
749:デフォルトの名無しさん
08/03/24 09:55:10
丸投げするか自分で全部やるかどっちかにしろよこんな簡単なもの。
この程度の物は矢印をまともに全部書いたらほとんどそれで答えじゃねーか。
750:746
08/03/24 10:37:09
その程度すら分からないんです、スイマセン・・、丸投げでおねがいします。
751:デフォルトの名無しさん
08/03/24 10:55:48
もう時間ないが、処理の流れはわかっているようだから
ソースにくどいほどコメント書いて、それを適切な四角で括って
矢印で繋げばいいんじゃねーの。
752:デフォルトの名無しさん
08/03/24 12:35:40
○開始
↓
◇センスの有無
↓あり ↓なし
□合格処理□不合格処理
↓←──┘
○終了
753:デフォルトの名無しさん
08/03/24 13:24:28
[1] 授業単元:プログラミング
[2] 問題文:URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
[3.1] OS:WindowsXP
[3.2] コンパイラ名とバージョン:visual studio 2003
[3.3] 言語:C
[4] 期限:3/27
よろしくお願いします。
754:デフォルトの名無しさん
08/03/24 13:31:41
>>753
超初心者の宿題だろう 自分で出来ないのかよ
755:デフォルトの名無しさん
08/03/24 13:32:42
>>753
strcatとstrlen使っちゃ駄目ってのは面倒だね。
(1)
#include<string.h>
int mystrlen(char*p){
return strchr(p,0)-p;
}
(2)
#include<string.h>
int mystrcatlen(char*a,char*b){
return strchr(strcpy(strchr(a,0),b),0)-a;
}
756:デフォルトの名無しさん
08/03/24 13:34:34
>>754
なんだと!テメこのやろー
ここがどこだか分かってるのか?
戦闘アドレス なめんなよ
757:デフォルトの名無しさん
08/03/24 13:38:50
ああ、main部分も書くのか。じゃあこれを>>755の関数定義の下に付けといて。
(1)
#include<stdio.h>
int main(){
char p[100];
printf("文字列を入力してください -> ");
scanf("%99s",p);
printf("'%s'の長さは%dです\n",p,mystrlen(p));
}
(2)
#include<stdio.h>
int main(){
char p[100],q[100];
printf("文字列を入力してください -> ");
scanf("%99s",p);
printf("文字列を入力してください -> ");
scanf("%99s",q);
printf("'%s'と'%s'を繋げると",p,q);
printf("'%s'になり、長さは%dです\n",p,mystrcatlen(p,q));
}
758:デフォルトの名無しさん
08/03/24 14:15:04
>>757
助かりました。
ありがとうございます。
759:名無しです
08/03/24 17:44:14
>>704なんですが>>738で解いてもらったやつでプログラムの動作チェックを行ったら,
コンパイルすると「int main(int argc, char **argv){ /*argv main関数に引数を渡す*/」
でエラーが出てしまいます.
エラー表示は「'0x40'は認識できません」と「'0x81'は認識できません」の2つが出てしまいます.
後,幅優先探索と連結成分分解のプログラムは>>738には入ってないんでしょうか?
何度もレスしてすいません.どうかお力を貸してください.
760:デフォルトの名無しさん
08/03/24 17:46:39
コメント以外のところに全角スペースがあるんだろ
761:デフォルトの名無しさん
08/03/24 21:21:20
>>759
幅優先探索は入ってない
連結成分分解ってのが、つながってる点をまとめて表示することでないなら、
俺の連結成分の考えかたが間違ってる
762:デフォルトの名無しさん
08/03/25 00:00:16
>>759
連結成分分解は、>>738で問題ない?
問題ないなら、幅優先探索での連結成分分解も作るけど
(キューの実装できれば深さ優先探索とほとんど処理変わらないから、
必要ないかもしれないけど)
763:デフォルトの名無しさん
08/03/25 02:17:34
ちょっと面白い問題考えたから、みんなで解いてみてくれ。
Python で作ったプログラムで N < 10 までは試したけど、
発展問題についてはまだやってない。
基本問題:
例えば N = 8 としたときに
「この文章には0が1個、1が5個、2が3個、3が2個、
4が1個、5が2個、6が1個、7が1個含まれています」
という文章が生成されるとして、9以下の任意の自然数Nについて
もこのような文章を生成するプログラムを作れ。
解がない場合は「解なし」とする。
発展問題:
Nが10以上の時、解はあるだろうか?
764:デフォルトの名無しさん
08/03/25 02:30:37
0から順に数えていき、値が更新されたら追加していけばいつか出来ると思うが
765:デフォルトの名無しさん
08/03/25 02:46:44
基本問題がわからない
766:デフォルトの名無しさん
08/03/25 02:50:48
>>765
文書中に現れる文字をカウントして正しい文書にする
767:デフォルトの名無しさん
08/03/25 02:54:58
もし解があることがわかれば総当たりでやればいつか解けるので
いつでもとけるのかどうかを考えればよい
768:デフォルトの名無しさん
08/03/25 02:55:46
>>765
正しい自己言及文を生成する問題。
「」の中の数字の数と文章の内容を確認すれ。
769:デフォルトの名無しさん
08/03/25 03:04:03
0、1、・・・N-1と並べて、
0の個数をカウントしてそれを記録
次に1の個数をカウントして記録 もしその個数に0が現れれば0を更新
それにも1が現れれば1の個数を更新
・・・・
無限に値が更新される事はなく次へ進めるとは思う
たとえば0が現れるのは桁上がりが現れるときだから(何度か更新を繰り返したとすると)
一度に0がいくつも増えなくては行けなくなりいつか停止すると思う
770:デフォルトの名無しさん
08/03/25 03:07:45
解ありをちゃんと説明してくれれば後は簡単なんだ だれか頼む
771:デフォルトの名無しさん
08/03/25 03:14:53
「1が1個」
↓
(あ、1の数が変わった。更新しよう)
↓
「1 が 2 個」
↓
(あ、1の数が1個にもどった。更新しよう)
↓
無限ループ。
772:デフォルトの名無しさん
08/03/25 03:17:33
解無しも有るのか・・・
773:デフォルトの名無しさん
08/03/25 03:25:48
nがn個ってなったら駄目なんだな
そうなる所はカウントを保留しておき個数が変化するのを待ってカウントするか
簡単にはできそうにないね
巡回セールスマンと同じ種類では?
774:871
08/03/25 03:27:12
(さっき Python スレで突っ込まれた)
ちなみに、Nの意味はN以上の数が出てこないって解釈で。すると
N=1 のときは解なし。
N=2 も解なし。
N=3 も解なし。
N=4 では
「0が1個、1が3個、2が1個、3が3個」
「0が1個、1が2個、2が3個、3が2個」
N=10 ってのは「"10"という部分文字列の数」という解釈にしようと思う。
775:デフォルトの名無しさん
08/03/25 03:29:53
N=1は解あるだろ
0が1個じゃないの?
間違えている?
776:デフォルトの名無しさん
08/03/25 03:31:13
N=2 0が1個、1が2個では? どこか間違えている?
777:デフォルトの名無しさん
08/03/25 03:31:36
N以上が現出するとダメらしい。
778:871
08/03/25 03:34:29
「0が1個」
だと、0については言えてるけど、
1について言及が無いので美しくない(俺的に)
できれば文章中に出てくる全ての数字について言及させたい。
だから <N 以上の数を使わない>てルールをつけたんだ。
779:デフォルトの名無しさん
08/03/25 03:34:50
そしたら総当たりの有限時間では解判定は出来るんだな
その制限を外した場合は>>771のような無限ループは発生するのだろうか?
780:デフォルトの名無しさん
08/03/25 03:44:13
N以上が現れない場合でも、簡単には求められないよな
試行錯誤か、全パターンを生成して文書チェックするかくらいで
いずれにしても時間がかかる
例えばN=1000を一日以内に解くプログラムとかは作れないんじゃないか?
781:デフォルトの名無しさん
08/03/25 04:38:11
0が1個、1が12個、2が3個、3が2個、4が1個、5が1個、6が1個、7が1個、8が1個、
9が1個、10が1個、11が1個、12が2個、13が1個、14が1個。
782:デフォルトの名無しさん
08/03/25 04:57:56
>>781
その文章中の0は2個ありそうだ。
例えば11という数字があった場合、1として2個で11として1個と数えるのか、
それとも11という塊になっている場合は1としてはカウントしないのか。
783:デフォルトの名無しさん
08/03/25 04:59:50
111は、1が3つ、11が2つ、111が1つ
ですよね
784:デフォルトの名無しさん
08/03/25 05:01:08
こういう問題の場合数えないのが普通だと思うけど。
785:デフォルトの名無しさん
08/03/25 05:04:00
異なるものがいくつあるのか正しく求めるのが正解のはずだ
783が正解
786:デフォルトの名無しさん
08/03/25 05:14:04
数値の組み合わせ(順序数, 順序数と個数自身を含めた個数)について無矛盾にする問題とみなすか、
文章から得られる全ての部分文字列の集合内の数値に相当する要素の個数について無矛盾にする問題とみなすか。
787:デフォルトの名無しさん
08/03/25 05:18:23
これはやる意味ないと思っている
巡回セールスマンと同じく多項式時間では解けないというやつと思う
プログラム作るだけ時間の無駄と思っている
788:デフォルトの名無しさん
08/03/25 11:22:49
0が2 1が8 2が3 3が3
4が1 5が1 6が1 7が1
8が2 9が1 10が1
789:デフォルトの名無しさん
08/03/25 11:25:04
一般Nで解けるソースはりつけてよ
790:デフォルトの名無しさん
08/03/25 11:53:54
const int N = <整数>
std::string S[N];
int count(int num){
int sum=0;
std::string substr = <num の文字列表現>
for(int i=0; i<N; ++i) {
std::string i2s = i の文字列表現
sum += <文字列 i2s に含まれる substr の数>
sum += <文字列 S[i] に含まれる substr の数>;
}
return sum;
}
int check(){
for (int i=0; i<N; ++i) { if (count(i) != <文字列S[i]の整数表現>) return; }
printf("----\n");
for (int i=0; i<N; ++i) printf("%d が %s\n", i, S[i]);
}
void find(int depth) {
if (depth < 0) {
check(); return;
}
for (int i=0; i<N; ++i) { S[depth] = <i の文字列表現>; find(depth-1);
}
void main() { find(N-1); }
791:名無しです
08/03/25 12:20:30
流れを切って申し訳ありません
>>704の問題ですが
>>738さんのでやると連結成分分解のプログラムの動作を確認できるんですけど,ずっと同じ出力結果なんです。
出力結果の数字が何を指しているのかわからないのでどのような意味なのか教えてもらえないでしょうか?
幅優先探索での連結成分分解もよくわからないので作っていただけないでしょうか?
よろしくお願いします
792:デフォルトの名無しさん
08/03/25 13:42:01
>>789
間違ってるかもしれないし、厳密解でもない
URLリンク(kansai2channeler.hp.infoseek.co.jp)
793:デフォルトの名無しさん
08/03/25 15:38:35
763って個数の合計はN*2に決まってるんだから
対数時間で計算出来そうにみえるけど
ナップザック系とは関係なくないか
794:デフォルトの名無しさん
08/03/25 16:26:33
>>763
面白いな
795:デフォルトの名無しさん
08/03/25 20:59:56
コード貼るならここがいいよ
URLリンク(codepad.org)
実行結果までやってくれる
796:デフォルトの名無しさん
08/03/25 21:48:06
[1] 授業単元:プログラミング言語
[2] 問題文(含コード&リンク):
URLリンク(kansai2channeler.hp.infoseek.co.jp)
URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
[3.1] OS: (Windows/Linux/等々)
[3.2] コンパイラ名とバージョン:gcc 3.4 VC 6.0
[3.3] 言語: (C/C++/どちらでも可 のいずれか)
[4] 期限:明日の夜まで
[5] その他の制限:ほとんど素人が手をつけ始めたくらいの知識しかないです。だから難しいことはしてないかも。
何問か課題を出されたのですがどうしてもこの2つが分かりません。よろしくお願いします。
797:796
08/03/25 21:49:55
申し訳ありません。OSと言語のこと忘れてました。
OSはwindowsで言語はC言語です。
798:デフォルトの名無しさん
08/03/25 21:55:15
>>796
一問だけ解いてみた
#include <stdio.h>
int main(void){
int i, j;
for(i=0;i<26;i++){
for(j=0;j<=i;j++) putchar('A'+i);
for(;j<=26;j++) putchar('Z'-i);
putchar('\n');
}
return 0;
}
799:デフォルトの名無しさん
08/03/25 22:01:47
>>763
やってみたけど問題としてはツマンナイ答えしかでないっぽいよ。
いいアルゴリズム探す気力なくなったの途中でやめました..
URLリンク(kansai2channeler.hp.infoseek.co.jp)
800:デフォルトの名無しさん
08/03/25 22:08:22
>>799
対応しているのは N=10 まで?
801:799
08/03/25 22:10:25
10行目まちがえた。適当でごめん
× if( c[ a[ i ] ] != 1 )
○ if( c[ i ] != 1 )
802:デフォルトの名無しさん
08/03/25 22:13:38
800
N=19ぐらいまで。それ以上でも正解は同じパターン一個っぽい。
(のでそれ以上追求するのやめました。)
803:796
08/03/25 22:16:38
>>798
ありがとうございます。putchar使えば良かったのですね。
804:デフォルトの名無しさん
08/03/25 22:18:17
>>802
N=11 のときに 0 と 1 の個数が違うんだが…
805:デフォルトの名無しさん
08/03/25 22:28:36
>>796
下の奴適当にやってみた
曜日を調べるのは「C言語 曜日」でぐぐって一番上の奴使った
URLリンク(kansai2channeler.hp.infoseek.co.jp)
806:デフォルトの名無しさん
08/03/25 23:14:47
>>800のやつを貼付けてみた。
URLリンク(codepad.org)
807:デフォルトの名無しさん
08/03/25 23:32:13
>>791
全部のグラフで同じ出力結果になるってこと?
出力結果はただ単に、到達可能な点をまとめて{ }で囲んで表示してるだけ
出力結果が何を指しているのか分からないってことは、
>>738のプログラムがあってないってことなんで、幅優先探索は作れない
808:デフォルトの名無しさん
08/03/26 10:24:33
>>796
1番目の問題の表示例は
AZZZZZZZZZZZZZZZZZZZZZZZZZZ
BBYYYYYYYYYYYYYYYYYYYYYYYYY
CCCXXXXXXXXXXXXXXXXXXXXXXXX
の間違いか?
AZZZZZZZZZZZZZZZZZZZZZZZZZZZ
BBYYYYYYYYYYYYYYYYYYYYYYYYYY
CCCXXXXXXXXXXXXXXXXXXXXXXXXX
だと26行目は
ZZZZZZZZZZZZZZZZZZZZZZZZZZAA
になってしまうぞ。
809:デフォルトの名無しさん
08/03/26 20:37:58
[1] 授業単元: プログラミング演習
[2] 問題文:5人のテストの点数をキーボードから入力し、合計と平均を表せ。
[3] 環境
[3.1] OS: Windows・Linux/
[3.2] コンパイラ名とバージョン:
[3.3] 言語: C
[4] 期限: 明日まで
初期的な問題ですがお願いします。
810:デフォルトの名無しさん
08/03/26 20:55:18
>>809
#include<stdio.h>
int main() {
int i, test[5], sum = 0;
for (i=0; i<5; i++) {
printf("%d人目の点数を入力してください:", i+1);
scanf("%d", &test[i]);
sum += test[i];
}
printf("合計:%d 平均:%f\n", sum, (double)sum / 5);
}
811:デフォルトの名無しさん
08/03/26 23:19:00
test+iでええやん。
812:デフォルトの名無しさん
08/03/26 23:25:25
>>811
君は一年後自分のレスを思い出してこう言うだろう
「認めたくないものだな、自分自身の若さ故の過ちと言うものを。」
813:812
08/03/26 23:27:41
おれは今自分自身の過ちを後悔している
コピペ元が間違ってた orz
「認めたくないものだな。自分自身の、若さ故の過ちというものを。」
814:デフォルトの名無しさん
08/03/26 23:55:53
ガノタ乙
と言って欲しいんだろ?
815:デフォルトの名無しさん
08/03/27 00:01:02
>>812-813
なんだこいつ・・・
816:デフォルトの名無しさん
08/03/27 00:07:28
それより>>811の解説してくれ
817:812
08/03/27 00:18:13
>>816
シンタックスシュガーを知ったばかりなので使いたがっている状態
818:デフォルトの名無しさん
08/03/27 01:08:39
糖衣構文でええやん。
819:デフォルトの名無しさん
08/03/27 02:17:54
ところで、
>>44
> /* 文字列の長さ */
> for(str_length=0; str[str_length]; str_length++) {}
ではなく
str_length = sizeof (str) - 1;
だと思うが。
820:デフォルトの名無しさん
08/03/27 02:20:36
>>811
そもそもtest[5]はscoreでええがな
821:デフォルトの名無しさん
08/03/27 02:30:33
>>819
わざわざ「文字列の長さ」と書いてあるんだから配列の大きさを基準にしちゃダメじゃないか?
822:デフォルトの名無しさん
08/03/27 09:03:35
>>817
こいつもしかして、test[i]こそがシンタックスシュガーだということを知らないのでは・・・
823:デフォルトの名無しさん
08/03/27 10:49:45
>>816
test[i]は*(test+i)のシンタックスシュガー
&test[i]は&*(test+i)のシンタックスシュガー
&*ってムダじゃね?ってことだろ。
824:デフォルトの名無しさん
08/03/28 14:09:52
糖衣だろうがなんだろうが &test[i] なんて書き方はしねーよ
825:デフォルトの名無しさん
08/03/28 14:17:26
それが、&test[i]の方が多数派だったりするんだよw
826:デフォルトの名無しさん
08/03/28 14:29:03
確かに&test[i]って記述はよく見かけるね
俺は個人的に好かない書き方だ
Cの配列とアドレッシングとの関連がわかってないのかな
827:デフォルトの名無しさん
08/03/28 15:00:27
俺はCだと基本どうでもいい。所詮、構文糖。
が、C++だと&a[i]とa+iの意味が違う事がある。(std::vector等)。
STL等のランダムアクセス可能なコンテナだと&a[i]は使えるけどa+iは使えない。
そうなるとCを使うときもC++の流儀に合わせて&a[i]と書きたくなる。
828:デフォルトの名無しさん
08/03/28 15:21:10
vectorで&a[i]なんて何に使うんだ?
829:デフォルトの名無しさん
08/03/28 15:45:00
char*を要求する関数を呼び出すときとか
830:デフォルトの名無しさん
08/03/28 15:55:40
char*ならstd::string使えよ・・・
831:デフォルトの名無しさん
08/03/28 16:00:56
非constのchar*が必要なとき
832:デフォルトの名無しさん
08/03/28 16:48:17
&を見れば定義をみないでもアドレスであることがわかる
ソース中の[をみれば配列にアクセスしている箇所を
testをキーワードにして検索したりしないでもすぐ探せる
保守しやすくなるからワザとやってるんじゃないの
833:デフォルトの名無しさん
08/03/28 16:52:58
>>826
Cの配列とアドレッシングとの関連がわかっていることと
&test[i]と書くことは全く別問題。
834:デフォルトの名無しさん
08/03/28 22:46:33
&test[ i ] 配列testのi番目の要素のアドレス
test + i ポインタtestからi * nずらしたアドレス
って感じだから前者の方がしっくりくるって人が多数派ににるんじゃない?
835:デフォルトの名無しさん
08/03/28 23:52:10
&test[i]って書き方はあまりしないけど、&test[0]って書き方なら結構するな
testだけだとパッと見わかりにくいし。
836:デフォルトの名無しさん
08/03/29 04:23:24
>>835
char buf[1024];
int size = sizeof(&buf[0]);
って書くってこと?
837:デフォルトの名無しさん
08/03/29 04:35:51
オッス、オラC言語歴10年、もっとオラがwktkするような宿題を依頼してくれYO!
838:デフォルトの名無しさん
08/03/29 04:42:23
>>836
何をしたいのか理解できない
839:デフォルトの名無しさん
08/03/29 14:17:42
整数を入力してください:25
1234567890123456789012345
こんな感じで1234567890123…を読み込まれた整数の個数だけ繰り返し表示するプログラムを作成する問題なのですが
誰か教えて頂けないでしょうか?
840:デフォルトの名無しさん
08/03/29 14:27:22
[1] 授業単元:
[2] 問題文(含コード&リンク):>>839
[3] 環境
[3.1] OS:Windows xp
[3.2] コンパイラ名とバージョン:BCC Developer 1.2.21
[3.3] 言語:C
[4] 期限:[無期限]
[5] その他の制限:独学ゆえに聞ける人が居なくて困ってます
841:デフォルトの名無しさん
08/03/29 14:29:21
printf("%u", n%10);
あとは頑張れ。
842:デフォルトの名無しさん
08/03/29 14:30:16
>>839
#include <stdio.h>
int main()
{
int n, i;
printf( "整数を入力してください:" );
scanf( "%d", &n );
for(i=1; i<=n; i++) putchar( '0'+i%10 );
return 0;
}
843:デフォルトの名無しさん
08/03/29 14:30:26
独力で学習することが独学。
聞ける人がいないのは孤独。
844:デフォルトの名無しさん
08/03/29 14:31:01
>>841
勉強用に捻くれたコードにしてみた。
#include<stdio.h>
int main(void){
int n;
printf("整数を入力してください:");
for(scanf("%d",&n);n>0;n-=10)
printf("%.*s",n,"1234567890");
return 0;
}
845:844
08/03/29 14:31:36
おっとアンカミス
s/841/840
846:デフォルトの名無しさん
08/03/29 14:42:21
ありがとうございます!
上京したてで友達がいない中、予習してまして…
847:デフォルトの名無しさん
08/03/29 14:50:16
勉強用に、の意味がわからない
848:デフォルトの名無しさん
08/03/29 16:14:46
勉強用に捻くれたコードを提示すると、捻くれた知識が身に付くだけだぞ。
849:デフォルトの名無しさん
08/03/29 17:55:02
と、捻くれた人が言ってます
850:デフォルトの名無しさん
08/03/29 18:43:08
>>840 と >>844 は師匠と弟子か?
もしそうならスレ立てしてそっちでやれよ
ついでに俺は前置きで
> こんなの書いても現段階だと悪影響にしかならん気はするぞ
って書いておいたんだがな
851:デフォルトの名無しさん
08/03/29 18:55:00
>って書いておいたんだがな
どこに?
852:デフォルトの名無しさん
08/03/29 19:11:50
>>850
> >>840 と >>844 は師匠と弟子か?
いや、まったく関係なし。
単に暇つぶしで適当かつ、それなりに捻くってコードを書いただけ。
真面目なコードは既に出てたし、こういう捻った書き方もあるよーってね。
#まぁぶっちゃけprintfの書式で遊んでみたかっただけなんだけど。
853:デフォルトの名無しさん
08/03/29 19:16:56
勉強用に、って自分の勉強のことか
854:デフォルトの名無しさん
08/03/29 21:07:15
変なコードを書くときは、一々捻くれたとか書かないでそのまま書く。
そういうことを書くとちょっと変わった俺臭がきついから。
855:デフォルトの名無しさん
08/03/29 21:10:10
いよいよCにすら関係なくなってきたぞ
856:デフォルトの名無しさん
08/03/29 23:39:59
まぁ、ぶっちゃけ、これらを習って最終的に何を作る目的があるのか?
自分も大学生時代にC言語の授業はあったけど、そこで習ったことだけじゃ通用せんが
必要なことは習っていた。その後、自分でライブラリを調べて、日ごろの使用目的に応じて
必要なプログラムを作るようになった。そうなるのが望ましい。
857:デフォルトの名無しさん
08/03/30 00:22:05
まあここに来るのは「プログラムの宿題マンドクサ。誰かにやってもらおう」って人だから、望むべくもないかもね。
858:デフォルトの名無しさん
08/03/30 00:36:29
それくらいの人の方がうれしい
単位がかかってるとか理解できないからもっと簡単にしてくれとかちょっとうざい
859:デフォルトの名無しさん
08/03/30 00:43:56
何でも良いから宿題かもん
860:デフォルトの名無しさん
08/03/30 00:46:37
ひまなら project Euler でもやってれば
861:デフォルトの名無しさん
08/03/30 00:48:37
おおやってみる㌧クス
862:デフォルトの名無しさん
08/03/30 12:55:14
[1] 授業単元:アルゴリズム
[2] 問題文(含コード&リンク):() 指定文字列と一致する文字列が規定の文字列に存在するかどうかを2分探索法で探索するプログラム
[3] 環境
[3.1] OS: (Windows/Linux/等々) linux
[3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
[3.3] 言語: (C/C++/どちらでも可 のいずれか) C
[4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか)3月31日AM9:00まで
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)特になし
上記のプログラムの作り方が分かりません。文字列は2つとも配列に格納してある状態です。よろしくお願いします。
863:862
08/03/30 12:57:51
↑書き忘れました。
規定の文字列というのは2分探索法ですので aaabbcのように辞書順にソートされている1行の文字列です。
864:デフォルトの名無しさん
08/03/30 13:32:09
| 1 2 3 4… 9
---------------------
1| 1 2 3 4… 9
2| 2 4 6 8… 18
3| 3 6 9 12… 27
4| 4 8 12 16… 36
以下省略
と、いった感じの九九の表をforを使って作りたいのですが、どうしたらよいのでしょうか?
865:デフォルトの名無しさん
08/03/30 14:02:38
int main()
{
int i, j;
const int max = 9;
printf(" |");
for (i = 1; i <= max; i++) {
printf(" %3d", i);
}
printf("\n--+");
for (i = 1; i <= max; i++) {
printf("----");
}
for (i = 1; i <= max; i++) {
printf("\n%2d|", i);
for (j = 1; j <= max; j++) {
printf(" %3d", i * j);
}
}
return 0;
}
866:デフォルトの名無しさん
08/03/30 15:06:39
>>862
mainは適当に書いたから書き直したほうがいいかも
URLリンク(kansai2channeler.hp.infoseek.co.jp)
867:デフォルトの名無しさん
08/03/30 15:09:28
>>862
二分探索には標準ライブラリ関数bsearchを使いました。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int cmp( const void* key, const void* elm )
{
return strcmp( (const char*)key, *(const char**)elm );
}
int main(void)
{
// 規定の文字列。辞書順にソートされていること。
static const char* const table[] = {
"abc", "def", "ghi", "jkl", "mno", "pqr", "stu", "vwx", "yz",
};
const char** hit;
char str[101];
printf( "検索文字列:" );
scanf( "%100s", str );
hit = (const char**)bsearch( str, table, sizeof(table)/sizeof(*table), sizeof(*table), cmp );
if( hit )
printf( "'%s'は%d番目に存在します。\n", str, hit-table );
else
printf( "'%s'は存在しません。\n", str );
return 0;
}
868:867
08/03/30 15:21:42
>>863を把握していなかった。修正。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int cmp( const void* key, const void* base )
{
const char* key_str = (const char*)key;
return strncmp( key_str, (const char*)base, strlen(key_str) );
}
int main(void)
{
static const char base[] = "aaabbc"; // 規定の文字列
const char* hit;
char str[101];
printf( "検索文字列:" );
scanf( "%100s", str );
hit = (const char*)bsearch( str, base, strlen(base), 1, cmp );
if( hit )
printf( "'%s'は%d文字目から存在します。\n", str, hit-base+1 );
else
printf( "'%s'は存在しません。\n", str );
return 0;
}
869:デフォルトの名無しさん
08/03/30 18:03:32
>>864
int x,y;
puts(" | 1 2 3 4 5 6 7 8 9\n------------------------------"
for(x=1; x<10; x++)
{
printf("%d | ", x);
for(y=1; y<10; y++)
printf("%d ", x * y);
}
870:デフォルトの名無しさん
08/03/30 18:08:44
>>869
871:デフォルトの名無しさん
08/03/30 20:50:16
〉〉868
アルゴリズムの問題なのだから、bsearchを使うのはだめなんじゃないか?アルゴリズムを作って使う課題なのだろうし。
872:デフォルトの名無しさん
08/03/31 22:57:05
C++ のSTLのvectorで、要素の最後から開放していくのはこんな感じであってますか?
std::vector<Hoge*>::reverse_iterator itr = v.rbegin() ;
while( false == v.empty() )
{
delete *itr++ ;
v.pop_back() ;
}
873:デフォルトの名無しさん
08/03/31 23:11:01
基本的に領域の開放は無理だろ swapでやるしか無いのでは?
ブロックごとに管理して100個使わなくなったら解放とかじゃないか
874:デフォルトの名無しさん
08/03/31 23:11:47
constでない操作を呼び出した時点でiteratorは無効になる。
(実装によりたまたま有効なままかもしれないけど)
↓でいいんじゃない。
while(!v.empty()) {
delete v.back();
v.pop_back();
}
875:デフォルトの名無しさん
08/03/31 23:14:51
pop_backした際にiteratorが無効になるので駄目。
なので
while( ! v.empty() ){
delete v.back();
v.pop_back();
}
もしくは
for(std::vector<Hoge*>::reverse_iterator itr = v.rbegin();itr != v.rend();++itr)
delete *itr;
v.clear();
もしくは
std::for_each(v.rbegin(),v.rend(),boost::checkd_deleter<Hoge>());
v.clear();
あたりをどうぞ。
2番目か3番目がお勧め(3は要boost)
876:デフォルトの名無しさん
08/03/31 23:18:15
上のソースで、一つずつ領域解放出来るの??? swapしか出来ないと思ってたけど
877:デフォルトの名無しさん
08/03/31 23:21:33
解放しようとしているものを取り違えている。
v.empty()がtrueだけどメモリがreserveされてる話とは別。
vector<Hoge*>().swap(v);
てことだろうけど、これだとvの中のHoge*が指す先はリークする。
878:デフォルトの名無しさん
08/03/31 23:22:22
delete v.back();
'delete' のオペランドは非 const ポインタでなければならない
879:デフォルトの名無しさん
08/03/31 23:23:14
>>878
vがconstなんだろ。それなら無理だ。
880:デフォルトの名無しさん
08/03/31 23:23:47
>>877
後ろからサイズを小さくしていくならばresize()という関数あるけど駄目なの?
881:デフォルトの名無しさん
08/03/31 23:24:36
vector<int> v(10000); だが・・・
882:デフォルトの名無しさん
08/03/31 23:25:26
>>880
元の質問読んでる?vector<Hoge*>の各要素が指す先をdeleteしつvectorをemptyにしたいって言ってるんだよ。
883:デフォルトの名無しさん
08/03/31 23:31:04
そういうことね
884:デフォルトの名無しさん
08/03/31 23:39:18
>>875
3番目はboost無くても数行で実装できるよね
URLリンク(www.google.com)
885:デフォルトの名無しさん
08/03/31 23:48:18
>>875
うん。今回だとdeleteを適用する関数オブジェクト作るだけだしね。
886:デフォルトの名無しさん
08/04/01 16:21:58
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
[3.1] OS:windowsXP
[3.2] コンパイラ名とバージョン: visual studio 2003
[3.3] 言語:C言語
[4] 期限:2008年4月2日午前8時
[5] その他の制限:なし
よろしくお願いします