C/C++の宿題片付けます 136代目
レス数が1000を超えています。これ以上書き込みはできません。
【質問者へ】
回答者の便宜のため、質問の際は以下を行うことを推奨します。
・質問は【質問テンプレ】を利用してください。
・問題文は、出題されたまま全文を書いてください。
・問題文やコードをリンクするときは、一言内容にについて説明をつけましょう。
・計算問題は数式をあげ、どのような計算をするのか詳しく説明してください。
・エラーは、その詳細と発生した行を書きましょう。エラーメッセージはコピペしてください。
・後から問題に付け足しするのはコラー!!です。付け足しは作業を無駄にしがちです。
・なりすましを防ぐため、トリップを使ってください。名前欄に、「#」に続けて任意の文字列を入力して投稿すると、その文字列を知らない他人に騙られることを防ぐことができます。
【質問テンプレ】
[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] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
【アップローダー==ラウンジ】(質問が長い時はココ使うと便利 回答者もコードが長ければここに)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
【C 関数検索 man on WWW】 http://www.linux.or.jp/JM/index.html
【過去ログ検索】 http://chomework.sakura.ne.jp/
【wiki】 http://www23.atwiki.jp/homework/
前スレ
C/C++の宿題片付けます 135代目
http://pc12.2ch.net/test/read.cgi/tech/1269438098/
0002デフォルトの名無しさん
2010/05/26(水) 12:04:44[2] 問題文:単価と数量を入力するごとに金額を表示し、データ入力終了後合計金額と、千円札のみで払う場合の枚数と釣り銭を表示しなさい。なお、入力データのの終わりは単価0とする。
実行例
300 2 <ーーデータ入力
300*2=600円 <ー表示
250 5
250*5=1250円
100 1
100*1=100円
1500 2
1500*2=3000円
350 4
350*4=1400円
0 0 <ーーデータの終わり
合計金額 6350円 <ーー合計表示
1000円札 7枚 <ーー1000円札の枚数表示
釣り銭 650円 <ーー釣り銭の金額表示
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語: C
[4]期限:26日PM10:00
[5]その他制限: printf int while scanf float for
今まで習ったのはコレくらいです。今回もよろしくお願いします。
0003デフォルトの名無しさん
2010/05/26(水) 12:40:38前スレまだ残っているが。0 0の時の出力はない方がいいなら、
if ( tanka != 0 )
を、小計出力の前に置けばいい。
int main()
{
int tanka, kosu, shokei; // 単価 個数 小計
int maisu, gokei = 0; // お札枚数, 合計
do {
scanf("%d", &tanka);
scanf("%d", &kosu);
shokei = tanka * kosu;
gokei += shokei;
printf("%d * %d = %d 円\n", tanka, kosu, shokei);
} while ( tanka != 0 );
printf("合計金額 %d円\n", gokei);
maisu = gokei/1000 + 1;
printf("1000円札 %d枚\n", maisu);
printf("お釣り %d円", maisu*1000 - gokei);
}
0004デフォルトの名無しさん
2010/05/26(水) 22:48:48ありがとうございます!!
新レスについ、スレしてしまいました;;
0005デフォルトの名無しさん
2010/05/26(水) 23:39:12[2] 問題文(含コード&リンク):
以下の実行結果になるようおねがいします
文字列を入力してください
adlkjgeiakdalf
確認したい文字を入力してください
a
文字(a)の数は3文字です
[3] 環境
[3.1] OS: Windows
[3.2] gcc 3.4
[3.3] 言語:C
[4] 期限:できる限り早くおねがいしますorz
[5] その他の制限: 一次元二次元配列まで習いました
0006デフォルトの名無しさん
2010/05/27(木) 00:21:54ttp://ideone.com/cppym
0007デフォルトの名無しさん
2010/05/27(木) 00:37:35行列の積を計算するプログラムのコードを提出という課題が学校で出たのですが
前スレでは初期化していない事と添え字がずれていると指摘されたのですが、それを直しても下の実行結果でした
n (n<=10) の値を入力して下さい。
2
行列aの1行1列の値を入力して下さい。
1
行列aの1行2列の値を入力して下さい。
2
行列aの2行1列の値を入力して下さい。
3
行列aの2行2列の値を入力して下さい。
4
行列bの1行1列の値を入力して下さい。
1
行列bの1行2列の値を入力して下さい。
2
行列bの2行1列の値を入力して下さい。
3
行列bの2行2列の値を入力して下さい。
4
c[0][0] = 10551303
c[0][1] = 4106
c[1][0] = 15
c[1][1] = 29
0008デフォルトの名無しさん
2010/05/27(木) 00:52:18ちゃんと↓のまま試した?
http://codepad.org/ZsuxxDc6
そのまま試していれば、この添え字にはならないと思うんだけど
c[0][0] = 10551303
c[0][1] = 4106
c[1][0] = 15
c[1][1] = 29
0009デフォルトの名無しさん
2010/05/27(木) 11:31:31ここに気付かずに重複スレ立ててしまいました。すみません。
http://pc12.2ch.net/test/read.cgi/tech/1274926862/
前スレの消化速度はおおよそ2ヶ月でしたが、削除依頼すべきか、再利用するのか。
これまでのケースを知りませんので、ご意見を伺いたく思います。
0010デフォルトの名無しさん
2010/05/27(木) 12:05:08#include<stdio.h>
int main (void)
{
int i,j,k,n;
int a[10][10],b[10][10],c[10][10];
printf("n (n<=10) の値を入力して下さい。\n");
scanf("%d",&n);
for(i=1;i<=n;i++) { for(j=1;j<=n;j++) {
printf("行列aの%d行%d列の値を入力して下さい。\n",i,j);scanf("%d",&a[i-1][j-1]);}}
for(i=1;i<=n;i++) { for(j=1;j<=n;j++) {
printf("行列bの%d行%d列の値を入力して下さい。\n",i,j);scanf("%d",&b[i-1][j-1]);} }
// for(i=0;i<=n;i++) { for(j=0;j<=n;j++) { for(k=0;k<=n;k++){
for(i=0;i<n;i++) { for(j=0;j<n;j++) { c[i][j] = 0; for(k=0;k<n;k++){
c[i][j] += a[i][k] * b[k][j];}}}
// for(i=0;i<=n;i++){for(j=0;j<=n;j++){
for(i=0;i<n;i++){for(j=0;j<n;j++){
printf("c[%d][%d] = %d\n",i,j,c[i][j]);}}
return 0;
}
>>009 が、おせっかいな人=あわて者
982 が焦ったということで。
0011デフォルトの名無しさん
2010/05/27(木) 15:24:48落ちてなければ次スレとして使えばいいさ
検索で飛んでくる人はどっちにいくか知らないけどw
0012デフォルトの名無しさん
2010/05/27(木) 18:16:430013デフォルトの名無しさん
2010/05/27(木) 19:16:30自分で1つ1つ色を指定していなかくてはいけないのですか??
0014デフォルトの名無しさん
2010/05/27(木) 19:18:360015デフォルトの名無しさん
2010/05/27(木) 19:43:46なんとか三行になったぞw
int f(int x){int y;x%=1024;y=x/256;z=x%256;if(y==0)return 0;if(y==1)return z;
if(y==2)return 255;return 255-z;}
long col(int x){if(x<0||896<x)return 0;return f(x+512)<<16+f(x+256)<<8+f(x);}
#include <stdio.h>
int f(int x){
int y, z;
x%=1024;y=x/256;z=x%256;
if(y==0)return 0;
if(y==1)return z;
if(y==2)return 255;
return 255-z;
}
long col(int x){
if(x<0||896<x)return 0;
return (f(x+512)<<16) + (f(x+256)<<8) + f(x);
}
int main(void){
int i, j;
printf("Content-type: text/html\n\n");
/* ここから3行 */
printf("<html><body><table width=200 height=200>\n"); for(i=0;i<30;i++){ printf("<tr>\n");
for(j=0;j<30;j++) printf("<td bgcolor=\"#%06LX\"></td>", col(i*30+j));
printf("</tr>\n");} printf("</table></body></html>\n");
/* ここまで */
}
0017デフォルトの名無しさん
2010/05/27(木) 20:33:16そりゃ三日三晩考え抜いたからな
0018デフォルトの名無しさん
2010/05/27(木) 22:51:060019デフォルトの名無しさん
2010/05/27(木) 23:28:09ありがとうございます!!助かりました
00209
2010/05/28(金) 07:33:53ここはスレ立てに関していい意味で緩いようですので、再利用不可の単発でもないので残すことにいたします。
もしも落ちていなければ、次スレにでも隔離スレにでも何なりと使ってください。以上です。
質問メインのスレでお騒がせしいたしました。それでは失礼いたします。
0021デフォルトの名無しさん
2010/05/28(金) 11:21:430022デフォルトの名無しさん
2010/05/28(金) 11:52:210023デフォルトの名無しさん
2010/05/28(金) 12:00:290024デフォルトの名無しさん
2010/05/28(金) 12:06:230025デフォルトの名無しさん
2010/05/28(金) 17:23:500026デフォルトの名無しさん
2010/05/28(金) 18:19:590027デフォルトの名無しさん
2010/05/28(金) 19:11:17馬鹿?
0028デフォルトの名無しさん
2010/05/29(土) 08:34:07#include<stdio.h>
main(){
int i;
for(i=1;i<6;i++)
printf("%*d\n",i,i);
}
↓こうなるように誰かお願いします。
@
@
@
@
@
@
@
@
@
0029デフォルトの名無しさん
2010/05/29(土) 09:43:46#include <stdio.h>
#define N 6
int main(void){
int i;
for(i=1; i<N; i++)
printf("%*d\n", i, i);
for(i-=2; i>0; i--)
printf("%*d\n", i, i);
return 0;
}
0030デフォルトの名無しさん
2010/05/29(土) 11:58:25#include <stdio.h>
int main(void)
{
int i, j = 1;
for(i=1; i > 0; i += j) {
if(i==5) j = -1;
printf("%*d\n", i, i);
}
return 0;
}
0031デフォルトの名無しさん
2010/05/29(土) 12:35:17[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10625.txt
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C
[4] 期限: 2010年6月2日まで
[5] その他の制限:なし
2問ありますが、よろしくお願いします。
0032デフォルトの名無しさん
2010/05/29(土) 13:06:45ありがとうございます。数字が@に変身すると、もっとありがとうなんですが。
がんばって立派な大学生になります。
0033デフォルトの名無しさん
2010/05/29(土) 13:09:27【1】
(1) print_g(&t);
(2) x = (t->a.x + t->b.x + t->c.x) / 3;
(3) y = (t->a.y + t->b.y + t->c.y) / 3;
【2】
(1) return 1;
(2) return car(head) * fact(cdr(head));
0034デフォルトの名無しさん
2010/05/29(土) 13:16:32printf("%*d\n", i, i) → printf("%*c", i, '@');
0035デフォルトの名無しさん
2010/05/29(土) 13:52:28まじ、ありがとうございました。
0036デフォルトの名無しさん
2010/05/29(土) 14:06:54[2]問題文:たしてちょうど15になる7個の自然数の組合せをすべて列挙し、、
すべての組合せを表示し終えた後にそれらの組合せが全部でいくつあるの
かも出力するプログラムを作れ。
[3]
[3.1]OS:windows7
[3.2]コンパイラ名とバージョン:gcc
[3.3]言語:C++
[4]期限:2010年6月1日まで
[5]できればfor文orwhile文(他の文が一部混ぜっていてもいい)
お願いします。
0037デフォルトの名無しさん
2010/05/29(土) 14:08:590038デフォルトの名無しさん
2010/05/29(土) 14:14:270039デフォルトの名無しさん
2010/05/29(土) 14:22:22テストするな
0040デフォルトの名無しさん
2010/05/29(土) 14:47:34#include <stdio.h>
void hoge(int *count, int result[], int left_num, int min_num, int rest){
int i;
if(rest<=1)
{
result[0]=left_num;
for(i=0;i<7;i++) printf(" %d", result[i]);
printf("\n");
*count+=1;
return;
}
for(i=min_num;i<=left_num/rest;i++)
{
result[rest-1]=i;
hoge(count, result, left_num-i, i, rest-1);
}
}
int huga(void){
int count=0, result[7];
hoge(&count, result, 15, 1, 7);
return count;
}
int main(void){
printf("%d\n", huga());
}
0041デフォルトの名無しさん
2010/05/29(土) 15:01:03ありがとうございます。
0042デフォルトの名無しさん
2010/05/29(土) 23:48:19ありがとうございました。
0043デフォルトの名無しさん
2010/05/30(日) 00:27:48[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10627.txt
[3] 環境
[3.1] OS:WindowsXP
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C
[4] 期限: 2010年5月31日8:30まで
[5] その他の制限:step通りに作成
よろしくお願いします。
0044デフォルトの名無しさん
2010/05/30(日) 11:39:255目並べなのか10目並べなのかはっきりしてほしい
0045デフォルトの名無しさん
2010/05/30(日) 11:43:180046デフォルトの名無しさん
2010/05/30(日) 11:44:56これ
[step1]'十','−’,'|’などの文字を使って五目並べをするための10行10列の格子枠をキャラク
タモードで表示する。関数化(関数名waku)しておく。(注意:この格子枠を表示するのが
難しければ、列を表す最上端の数字1〜1Oと、各行の左端に行を現す数字1〜10を表示
すること)
1 2 ・・・・・10
+−−−+−−−+・・・
1 |
+
2 |
0047デフォルトの名無しさん
2010/05/30(日) 11:53:380048デフォルトの名無しさん
2010/05/30(日) 12:00:060049デフォルトの名無しさん
2010/05/30(日) 15:56:54http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10629.txt
0050デフォルトの名無しさん
2010/05/30(日) 16:03:120051デフォルトの名無しさん
2010/05/30(日) 16:08:01ありがとうございました。
0052デフォルトの名無しさん
2010/05/30(日) 16:26:57斜めの判定の実装で悪戦苦闘しているうちに先越された!
くやしい! でも感じちゃう。
0053デフォルトの名無しさん
2010/05/30(日) 16:34:29そう思ったなら自分で改造してみるのがプログラマってもんでしょう!
…負け惜しみじゃないですよ^q^
0054デフォルトの名無しさん
2010/05/30(日) 16:35:13>>53は>>50宛です
0055デフォルトの名無しさん
2010/05/30(日) 16:45:00void main() {
int x, y, player = 1;
char buf[32];
waku(0, 0, 0);
for (;;) {
do {
printf("%sさん次の手を入力しなさい\n", koma[player]);
fgets(buf, MAX_BUF, stdin);
} while (inputToVector(buf, &x, &y));
waku(x, y, player);
if (narabi(x, y, player)) {
printf("%sさんの勝ち\n", koma[player]);
break;
}
player = 3 - player;
}
}
0056デフォルトの名無しさん
2010/05/30(日) 16:53:040057デフォルトの名無しさん
2010/05/30(日) 17:08:080058デフォルトの名無しさん
2010/05/31(月) 16:59:42[2] 問題文:10進数を2進数に変換するプログラムをC言語でつくれ
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 明日の昼
[5] その他の制限: 制限はありませんが基本的な構造でお願いします
0059デフォルトの名無しさん
2010/05/31(月) 17:19:47http://codepad.org/oV6Eztkq
0060デフォルトの名無しさん
2010/05/31(月) 17:27:04ありがとうございます。
制限に書き忘れましたができればビット演算子は無しでお願いします。
0061デフォルトの名無しさん
2010/05/31(月) 17:34:160062デフォルトの名無しさん
2010/05/31(月) 17:55:43短くしてみたw
http://codepad.org/4clJto84
再帰でリバースを排除
これで提出はしない方がいいと思うけど
0063デフォルトの名無しさん
2010/05/31(月) 18:19:35さらに
負号で負数にも対応
http://codepad.org/A6omw7NU
むしろ
ビット演算子を使った場合(この環境では負数は2の補数表現であることがわかる)
http://codepad.org/I4sjhz4A
0064デフォルトの名無しさん
2010/05/31(月) 18:41:540065デフォルトの名無しさん
2010/05/31(月) 18:49:240066デフォルトの名無しさん
2010/05/31(月) 18:51:42再帰呼び出しの必要のない時は使わないのが吉
0067デフォルトの名無しさん
2010/05/31(月) 19:00:42そうそう、これが「4元1次方程式を解け」とか「ルンゲ・クッタ法で」とかだったら、とたんに放置されてしまうんですよね。
0068デフォルトの名無しさん
2010/05/31(月) 19:01:390069デフォルトの名無しさん
2010/05/31(月) 19:06:22void main() 議論は宿題がでなかった時期に燃えたのでは?
0070デフォルトの名無しさん
2010/05/31(月) 19:21:35よく見るとそうだな
でも、数独議論でごまかすはあったようなきがする
0071デフォルトの名無しさん
2010/05/31(月) 19:42:49スレを流そうとしてたんじゃねーの?w
0072デフォルトの名無しさん
2010/05/31(月) 20:43:550073デフォルトの名無しさん
2010/05/31(月) 21:02:190074デフォルトの名無しさん
2010/05/31(月) 21:06:260075デフォルトの名無しさん
2010/05/31(月) 21:44:04[2] 問題文:コマンドライン引数に指定された文字列それぞれが
16進数表記で表された0以上100万以下の整数であ
るをことをチェックした後、それを12進数に
変換したものを表示するプログラムをつくれ
16進数表記の先頭の0xはなくても良いがあってもエラーに
してはならない。16進数表記になっていない、あるいは
指定された範囲に無い場合はその旨表示する。
[3] 環境
[3.1] OS: Windows XP
[3.2] コンパイラ名とバージョン: Visual C++.NET 2008
[3.3] 言語: C
[4] 期限: 明日の夕方
[5] その他の制限:
stdio.hをincludeできる。
そこで定義されている関数のみ標準関数として使用できる
標準関数以外で定義して使用できるものは1個に限るものとする。
グローバル変数は使用してはならない
各関数のローカル変数は2個まで使用できる。配列は使えない。
構造体、共用体 else文を使ってはならない。
0076デフォルトの名無しさん
2010/05/31(月) 21:48:530077デフォルトの名無しさん
2010/05/31(月) 21:49:14まぁ、可能なんだろうけど
0078デフォルトの名無しさん
2010/05/31(月) 21:50:59「やる気がない」=「できない」
0079デフォルトの名無しさん
2010/05/31(月) 21:54:24これって自作関数1個しか作っちゃいけないってことか?
メイン一つと自作関数一つ、それぞれローカル変数2個だけってかなり厳しくないか?
0080デフォルトの名無しさん
2010/05/31(月) 21:55:380081デフォルトの名無しさん
2010/05/31(月) 21:57:200082デフォルトの名無しさん
2010/05/31(月) 22:01:55http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10632.c
0083デフォルトの名無しさん
2010/05/31(月) 22:05:12暗黙のうちに、main関数以外で自作できるのは1つだけ
でいいんぢゃね?
あと引数は、C言語教室的にはローカル変数とは区別されるだろ?
{}の中で定義される変数のことなんだろから
0084デフォルトの名無しさん
2010/05/31(月) 22:07:34int main(int argc, char *argv[]){
long x, y=0;
if(argc<2){
printf("\nエラー:コマンドライン引数を指定してください\n");
return 1;
}
if(sscanf(argv[1], "0x%lx", &x)!=1){
if(sscanf(argv[1], "%lx", &x)!=1){
printf("\nエラー:十六進数ではありません\n");
return 2;
}
}
if(x<0 || 1000000<x){
printf("\nエラー:値が範囲外です\n");
return 3;
}
y+=(x/(1*12*12*12*12*12))%12<<20;
y+=(x/(1*12*12*12*12))%12<<16;
y+=(x/(1*12*12*12))%12<<12;
y+=(x/(1*12*12))%12<<8;
y+=(x/(1*12))%12<<4;
y+=(x/(1))%12;
printf("%lx\n", y);
return 0;
}
0085デフォルトの名無しさん
2010/05/31(月) 22:07:450086デフォルトの名無しさん
2010/05/31(月) 22:11:41文字列は一つじゃないみたいだけど
0087デフォルトの名無しさん
2010/05/31(月) 22:12:36まんどくせ
0088デフォルトの名無しさん
2010/05/31(月) 22:18:31y使い回せばよくね
0089デフォルトの名無しさん
2010/05/31(月) 22:19:04long func(long x){
long y=0;
y+=(x/(1*12*12*12*12*12))%12<<20;
y+=(x/(1*12*12*12*12))%12<<16;
y+=(x/(1*12*12*12))%12<<12;
y+=(x/(1*12*12))%12<<8;
y+=(x/(1*12))%12<<4;
y+=(x/(1))%12;
return y;
}
int main(int argc, char *argv[]){
long i, x;
for(i=1;i<argc;i++){
if(sscanf(argv[i], "0x%lx", &x)!=1){
if(sscanf(argv[i], "%lx", &x)!=1){
printf("\nエラー:十六進数ではありません. %s\n", argv[i]);
continue;
}
}
if(x<0 || 1000000<x){
printf("\nエラー:値が範囲外です. %ld\n", x);
continue;
}
printf("%s -> %lx\n", argv[i], func(x));
}
return 0;
}
0090デフォルトの名無しさん
2010/05/31(月) 22:20:470091デフォルトの名無しさん
2010/05/31(月) 23:11:12http://codepad.org/NrlIZHVT
>>90の問題にも対応したぞ
0092デフォルトの名無しさん
2010/05/31(月) 23:17:17[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10633.txt
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: cygwin gcc
[3.3] 言語: C言語
[4] 期限: 2010年6月1日15時まで
よろしくお願いします
0093デフォルトの名無しさん
2010/05/31(月) 23:45:53お手上げだな
0094デフォルトの名無しさん
2010/05/31(月) 23:49:53なんでそう思うの?
0095デフォルトの名無しさん
2010/05/31(月) 23:54:04http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10634.c
0096デフォルトの名無しさん
2010/05/31(月) 23:54:44たびたび申し訳ありません。
[1] 授業単元:C言語プログラミング
[2] 問題文:引数に与えられた10進数を2進数に変換し表示するするプログラムをC言語でつくれ
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 明日の昼
[5] その他の制限: 制限はありませんが基本的な構造でお願いします
0097デフォルトの名無しさん
2010/05/31(月) 23:59:32ありがとうございます
0098デフォルトの名無しさん
2010/06/01(火) 00:02:17>>95
ありがとうございます
0099デフォルトの名無しさん
2010/06/01(火) 00:03:50http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10635.c
0100デフォルトの名無しさん
2010/06/01(火) 00:06:54http://codepad.org/ybmsbexu
0101デフォルトの名無しさん
2010/06/01(火) 00:15:44[2] 問題文(含コード&リンク):
n元連立1次方程式を解き,掃き出し法により求まる係数マトリクスの逆行列と解ベクトルを表示するプログラムを作れ。
[3] 環境
[3.1] OS:WindowsXP
[3.2] コンパイラ名とバージョン: Visual C++
[3.3] 言語:C++
[4] 期限: 2010年6月3日15:00頃まで
[5] その他の制限: 出来るだけ基本的な方法でお願いします。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10637.txt
時間がなくなってきたので質問させていただきました。
自分なりにC++を扱うホームページの逆行列のプログラムを参考に、あまり分からないながら作ったのが下のプログラムです。
メモリやn次元の定義等は講義中で習っていないので良くわからないのですが、解を代入して求める未知数ベクトルを算出する作業が思うようにいきません。
URLのプログラムをうまい具合に変えて問題文の条件を満たすプログラムにして頂けると助かります。
またinclude<iostream>やcout、cinは授業の方では扱っていないので
include<stdio.h>の形でprintfやscanfを用いて作って頂けたら幸いです。
0102デフォルトの名無しさん
2010/06/01(火) 00:21:46せめてstdio.hでなくcstdioじゃないかいな
0103デフォルトの名無しさん
2010/06/01(火) 01:56:27[2] 問題文(含コード&リンク):整数を一つ入力してその数以下の素数をすべて出力するプログラムを作れ
[3] 環境
[3.1] OS:WindowsVista
[3.2] コンパイラ名とバージョン:Microsoft visual c++
[3.3] 言語:C
[4] 期限:2010年6月3日
[5] その他の制限:基本的な構造でお願いします
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10639.txt
こう書いてみたらノートン先生が怒るんですけど
どうすればいいんですか?
0104デフォルトの名無しさん
2010/06/01(火) 03:14:20ノートン先生のSONARが怒っているんだろ?
だったら自分のコンパイル環境に問題がないと信じているのなら、
それが吐いた実行ファイルも信頼してやれ。
最近のSONARは過剰反応しすぎだ。
0105デフォルトの名無しさん
2010/06/01(火) 03:23:16http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10640.c
修正点は、
・mを初期化
・2も素数
0106デフォルトの名無しさん
2010/06/01(火) 03:25:15最近じゃなく昔からだw
>>103
nに2以上が代入されたときにiのループの最初(i=2)はjのループを一回も回らない(j<i不成立)から
初期化されていないmと0とを比較しようとするので2が出力されるかどうかは運次第
0107デフォルトの名無しさん
2010/06/01(火) 09:45:38[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10641.txt
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: cygwin gcc
[3.3] 言語: C言語
[4] 期限: 2010年6月1日まで
よろしくお願いします
0108デフォルトの名無しさん
2010/06/01(火) 11:34:57http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10642.txt
もし問題があったら早めに知らせて下さい。
ちなみに演算結果は行列の教科書で検算して正しいことを確かめています。
逆行列が潰れる時(行列式が0の時)のチェックはしていません。
0109デフォルトの名無しさん
2010/06/01(火) 13:23:09やってみたけど俺には制限が厳し過ぎて�_
http://ideone.com/OOoLr
0110デフォルトの名無しさん
2010/06/01(火) 17:03:02[2] 問題文(含コード&リンク):(1)x^2*cosx の0〜π/2までの積分 (2)(logx)^2
の1〜eまでの積分
[3] 環境
[3.1] OS: Windows
[3.2] visual c++
[3.3] 言語: c++
[5] シンプソンの公式と台形公式を使っての数値積分をするプログラム
0111デフォルトの名無しさん
2010/06/01(火) 17:34:42http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10643.txt
0112デフォルトの名無しさん
2010/06/01(火) 18:02:28ありがとうございます
0113デフォルトの名無しさん
2010/06/01(火) 18:19:04[2] 問題文(含コード&リンク): http://uproda11.2ch-library.com/11244916.pdf.shtml
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン: わからないのですが、
gcc -o というコマンドを使っています。
[3.3] 言語: C
[4] 期限:2010年6月3日13:00まで
[5] その他の制限:制限というか、ヒント文みたいなのです。>>1のろだは容量オーバーで使えなかったので、別ろだです。
http://uproda11.2ch-library.com/11244915.pdf.shtml
切実に困っています。
よろしくお願いします。
0114デフォルトの名無しさん
2010/06/01(火) 18:36:34x-y 平面に展開せよ、とのことであるが、 x軸、y軸になにをわりあてるか、情報をください。
1) x: 時間t, y:θ(t)
2) x: 時間t, y:θ'(t)
3) x: θ(t), y:θ'(t)
どれもありそうです。
0115デフォルトの名無しさん
2010/06/01(火) 19:52:000116デフォルトの名無しさん
2010/06/01(火) 19:58:37岡ちゃん乙
0117デフォルトの名無しさん
2010/06/01(火) 21:09:26ちゃんと払ってくれるのか?
0118デフォルトの名無しさん
2010/06/02(水) 00:08:32>>113です。
3つのデータを作って、そのあとgnuplotで2つ選んでレポートを書くという課題です。
なので、3つのデータをファイルで書き出せるようにしたいです…。
説明不足ですいません…
0119デフォルトの名無しさん
2010/06/02(水) 00:18:350120デフォルトの名無しさん
2010/06/02(水) 00:22:37[2] 問題文:整数nを入力し、以下のようになサイズnの”Z型の図形”を”*”で表示するプログラムを作成しなさい。
ただし、図形を表示するためのnの値は3以上とし、2以下の値が入力された場合は処理を終了する様にしなさい。
[実行例]
3 <-n入力
n=3
***
*
***
4 <-n入力
n=4
****
*
*
****
8 <-n入力
n=8
********
*
*
*
*
*
*
********
2
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン:
[3.3] 言語: C
[4]期限:6/2日PM10:00
[5]その他制限: printf int while scanf float for のみ使用、2重ループ必
0121デフォルトの名無しさん
2010/06/02(水) 00:34:47int main(void)
{
int i, j, n;
while(1) {
scanf("%d", &n);
if(n <= 2) break;
printf("n = %d\n", n);
for(i=1; i<=n; i++) {
for(j=0; j<n; j++) printf("%c", i==1||i==n||i+j==n ? '*' : ' ');
printf("\n");
}}
return 0;
}
0122デフォルトの名無しさん
2010/06/02(水) 08:46:34cをコンパイルしてできたexeを起動して、プログラムの中で起きてる割り込みを調べるには
どのようなコマンドや方法で調べればいいのでしょうか?
0123デフォルトの名無しさん
2010/06/02(水) 15:58:49[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10644.zip
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: VC
[3.3] 言語:C++
0124デフォルトの名無しさん
2010/06/02(水) 16:02:24字が小さすぎて区別できない
0125デフォルトの名無しさん
2010/06/02(水) 16:04:27すみません、もっと大きな画像を貼れるアップローダを探してきます。
0126デフォルトの名無しさん
2010/06/02(水) 16:14:22http://www1.axfc.net/uploader/Img/link.pl?dr=7990810177&file=Img_84299.jpg
多少大きなサイズにできたと思います。
0127デフォルトの名無しさん
2010/06/02(水) 17:53:56書いていただきありがたいのですが
制限がprintf int while scanf float for のみ使用、2重ループ必
なので、breakは使用できません。
説明が曖昧でスミマソ
0128デフォルトの名無しさん
2010/06/02(水) 17:57:13>>121みたいに2以下が入力するまで繰り返し入力するのか、どっち?
0129デフォルトの名無しさん
2010/06/02(水) 18:07:56- if(n <= 2) break;
+ if(n <= 2) return 0;
0130デフォルトの名無しさん
2010/06/02(水) 18:11:25何度もすっ見ません;
0131デフォルトの名無しさん
2010/06/02(水) 18:14:36int main(void)
{
int i, j, n;
while(scanf("%d", &n)==1 && n > 2) for(i=1; i<=n; i++) for(j=0; j<=n; j++) printf("%c", j==n?'\n':i==1||i==n||i+j==n?'*':' ');
return 0;
}
0132デフォルトの名無しさん
2010/06/02(水) 18:16:17#include <stdio.h>
int main(void)
{
int i, j, n;
while(scanf("%d", &n)==1 && n > 2){
printf("n=%d\n", n);
for(i=1; i<=n; i++) for(j=0; j<=n; j++) printf("%c", j==n?'\n':i==1||i==n||i+j==n?'*':' ');}
return 0;
}
0133デフォルトの名無しさん
2010/06/02(水) 18:20:45ありがとうございます。!!
0134デフォルトの名無しさん
2010/06/02(水) 18:28:020135デフォルトの名無しさん
2010/06/02(水) 18:37:250136デフォルトの名無しさん
2010/06/02(水) 18:50:38くだらん書き込みでスレを汚さんでくれ
0137デフォルトの名無しさん
2010/06/02(水) 18:56:08[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10645.txt
[3] 環境
[3.1] OS:WindowsVista
[3.2] コンパイラ名とバージョン:Microsoft visual c++
[3.3] 言語:C
[4] 期限:2010年6月3日8:00まで
[5] その他の制限:基本的な構造でお願いします
0138デフォルトの名無しさん
2010/06/02(水) 19:04:11「ポインタ配列」ってなんですか?
”配列へのポインタ”ですか?
というあたりを出題者に問うてください。
0139デフォルトの名無しさん
2010/06/02(水) 19:06:280140デフォルトの名無しさん
2010/06/02(水) 19:10:51それだと話があわない。
0141デフォルトの名無しさん
2010/06/02(水) 19:11:26[1]
#include <stdio.h>
int main(void)
{
int i, a[5] = {1,2,3,4,5}, b[5] = {6,7,8,9,10}, *p[2];
p[0] = a;
p[1] = b;
for(i=0; i<5; i++) printf("%f ", (p[0][i] + p[1][i]) / 2.0);
return 0;
}
0142デフォルトの名無しさん
2010/06/02(水) 19:15:250144デフォルトの名無しさん
2010/06/02(水) 19:25:030145デフォルトの名無しさん
2010/06/02(水) 19:33:440146デフォルトの名無しさん
2010/06/02(水) 20:17:05配列はANSI Cでもまとめて扱うことはできない。
だから”配列へのポインタ”と言うのは存在しない。
”配列の先頭要素へのポインタ”なら存在する。
0147デフォルトの名無しさん
2010/06/02(水) 20:39:37俺じゃないから別の人だよ。
0148デフォルトの名無しさん
2010/06/02(水) 20:40:01pは要素数Nの配列へのポインタ
0149デフォルトの名無しさん
2010/06/02(水) 20:40:56またそういう物議をかもすレスをする。いいんだけどさ。
0150デフォルトの名無しさん
2010/06/02(水) 20:48:56やはり授業の延長だけでは難しいんですかね。
cstdioについて自分でも少し勉強してみます。
>>108
ありがとうございます。
動作に不具合はありませんでした。
こちらの要望にも沿ってお答え頂き大変助かりました。
0151デフォルトの名無しさん
2010/06/02(水) 20:54:01ん、古いC ならば理解できますが、auto な変数への初期化が OK となっている現在では差異がわかりません。
でも C++ の話はなしね。
0153デフォルトの名無しさん
2010/06/02(水) 20:59:240154デフォルトの名無しさん
2010/06/02(水) 21:18:400155デフォルトの名無しさん
2010/06/02(水) 21:22:250156デフォルトの名無しさん
2010/06/02(水) 21:24:220157デフォルトの名無しさん
2010/06/02(水) 21:25:370158デフォルトの名無しさん
2010/06/02(水) 21:26:570159デフォルトの名無しさん
2010/06/02(水) 21:27:34>>123=>>126 を解いてくれ
若干情報が落ちてるから半導体の勉強して無いと調べるのが面倒だけど
公式にあてはめるだけの問題だ
0160デフォルトの名無しさん
2010/06/02(水) 21:28:37NGしやすくなるし。
0161デフォルトの名無しさん
2010/06/02(水) 21:30:430162デフォルトの名無しさん
2010/06/02(水) 21:34:180163デフォルトの名無しさん
2010/06/02(水) 21:39:220164デフォルトの名無しさん
2010/06/02(水) 21:56:47[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10646.txt
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: cygwin gcc
[3.3] 言語: C言語
[4] 期限: 2010年6月2日まで
できなくて困っております よろしくお願いします
0165デフォルトの名無しさん
2010/06/02(水) 22:01:50>>109
0166デフォルトの名無しさん
2010/06/02(水) 22:06:39>>109
ありがとうございます
0167デフォルトの名無しさん
2010/06/02(水) 22:13:15scanfとか平気で使わせるし、第一曖昧すぎる。
mainから呼び出すだけならwhileも使えないしどうやってやれっての。
0168デフォルトの名無しさん
2010/06/02(水) 22:17:140169デフォルトの名無しさん
2010/06/02(水) 22:17:24sanf() はよく批判されていますが、危険性のない使い方であればいいと思います。
0170デフォルトの名無しさん
2010/06/02(水) 22:19:090171デフォルトの名無しさん
2010/06/02(水) 22:20:17グローバル変数使いまくれば出来るんだけど
引数や戻り値を持つ意味がなくなる
0172デフォルトの名無しさん
2010/06/02(水) 22:31:20まったく。
なまじ分かる学生の方が悩むだろうな
0173デフォルトの名無しさん
2010/06/02(水) 22:35:42[2] 問題文(含コード&リンク):
1、x[6]を宣言して、x[0]に5、x[1]に8、x[2]に6、x[3]に4、x[4]に1、x[5]に3を代入した後、ポインタを使って、x[0], x[2], x[4]の和と、x[1], x[3], x[5]の積を求めるプログラムを作成せよ。
2、与えられた文字数分だけ文字を一文字ずつ順に表示するprint関数を作成せよ。引数として文字列配列stringと整数nを用いること。ここで、stringは文字型配列の先頭アドレスを、nは表示する文字を意味する。
3、以下のmain分に従い、2つの文字列配列の中身を交換する関数exchangeを完成させよ。
int main(void){
char string1[] = "abcdefg";
char string2[] = "hijklmn";
printf("string1 = %s string2 = %s\n", string1, string2);
printf("exchange(string1, string2)");
exchange(string1, string2);
printf("string1 = %s string2 = %s\n", string1, string2);
return 0;
}
[3] 環境
[3.1] OS:Win Vista
[3.2] コンパイラ名とバージョン:VS 2008
[3.3] 言語:C
[4] 期限:[2010年6月3日12:00まで]
[5] その他の制限:問題文で指定されていること以外は無し
よろしくお願いします
0174デフォルトの名無しさん
2010/06/02(水) 23:12:28#include <stdio.h>
int main(void){
int x[6];
x[0]=5, x[1]=8, x[2]=6, x[3]=4, x[4]=1, x[5]=3;
printf("wa=%d\n", *(x) + *(x+2) + *(x+4) );
printf("seki=%d\n", *(x+1) * *(x+3) * *(x+5) );
return 0;
}
0175デフォルトの名無しさん
2010/06/02(水) 23:15:551
int main(int argc, char ** argv)
{
int x[6]={5,8,6,4,1,3};
int *p = x;
printf("sum = %d, mul =%d\n", (*p) + *(p + 2) + *(p + 4), *(p + 1) * (*(p + 3)) * (*(p + 5)));
return 0;
}
2は意味がまったく分からない。
文字列配列ってのは文字配列の事か?普通に考えるとchar**になるが、それだともっと意味が分からない。
void myprintf(int n, char * string)
{
int len = strlen(string);
while(len--)putc(n);
}
ほい。(ほんとか?)
3.
void exchange(char *str1, char *str2)
{
char buff[7];
memcpy(buff, str1, 7);
memcpy(str1, str2, 7);
memcpy(str2, buff, 7);
}
0177デフォルトの名無しさん
2010/06/02(水) 23:22:41ありがとうございます
0179デフォルトの名無しさん
2010/06/03(木) 00:14:50おいそれC++じゃないとコンパイルエラーになるぞ
>>137の[3.3]にはCと書いてあるんだが
0180デフォルトの名無しさん
2010/06/03(木) 00:38:27コンパイラは何をお使いで?
0181デフォルトの名無しさん
2010/06/03(木) 00:46:26コンパイラは関係ない
int *p[2] = {a, b};
これがC++でしか通らない
Cなら
int *p[2];
p[0] = a;
p[1] = b;
と書かなければならない
0182デフォルトの名無しさん
2010/06/03(木) 00:48:00gccの拡張を当てにすんなよ
0183デフォルトの名無しさん
2010/06/03(木) 03:48:39VC2.0で通りますかね
おかしいですね。
gcc でも bcc32 でも cl でも駄目押しの lsi-c でも、コンパイルできましたが。
auto な配列への初期化は、最近の規格では OK ではないでしょうか。
0185デフォルトの名無しさん
2010/06/03(木) 05:38:310186デフォルトの名無しさん
2010/06/03(木) 08:22:26cppじゃなくてcにしてみるとか。
0187184
2010/06/03(木) 08:41:460188デフォルトの名無しさん
2010/06/03(木) 09:53:13勘違いしてるぞ
Cは初期化の時はもう値が決まっている定数ならば何でもよい
関数の戻り値だけがC++で拡張された
0189デフォルトの名無しさん
2010/06/03(木) 13:32:44なるほど、元のコードでは
static int a[] = { 0 };
static int b[] = { 0 };
int p[] = {a, b};
としてあり、 a, b, はコンパイル時には確定しているので auto な p への初期化は可能なんですね。
これを
int a[] = { 0 ];
int b[] = { 0 };
int p[] = {a, b};
とすると、a, b は実行するまではわからないから、コンパイルできないようですね。
0190デフォルトの名無しさん
2010/06/03(木) 13:58:50> int b[] = { 0 };
> int p[] = {a, b};
・・・。
int *p[] = {a, b}; じゃないのか?
0191デフォルトの名無しさん
2010/06/03(木) 14:44:11なんで神妙な感じでそこにつっこみいれたんだろ。
流れ見てたらそれはtypoだと予想できる
0192デフォルトの名無しさん
2010/06/03(木) 14:49:070193デフォルトの名無しさん
2010/06/03(木) 15:26:06そんな感じだね
C++ではコンパイルできてしまうから、Cでも出来ると思いがちだが
実は無理だという。
特に俺の場合staticは関数の呼び出し毎に値が変わって欲しくない
変数にしか付けないので、余計にエラーが出やすい。
0194デフォルトの名無しさん
2010/06/03(木) 16:40:460195デフォルトの名無しさん
2010/06/03(木) 18:26:30標準のCでは問題ない、ということですね。
0196デフォルトの名無しさん
2010/06/03(木) 18:32:19脊髄反射乙
付和雷同乙
0197デフォルトの名無しさん
2010/06/03(木) 21:28:400198デフォルトの名無しさん
2010/06/03(木) 21:30:270199デフォルトの名無しさん
2010/06/03(木) 21:36:02使いづらいならやめればいいじゃん
0200デフォルトの名無しさん
2010/06/03(木) 21:53:06経験値を得ることでモンペへと進化します
0201デフォルトの名無しさん
2010/06/03(木) 22:01:05テキストボックスの中の文字列に編集を加えようとすると必ず全部選択する。
オレは神経をつかってカレットが狙ったところに来るようにクリックしてるんだがな!
0202デフォルトの名無しさん
2010/06/03(木) 22:39:35コピーしたいのに全選択がめんどくさいというゆとりのための仕様だよ
っていうか、業務系だと日本でも多々ある、というか、そういう要望がでてくるよ
言われたことない?
0203デフォルトの名無しさん
2010/06/03(木) 23:39:04int main(void)
{
int array[5][4];
int i,j;
for(i=0;i<4;i++){
for(j=0;j<3;j++){
printf("%d行%d列の要素を入力してください: ", i+1, j+1);
scanf("%d", &array[i][j]);
array[i][3] += array[i][j];
array[4][j] += array[i][j];
}
}
0204デフォルトの名無しさん
2010/06/03(木) 23:42:10for(i=0; i<5; ++i){
for(j=0; j<4; ++j){
printf( "%5d ", array[i][j] );
while(i==5){
printf( "%5d ", array[i][3] );
i++;
while(j==4){
printf( "%5d ", array[4][j]);
j++;
}
}
}
printf( "\n" );
}
「4行3列の配列をキーボードから読み込み、
各行、各列の和、及び配列全体の総和を求め、表示する
プログラムを作成しなさい。」という問題です。
途中まで作りましたが、出力が↓のようになってしまいます。どうすればいいんでしょうか?
1 3 2 -858993454
4 5 6 -858993445
2 4 7 -858993447
11 13 15 -858993421
858993442 -858993435 -858993430 -858993460
0205デフォルトの名無しさん
2010/06/03(木) 23:47:25環境はvisual C++ です。
あさってまでに提出しなければなりません。
0206デフォルトの名無しさん
2010/06/03(木) 23:48:130207デフォルトの名無しさん
2010/06/03(木) 23:50:57配列範囲外とはどういうことでしょうか?
0208デフォルトの名無しさん
2010/06/03(木) 23:59:350209デフォルトの名無しさん
2010/06/04(金) 00:02:17どこが悪いんですか?修正の仕方を教えてもらえるとありがたいです。
0210デフォルトの名無しさん
2010/06/04(金) 00:09:590211デフォルトの名無しさん
2010/06/04(金) 00:11:50int array[5][4]={{0}};
0212デフォルトの名無しさん
2010/06/04(金) 00:27:30ありがとうございます。
おかげで総和以外は出力できました。
もう一つ、総和の計算と出力はどうすればいいんでしょうか?
0213デフォルトの名無しさん
2010/06/04(金) 00:31:09自分で作ってないからわかんないんだよ
文字列のクセで1個余分に、ってしたのかもしれないけどさ。
0214デフォルトの名無しさん
2010/06/04(金) 00:33:57array[4][j] += array[i][j];
0215デフォルトの名無しさん
2010/06/04(金) 06:37:13プログラムを全部作ってあげるスレだと思ってたけど、意外とみんな優しいんだね
0216デフォルトの名無しさん
2010/06/04(金) 07:01:02若い芽を摘むかのごとく、
全部教えて上げて、自分たちの食い扶持を維持するためのスレでもある。
0217デフォルトの名無しさん
2010/06/04(金) 08:40:05[2] 問題文(含コード&リンク):
下記のアップロードされたファイル(数字の羅列)を読み込み、並び替え方法(昇順/降順)で指定されたファイル(out.txt)
へ出力するプログラムを作成せよ
http://www1.axfc.net/uploader/He/so/280605
以下実行結果
並び替え方法をしていしてください(1:昇順、2:降順)
1
並び替えたファイルへ出力しました。
cat out.txt ←catコマンドで中身確認
1
3
3
3
[3] 環境
[3.1] OS:Win Vista
[3.2] コンパイラ名とバージョン:GCC
[3.3] 言語:C
[4] 期限:本日中
急で申し訳ないですがよろしくお願いします。
0218デフォルトの名無しさん
2010/06/04(金) 09:34:27死ぬほど足を引っ張ってくれるので成敗しておく
0219デフォルトの名無しさん
2010/06/04(金) 10:06:58http://codepad.org/kpLdySlN
ソートはしないけど、入力例に限定的な解法。
入力が、非負でかつ1000未満の整数のみを仮定。
tableでカウントするとき、nのチェックしてなかった。
0220デフォルトの名無しさん
2010/06/04(金) 10:09:56用語が適切か?
0221デフォルトの名無しさん
2010/06/04(金) 10:11:44頭を使わなくても解ける問題なら質問には来ない
すくなくとも回答ではない
0222デフォルトの名無しさん
2010/06/04(金) 10:17:20もとい文法やライブラリなどの制限があるから完全に自由ではない
のだがそれでも結果が殆ど同一(例えば数字だけとかキーワードだけ
とか)というわけではないんで解答とは言わないほうが良いよな...
だから>>221の言う通り回答というのもおかしい。
強いて言えば模範文例ってところなんだろな
0224デフォルトの名無しさん
2010/06/04(金) 10:43:33これはひどいw
0225デフォルトの名無しさん
2010/06/04(金) 10:46:470226デフォルトの名無しさん
2010/06/04(金) 11:00:030227デフォルトの名無しさん
2010/06/04(金) 11:22:22「間違っている」という文章があがることはあまりない
文法以外の明示的暗黙的問わず存在する構文制限や
課題の意図に沿った文章になっているかどうかについては
100%そうであるとも言えないのは当然だが
0228デフォルトの名無しさん
2010/06/04(金) 11:27:21>>219はコンパイルできるけど、「間違った」プログラムだぞ
0229デフォルトの名無しさん
2010/06/04(金) 12:18:36[2] 問題文(含コード&リンク):サンプルデータから情報を取りだしその情報をstudents.txtとして出力するプログラムを組め
Students.txtの例は以下の通り
1 tanaka A
2 sano B
3 hori C
[3] 環境
[3.1] OS:WindowsVista
[3.2] コンパイラ名とバージョン: Visual C++
[3.3] 言語:C++
[4] 期限: 2010年6月6日24:00
[5] その他の制限:
サンプルデータの形式はSqlite3、名前はstudents.sqlite3です。studentsテーブルを持ちそのテーブルはID(id)、学生の名前(name)、学生のクラス(class)を持っています。よろしくお願いします。
0231デフォルトの名無しさん
2010/06/04(金) 13:28:510232デフォルトの名無しさん
2010/06/04(金) 16:53:18模範とならないものなら?
参考文例とでも読み替えておけばよいのかなー
http://codepad.org/tSvtrgGL
>>225
そんなマナーがあるのですか?本当ですか?
間違っていたら、あるいは、間違っていなくても(>>143 に対する >>179, 結論は >>188)ネガティブな反応がありうることは覚悟しておくべきでしょう。
そのようなリスクが怖い弱虫なら回答しなければいいのです。
0234デフォルトの名無しさん
2010/06/04(金) 19:43:180235デフォルトの名無しさん
2010/06/04(金) 19:45:09返答できなくてすいませんでした。
おかげで完成させることができました。
ありがとうございます。
0236デフォルトの名無しさん
2010/06/04(金) 19:49:100237デフォルトの名無しさん
2010/06/04(金) 19:52:31いいと思います。
>>234
ほう、どこがまちがっているのですか?
0238デフォルトの名無しさん
2010/06/04(金) 19:54:160239デフォルトの名無しさん
2010/06/04(金) 19:54:24あんたは一生解答でけへんくせに、口だけは達者やなあ
0240デフォルトの名無しさん
2010/06/04(金) 20:23:47お前は今まで何回間違えたか覚えてないの?
0241デフォルトの名無しさん
2010/06/04(金) 20:28:20↓のように出力するにはどうすればいいでしょうか
1 4 5 10
4 5 6 15
5 8 7 20
10 10 10 30
20 27 28 75
0242デフォルトの名無しさん
2010/06/04(金) 20:30:07「行和、列和の前は少し空けるようにせよ」と書いてあります。
0243デフォルトの名無しさん
2010/06/04(金) 20:33:03for(i=0; i<5; ++i) {
if(i==4) printf("\n");
for(j=0; j<4; ++j) printf("%*d", j==3 ? 10 : 5, array[i][j]);
}
0244デフォルトの名無しさん
2010/06/04(金) 20:36:19for(i=0; i<5; i++) {
if(i==4) printf("\n");
for(j=0; j<4; j++) printf("%*d", j==3 ? 10 : 5, array[i][j]);
printf("\n");
}
0245デフォルトの名無しさん
2010/06/04(金) 20:40:55一つ聞いていい?
もしかして>>44=>>46もあなた?
0246デフォルトの名無しさん
2010/06/04(金) 20:47:20何回宿題を解答したか覚えていないのと同じくらいに覚えていません。
違います。
0248デフォルトの名無しさん
2010/06/04(金) 21:00:56あんなバカな読み違いをする人間が他にも回答者面してんのか。
0249デフォルトの名無しさん
2010/06/04(金) 21:10:47すいません。早速入力したんですが、↓のようになってしまいます。
5
4
5
14
6
4
3
13
5
6
7
18
6
5
5
16
22
19
20
61
0250デフォルトの名無しさん
2010/06/04(金) 21:12:29を間違えて
if(i=4)
にしてない?
0251デフォルトの名無しさん
2010/06/04(金) 21:15:04printf("%*d\n",...
ってしてない?
0252デフォルトの名無しさん
2010/06/04(金) 21:16:28アホか
0253デフォルトの名無しさん
2010/06/04(金) 21:25:58ごめん。よく見たら>>251の方があってそうだね。
0254デフォルトの名無しさん
2010/06/04(金) 21:26:35そのままコピペしたら出力できるんですが、{ で囲むとできなくなります。
0255250
2010/06/04(金) 21:29:38for(j=0; j<4; j++) printf("%*d", j==3 ? 10 : 5, array[i][j]);
printf("\n");
?
for(j=0; j<4; j++) {
printf("%*d", j==3 ? 10 : 5, array[i][j]);
printf("\n");
}
○
for(j=0; j<4; j++) {
printf("%*d", j==3 ? 10 : 5, array[i][j]);
}
printf("\n");
エスパーにはなかなかなれないもんだな
0256デフォルトの名無しさん
2010/06/04(金) 21:34:34ありがとうございます。
その通りでした。
0257デフォルトの名無しさん
2010/06/04(金) 22:13:12で、あなたが回答者になったのはどれですか?恥ずかしがらないで教えてくださいよ。
0258デフォルトの名無しさん
2010/06/04(金) 22:35:02[2] 問題文(含コード&リンク):
任意の文字列を二つ入力し、一つ目の文字列から二つ目の文字列を「全て」検索するプログラムを実装しなさい。
検索結果は、一つ目の文字列を0文字目から数えて、何文字目にあるかを答えるようにしなさい。以下に実行例を示す。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10648.txt
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C
[4] 期限:2010年6月7日まで
[5] その他の制限:特にありません。
よろしくお願いします。
0259デフォルトの名無しさん
2010/06/04(金) 22:38:420260デフォルトの名無しさん
2010/06/04(金) 22:38:52>>223 にも作ったのあるよ。この辺で言っとかないと。
0261デフォルトの名無しさん
2010/06/04(金) 22:47:570262デフォルトの名無しさん
2010/06/04(金) 22:52:31>>141
0263デフォルトの名無しさん
2010/06/04(金) 22:58:05#include<stdio.h>
#include<string.h>
int main(void)
{
char buf[256], keyword[256], *p, *q;
int start, end;
printf("文字列を入力してください。\n");
fgets(buf, sizeof(buf), stdin);
if((p=strchr(buf, '\n'))) *p='\0';
printf("検索文字列を入力してください。\n");
fgets(keyword, sizeof(keyword), stdin);
if((p=strchr(keyword, '\n'))) *p='\0';
printf("文字列「%s」は", keyword);
for(p=buf;(q=strstr(p, keyword));p=q+1)
{
start=q-buf;
end=start+strlen(keyword)-1;
printf("%d文字目から%d文字目に存在します。\n", start, end);
}
if(p==buf) printf("存在しません。\n");
return 0;
}
0264デフォルトの名無しさん
2010/06/04(金) 22:58:55問題文の意味(文法寄りか応用寄りかとかでも区別)を極力
的確に汲み取りその意図に出来るだけ沿った正しいC文を
模範作文として上げること だろなw
0265デフォルトの名無しさん
2010/06/04(金) 22:59:06http://codepad.org/g9L9SCFA
0266265
2010/06/04(金) 23:00:56「全て検索」に対応してない。
0267デフォルトの名無しさん
2010/06/04(金) 23:03:25つまり、こういうのは期待してない
http://codepad.org/7Eo4s7F6
>>262
がんばって中篇にも挑戦しましょう。
0269デフォルトの名無しさん
2010/06/04(金) 23:09:32お前が読みそこなったのを一例に挙げただけだぞw
0270デフォルトの名無しさん
2010/06/04(金) 23:11:33forの条件判断部に関数置くとか、最悪w
0271デフォルトの名無しさん
2010/06/04(金) 23:12:15へ?なぜ?
0272デフォルトの名無しさん
2010/06/04(金) 23:14:170273デフォルトの名無しさん
2010/06/04(金) 23:17:09それもそうですねえ。
strlen() をそのまま書いたほうがよみやすくないですか?
0274デフォルトの名無しさん
2010/06/04(金) 23:18:38>がんばって中篇にも挑戦しましょう。
こんなこと言ってると思うと笑えない
0275デフォルトの名無しさん
2010/06/04(金) 23:24:32ま、批判するのは簡単ですから。
0276デフォルトの名無しさん
2010/06/04(金) 23:28:01素直に
「for文の前に
len_p=strlen(p);
len_q=strlen(q);
とあらかじめ代入しておけばよかった。」と言えばいいじゃないか。
0277デフォルトの名無しさん
2010/06/04(金) 23:38:13その程度の基礎さえできてないアホが逆ギレするからウザいんだよw
http://codepad.org/n5bSwqxj
>>276
たしかに。大変失礼いたしました。
0279デフォルトの名無しさん
2010/06/04(金) 23:43:200280デフォルトの名無しさん
2010/06/04(金) 23:46:43いや、それなおさなくていいよ。
他は見てないけど、少なくともそこの部分に関しては修正しなくていい。
心配なら速度を測ればよいよ。もしくはアセンブリを参照。
>>272は基礎はできてるのかもしれないけど、そこから先の知識をまだ持ってないみたい。
0281デフォルトの名無しさん
2010/06/04(金) 23:47:410282280
2010/06/04(金) 23:48:07修正するかどうかはその後判断すればいいので、今そこを直すべきじゃないということ。
0283デフォルトの名無しさん
2010/06/04(金) 23:49:23横レスすまん。
strlenは消えないが、ループの外に出すことは十分期待していいんじゃないかな
0284デフォルトの名無しさん
2010/06/04(金) 23:50:29[2] 問題文:全30件の成績(0〜100点)をキーボードから
読み込み、0〜9点, 10〜19点,・・・, 90〜99点, 100点 の
11通りの区間にそれぞれ何人が入るかを調べなさい。
ただし、各区間に入る人数を溜めておく入れ物として
配列を利用すること。更に調べた人数に従って、各区間を
ヒストグラムで表しなさい。
0点:***
10点:*****
20点:****
・
・
100点:*
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C++
[4] 期限:2010年6月7日まで
0285デフォルトの名無しさん
2010/06/04(金) 23:57:48[3.2] コンパイラ名とバージョン: Visual C++
0286デフォルトの名無しさん
2010/06/05(土) 00:02:48#include <iostream>
void main() {
int histogram[11] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
int score;
for (int i = 0; i < 30; ++i) {
score = 0;
do {
std::cout << "成績を入力しろ(0〜100)" << std::endl;
std::cin >> score;
} while (score < 0 || 100 < score);
++histogram[score / 10];
}
for (int i = 0; i < 11; ++i) {
std::cout << i * 10 << "点:";
for (int j = 0; j < histogram[i]; ++j) {
std::cout << "*";
}
std::cout << std::endl;
}
}
0287デフォルトの名無しさん
2010/06/05(土) 00:11:56void main() (笑)
0288デフォルトの名無しさん
2010/06/05(土) 00:15:290289デフォルトの名無しさん
2010/06/05(土) 00:16:320290デフォルトの名無しさん
2010/06/05(土) 00:18:52もっといいコンパイラなら strlen() を外にだしてくれるかもしれませんが、私の gcc 3.3.4 や bcc 5.5.1 では -O2 にしても
アセンブラリストを見る限りは、strlen() はループの中のままのようです。
そこから先の知識をもっていないのは私も一緒でしょう。
とにかく、しばらくこちらで今までのように鍛えていただくことにしました。
フォローありがとうございました。
0291デフォルトの名無しさん
2010/06/05(土) 00:22:230292デフォルトの名無しさん
2010/06/05(土) 00:24:27strlen くらい残しても問題ないだろうに
余計なことするのが好きなんだな
0293デフォルトの名無しさん
2010/06/05(土) 00:27:08その長さをまたstrlen()で求めるのは無意味で無駄。
そんな無駄を許せる人間がプログラムをしてることが驚きだよw
http://codepad.org/IiGMyIU6
指摘を受けた部分を改良いたしました。
0295デフォルトの名無しさん
2010/06/05(土) 01:14:000点:***
10点:*****
20点:****
・
・
100点:*
0296デフォルトの名無しさん
2010/06/05(土) 03:05:02なんでメモリリークの可能性は許しちゃうの?
速度よりもそっちの方が大事だろ普通。
メモリリークを許せる人間がプログラムをしてるなんて心配になるよw
0297デフォルトの名無しさん
2010/06/05(土) 03:21:380298デフォルトの名無しさん
2010/06/05(土) 04:43:150299デフォルトの名無しさん
2010/06/05(土) 11:32:53状況依存としか言いようが無いです
推敲され過ぎてバグも無駄や文書としての矛盾も無い
状態が教育上好ましいかどうかは一概に言い切れま
せん
ただしその逆が問題になるのは、ネット環境でそれが
容易に複製され大量流布になり得るという観点からの
みです。
0300デフォルトの名無しさん
2010/06/05(土) 11:46:100301デフォルトの名無しさん
2010/06/05(土) 11:55:55ナルシスティは小さいかもな
0302デフォルトの名無しさん
2010/06/05(土) 12:29:36どうせこのスレでいい例を見せたって理解できるはずないだろ
0303デフォルトの名無しさん
2010/06/05(土) 12:46:11core dumped.
malloc()/realloc()/free() のラッパを書いて確認してみました。
http://codepad.org/5lqkATcO
ただ、ラッパ自身も malloc() / free() を使っているので、これが正しいかどうかを検証する方法がわからない。
ラッパのラッパを書くしかないのか‥‥‥。
0305デフォルトの名無しさん
2010/06/05(土) 18:10:54宿題を丸投げする人は、このスレのお客様。
むしろコード書く人、そのコードを読む人が主人公かなあ。
さらしたコードを叩くな、という人がいますが、むしろコードを読んで叩いてくれる人がいるからこそ、書きがいがあるというものです。
0306デフォルトの名無しさん
2010/06/05(土) 18:19:29ありがたいもんだよな。
変にプライドの高い人は逆ギレしちゃうけど。
0307デフォルトの名無しさん
2010/06/05(土) 18:29:51コードさらす人は、意識していないかもしれませんが、そのプライドを自分で潰しに来ている、といっていいわけですから、コードをかかない人よりよっぽどましかと。
0308デフォルトの名無しさん
2010/06/05(土) 18:42:20所詮、暇つぶしなんで、波風立たない方が嬉しいにこしたことはない。
ここ100レス余りの流れで宿題がこないから、
mixiの宿題コミュまで覗っちゃったじゃないか!
0309デフォルトの名無しさん
2010/06/05(土) 18:45:230310デフォルトの名無しさん
2010/06/05(土) 18:55:13mixiのあのコミュはなにかしら投稿するとsock(ryとかいう人に叩かれるw
0311デフォルトの名無しさん
2010/06/05(土) 18:55:52いいからお前はトリップを全部の発言につけろw
0312デフォルトの名無しさん
2010/06/05(土) 19:23:23ラッパがバグってるっぽい
0313デフォルトの名無しさん
2010/06/05(土) 19:25:49そのまま提出した学生がその後どうなったのか気になるところだが。
0314デフォルトの名無しさん
2010/06/05(土) 19:28:52他人をむやみに信用することの愚かさを痛感し、
自分で判断できる力を身につけようと努力し、偉人になったとか。
0315デフォルトの名無しさん
2010/06/05(土) 19:39:53そこで少し変えたんですが、なんか違うようです。
0316デフォルトの名無しさん
2010/06/05(土) 19:40:36main(void)
{
int test[11] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
int i,j;
int score;
for (i=0;i<30;i++) {
score = 0;
do {
printf("成績を入力しろ");
scanf("%d",&score);
} while (score < 0 || 100 < score);
test[score / 10]++;
}
0317デフォルトの名無しさん
2010/06/05(土) 19:42:10printf("点:");
for (j=0; j<test[i];j++) {
printf("*");
}
}
return 0;
}
0318デフォルトの名無しさん
2010/06/05(土) 19:57:10#pragma warning(disable:4996) // これを追加する
#include<stdio.h>
main(void)
{
0319デフォルトの名無しさん
2010/06/05(土) 20:05:190320デフォルトの名無しさん
2010/06/05(土) 20:07:14ありがとうございます。
0321デフォルトの名無しさん
2010/06/05(土) 20:17:04問題文に「0〜9点, ・・・, 90〜99点, 100点」と書いてありました。
大変申し訳ないです。
0〜9点:***
・
・
・
100点:** とするには、どう手を加えればいいのですか?
0322デフォルトの名無しさん
2010/06/05(土) 20:19:11[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10649.txt
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 無期限
0323デフォルトの名無しさん
2010/06/05(土) 20:21:51for(i=0; i<11; i++) {
if(i==10) printf("100点:");
else printf("%d〜%d点:", i * 10 + i * 10 + 9);
0324デフォルトの名無しさん
2010/06/05(土) 20:25:11「printf("点:");」→「if (i == 10) { printf("100点:"); } else {printf("%d〜%d", i*10, i*10+9);}」
0325デフォルトの名無しさん
2010/06/05(土) 20:28:092-A:char**
2-B:char[][MAXLENGTH]
2-C:char**day
2-D:char day[][MAXLENGTH]
0326デフォルトの名無しさん
2010/06/05(土) 20:31:07ありがとうございます。
何度もすいませんでした。
ご指摘感謝。free() のラッパがバグっていました。最後のひとつを開放するときにリンクをはずせていなかった。
http://codepad.org/91IVlXJH
0328デフォルトの名無しさん
2010/06/05(土) 22:26:34ありがとうございます。
0329デフォルトの名無しさん
2010/06/05(土) 22:33:28例えば
3←入力
+←入力
4←入力
−←入力
・←入力
・
・
=
(計算結果)
0330329
2010/06/05(土) 22:36:29int main(void){
int a,b;
char c;
while(a != '='){
scanf("%d",&a);
scanf("%c",&c);
if (c = '+')b += a;
else b -= a;
}
}
うまくいきません。
0331デフォルトの名無しさん
2010/06/05(土) 22:56:11http://ideone.com/PMcBO
逆ポーランド 電卓とかでググってみてくれ
0332329
2010/06/05(土) 22:58:00そんな難しいのじゃなくていいです・・
とりあえずwhileとか使って
数字入力 演算子入力 数字入力・・・・=答え
みたいなのが作りたい。
0333デフォルトの名無しさん
2010/06/05(土) 23:51:350334デフォルトの名無しさん
2010/06/05(土) 23:55:00こんなんでどう?
http://codepad.org/b68KtrqB
0335デフォルトの名無しさん
2010/06/06(日) 00:04:36int main(void){
int a=0, b=0, plus=1;
char buf[80];
while(buf[0] != '='){
// fgets(buf,100,stdin);
gets(buf);
if(buf[0] == '+'){
plus = 1;
b = a;
}
else if(buf[0] == '-'){
plus = -1;
b = a;
}
else
sscanf(buf, "%d", &a);
}
b = b + plus * a;
printf("ans=%d\n", b);
}
/*
3
-
6
=
ans=-3
*/
0337デフォルトの名無しさん
2010/06/06(日) 01:34:19アイデアはあるけどオツムがないからどうしようもなく放置したまま早1年。
発注するから誰か受注して って頼みたいんだけど?
0338デフォルトの名無しさん
2010/06/06(日) 01:53:31http://pc12.2ch.net/test/read.cgi/software/1251624598/l50
なんてどう?
0339デフォルトの名無しさん
2010/06/06(日) 02:09:420341デフォルトの名無しさん
2010/06/06(日) 10:39:09#include <stdio.h>
int main(void)
{
char a[256], b[256];
int i, j, flg = 0;
printf("文字列を入力してください。");
scanf("%s", a);
printf("検索文字列を入力してください。");
scanf("%s", b);
printf("文字列「%s」は", b);
for(i=0; a[i]; i++) {
for(j=0; b[j]; j++) if(a[i+j]!=b[j]) break;
if(b[j]=='\0') {
if(flg++) printf(",");
printf("%d文字目から%d文字目", i, i + j - 1);
}}
printf("%s\n", flg ? "に存在します" : "は存在しません");
return 0;
}
0342デフォルトの名無しさん
2010/06/06(日) 10:45:21折角書いたけど>>341の方がスマートでくやしい
#include <stdio.h>
int main()
{
char str[256], search[256];
int strIdx = 0, searchIdx = 0, found = 0;
printf("文字列を入力してください。\n");
scanf("%s", str);
printf("検索文字列を入力してください。\n");
scanf("%s", search);
while(str[strIdx]){
if(str[strIdx] == search[searchIdx]){
found = strIdx + 1;
while(search[++searchIdx]){
if(str[++strIdx] != search[searchIdx]){
found = 0;
break;
}
}
if(found) break;
}
++strIdx;
}
if(found == 0) printf("文字列「%s」は存在しません。\n",search);
else printf("文字列「%s」は%d文字目から%d文字目に存在します。\n",search, (found - 2), (found - 2) + (searchIdx-1));
}
0343デフォルトの名無しさん
2010/06/06(日) 10:47:15ちゃんとつくると難しいです。たとえばこんな感じになります。
http://codepad.org/ODg132aP
0345デフォルトの名無しさん
2010/06/06(日) 16:10:45はダメなのでしょうか?
>>344
ちゃんとつくらなくても>>336のプログラムの中身がすでに
理解できないんですが・・・>>336より簡単にできないんですか?
どんなプログラムも付け足せば何とかなるんですよね。
buf[]とstdin, fgetsなど全く意味がわかりません。
一応プログラム自体実行したら正しくいきます。
ただ宿題なので、今まで習ったことでやるしかないんです。
一応C言語です。
0346デフォルトの名無しさん
2010/06/06(日) 16:15:25そういうのは最初に全部テンプレ使って言え
0347デフォルトの名無しさん
2010/06/06(日) 16:23:51#include<stdio.h>
int main(void){
int a,b = 0;
char c=' ';
while(c != '='){
scanf("%d",&a);
scanf("%c",&c);
if (c == '+')b += a;
else b -= a;
}
}
これでどうだ
0348デフォルトの名無しさん
2010/06/06(日) 16:25:40ちがった
#include<stdio.h>
int main(void){
int a,b = 0;
char c=' ';
while(c != '='){
scanf("%d",&a);
scanf("%c",&c);
if (c == '+')b += a;
else if(c == '-')b -= a;
}
printf("%d\n", b);
}
こうかな。
0349デフォルトの名無しさん
2010/06/06(日) 16:41:121.while(a != '=')となっている点。
aは数字だろ?演算子はcに入れたいんだろ?だからwhile(c!='=')が正しい。
2.if(c='-')となっている点。
=は代入。比較なら==を使う。たまに見かけるバグだな。
3.int a,b;となっていて、bを初期化していない点。
bに結果を入れたいのだろうが、最初に0で初期化していない。
初期化しないと値は不定。何が入ってるか分からないというわけ。
つまりコンパイラとしてはbに最初から0xCDCDCDCDを入れておいても仕様違反ではないというわけだ。
vc++のデバッグビルドならそうなる。
そこにプラスマイナスしても正しくならないよな。
4.else b-=a;となっている点。
これだと'='が来たときも引き算してしまう。だからese if(c=='-')にしないといけない。
5.whileに最初に入った時点でcは不定。
だから万が一cが'='だったらすぐ抜けてしまう。ここでは' 'を入れておけば絶対に問題が起きないのでおk。
現実問題として、滅多に起きないが、社会にでたらこれは立派なバグとして扱われるぞ。
0350デフォルトの名無しさん
2010/06/06(日) 16:42:020351デフォルトの名無しさん
2010/06/06(日) 16:53:450352デフォルトの名無しさん
2010/06/06(日) 16:55:4912+12=0…
0353デフォルトの名無しさん
2010/06/06(日) 16:58:450354デフォルトの名無しさん
2010/06/06(日) 17:01:25char c=0;
scanf("%d%*c",&b);
while(scanf("%c%*c",&c) && c != '='){
scanf("%d%*c",&a);
if (c == '+')b += a;
else if(c == '-') b -= a;
else ;
}
printf("%d\n",b);
それを修正してとなると↑のようになる(scanf削って縮めたいんだが、俺には限界)
0355349
2010/06/06(日) 17:03:34実際に動かしてみたら色々問題がまだあるね
scanf("%c", &c);は改行コードを拾ってしまうな。
0357デフォルトの名無しさん
2010/06/06(日) 18:56:00命がけ、というのであれば、それを見せてほしいですね。現状では伝わってこないんです。
03584
2010/06/06(日) 18:58:23優しすぎ、ありす。
まじで感謝してる。プログラミングの単位たぶん落とすと思うけど
2学期には間に合うようにするわ。
0359デフォルトの名無しさん
2010/06/06(日) 19:02:36もっと簡単で寛容なC言語はないんかね。
0360デフォルトの名無しさん
2010/06/06(日) 19:03:51ちょっと上の方でコテが散々やっつけられていたのを見ましたか?
簡単で寛容な、というのは期待しないほうがいいかと。
0362デフォルトの名無しさん
2010/06/06(日) 20:20:28AviUtlという画像編集・エンコソフトを使っているですが、
そのソフト用にNL-Means Filterというものが出ています。
ですがそのフィルターを使うとソフトがフリーズしてしまいます。なんとか解決できませんか?
症状としては、そのフィルターをオンにすると、AviUtlを終了しようとした時にフリーズします。
GPU支援を使う、計算モード3のときのみ起こります。お願い致します
http://kishibe.dyndns.tv/index.php?%E3%83%95%E3%83%AA%E3%83%BC%E3%82%BD%E3%83%95%E3%83%88%2FNL-Means%20filter
からダウンロードするとソースらしきものもついてきます
0363デフォルトの名無しさん
2010/06/06(日) 20:56:36[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10650.txt
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C
[4] 期限: 2010年6/8まで
[5] その他の制限:なし
2問ありますが、よろしくお願いします。
0364デフォルトの名無しさん
2010/06/06(日) 21:06:03<課題2>
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int i, j, k, n;
double *x, temp;
scanf("%d", &n);
x = malloc(n * sizeof(double));
for(i=0; i<n; i++) scanf("%lf", x + i);
for(i=n-1; i; i=k) {
for(j=k=0; j<i; j++) {
if(x[j] > x[j+1]) {
temp = x[j];
x[j] = x[j+1];
x[j+1] = temp;
k = j;
}}}
for(i=0; i<n; i++) printf("%f\n", x[i]);
free(x);
return 0;
}
0365デフォルトの名無しさん
2010/06/06(日) 21:30:33<課題1>
http://codepad.org/i9GSGdcP
0367デフォルトの名無しさん
2010/06/06(日) 21:44:360368デフォルトの名無しさん
2010/06/06(日) 21:45:38どうぞどうぞ突っ込んでくださいな。楽しみにしています。
0369デフォルトの名無しさん
2010/06/06(日) 21:48:51ソート部分がクソ
0370デフォルトの名無しさん
2010/06/06(日) 21:55:59ありがとうございます
0371デフォルトの名無しさん
2010/06/06(日) 21:56:082番目の課題を訂正します。
http://codepad.org/qgboBPOZ
>>369
普通のバブルソートですが、何か問題でも?
0372デフォルトの名無しさん
2010/06/06(日) 21:57:510373デフォルトの名無しさん
2010/06/06(日) 22:02:21あれ?私は http://en.wikipedia.org/wiki/Bubble_sort を参照したんですけれどもね。
0374デフォルトの名無しさん
2010/06/06(日) 22:09:350375デフォルトの名無しさん
2010/06/06(日) 22:10:08バブルソートは
for(j=0;j<n-1;j++){
for (i = 0; i < n - 1; i++) {
if (x[i] > x[i + 1]) {
t = x[i];
x[i] = x[i + 1];
x[i + 1] = t;
}
}
}
だろ。わざわざdo{} while()にしても比較回数が減ることはない。
0376デフォルトの名無しさん
2010/06/06(日) 22:16:38だから全部読めって前も言ったよな?
Optimizing bubble sortのところで何でn := newn + 1ってなってると思ってるんだ?
0377デフォルトの名無しさん
2010/06/06(日) 22:17:08そうですよね。>>375 であげていただいたやり方もバブルソートといいますよね。
でも >>372 はお気に召さないようなんですよ。
確かに日本語版 wiki やドイツ語 wiki では、幾分効率をあげたものが採用されているようですが、
どうオプティマイズしても計算オーダーはΟ(n^2) で変わらないのですけれども、>>372 は計算オーダーの概念がよくわかっていないらしい。
http://pc12.2ch.net/test/read.cgi/tech/1269438098/706 のように、ある一種のバブルソートの実装にこだわっているんです。
0378デフォルトの名無しさん
2010/06/06(日) 22:18:14Optimizing のところでは、長さを縮めていますが、そうでない実装も、やっぱり bubble sort でしょう?
0379デフォルトの名無しさん
2010/06/06(日) 22:21:350380デフォルトの名無しさん
2010/06/06(日) 22:24:12英語版 wiki にのっている実装もバブルソート、 >>375 のやりかたもバブルソートなんですよ。無論私のもバブルソート。
0381デフォルトの名無しさん
2010/06/06(日) 22:42:150382デフォルトの名無しさん
2010/06/06(日) 22:48:20実務経験があるようには見えないし、頭堅いのにプライドだけは高いし。
今は助教というのですよ。現在の大学教員の序列を知らないところから見ると、高校生かな?
0384デフォルトの名無しさん
2010/06/06(日) 23:21:280385デフォルトの名無しさん
2010/06/06(日) 23:29:080386デフォルトの名無しさん
2010/06/06(日) 23:29:24なんで自分より下しか想像できないんだろうw
0387デフォルトの名無しさん
2010/06/06(日) 23:31:46もっと広い感覚で物事を理解することです。
0388デフォルトの名無しさん
2010/06/06(日) 23:32:520389デフォルトの名無しさん
2010/06/06(日) 23:35:12日本語の読めなさはやばいってレベルじゃねーだろw
0390デフォルトの名無しさん
2010/06/06(日) 23:35:43その他いろいろなソートでもつまづきますよ。これらの理論では計算オーダーが重要ですからよく勉強しておくことです。
0391デフォルトの名無しさん
2010/06/06(日) 23:39:510392デフォルトの名無しさん
2010/06/06(日) 23:40:02で講師だろうといっていたくせに、
>>389
で院生くらいだとおもっていた、
とは随分とおっしゃることがころころかわるのですね。日本語が読める読めないというより、日本語を使って思考できないのではないですか?
0393デフォルトの名無しさん
2010/06/06(日) 23:40:320394デフォルトの名無しさん
2010/06/06(日) 23:40:43計算オーダーを理解していないようですからね。
0395デフォルトの名無しさん
2010/06/06(日) 23:54:27流石に無理ですかね・・・
0396デフォルトの名無しさん
2010/06/06(日) 23:55:50スレ違いな上に、金取るぞってレベルの話なんだがw
0397デフォルトの名無しさん
2010/06/06(日) 23:57:10無理に決まってるだろw
0398デフォルトの名無しさん
2010/06/06(日) 23:57:21じゃあだめもとで他当たってきます
ありがとうございました
0399デフォルトの名無しさん
2010/06/06(日) 23:58:06作者に直接言ってみれば
もちろん、単にエラーが出るとだけ。
ttp://twitter.com/_kenkun
0400デフォルトの名無しさん
2010/06/06(日) 23:59:34フィルタのソースはAviUtilの作者とは違うだろ。
0401デフォルトの名無しさん
2010/06/07(月) 00:00:30いや、AviUtlに問題があるわけではなくて
このフィルタに問題があるんですよね
フィルタの作者はAviUtlの作者ではないんで・・
でももしかしたらAviUtl側でなんとかできるかもしれませんね
ありがとうございます。
0402デフォルトの名無しさん
2010/06/07(月) 00:01:580403デフォルトの名無しさん
2010/06/07(月) 00:18:460404デフォルトの名無しさん
2010/06/07(月) 00:19:120405デフォルトの名無しさん
2010/06/07(月) 02:09:080406デフォルトの名無しさん
2010/06/07(月) 04:04:490407デフォルトの名無しさん
2010/06/07(月) 06:55:320408デフォルトの名無しさん
2010/06/07(月) 12:38:44せっかちだなぁ
0409デフォルトの名無しさん
2010/06/07(月) 19:02:23んじゃ、そのあんたのレスを英語で頼む
0410デフォルトの名無しさん
2010/06/07(月) 19:09:190411デフォルトの名無しさん
2010/06/07(月) 20:02:34そうでない場合はunknown month と出力されるプログラム作りで困ってます。
入力例
3
5
13
11
出力例
March
May
unknown month
November
ヒントでは、
char *month_name(int n)を書き入れる事
month_name(6)はJuneである事
static char *months[] = { "January","February","March",
"April","May","June",
"July","August","September",
"October","November","December"};
を用いる事が書かれてます。
暇な人が居たらお願いします。
0412デフォルトの名無しさん
2010/06/07(月) 20:16:30char *month_name(int n)
{
if (n < 1 || 12 < n) {
return "unknown month";
}
return months[n-1];
}
0413デフォルトの名無しさん
2010/06/07(月) 20:20:270414デフォルトの名無しさん
2010/06/07(月) 20:24:160415デフォルトの名無しさん
2010/06/07(月) 21:12:44#include <stdio.h>
static char *months[] = { "January","February","March",
"April","May","June",
"July","August","September",
"October","November","December"};
int main(void)
{
int n;
char *month_name(int n)
{if (n < 1 || 12 < n) {
return "unknown month";
}return months[n-1];
}
scanf("&lf",&n);
printf("%s",*months);
return(0);
}
これでやるとどんな数字入れても出力がJanuaryになってしまうのですが、
どこらへんを変えればいいでしょうか?
0416デフォルトの名無しさん
2010/06/07(月) 21:14:17&lf ってなんだよ
0417デフォルトの名無しさん
2010/06/07(月) 21:15:400418デフォルトの名無しさん
2010/06/07(月) 21:18:190419デフォルトの名無しさん
2010/06/07(月) 21:21:46なんという残念な使い方w
0420デフォルトの名無しさん
2010/06/07(月) 21:24:05http://ideone.com/kEyhc
scanf("&lf",&n);
printf("%s",*months); の一連の流れをおかしいと思わなかったのはまずい
0421デフォルトの名無しさん
2010/06/07(月) 21:31:08*months入れるのは思いつきませんでした…orz
0422デフォルトの名無しさん
2010/06/07(月) 21:37:19慣れ、馴れ。数書くうちに体にしみこむ。
0423デフォルトの名無しさん
2010/06/07(月) 22:08:57関数を呼ばなくていいんじゃなかろうか。
04249
2010/06/07(月) 22:11:27[1] 授業単元:C言語課題
[2] 問題文(含コード&リンク):2つの正の整数(aとb)の最大公約数をユークリッドの互除法を用いて表示するプログラムを作成せよ。ただし、0<b≦a≦32767とする。
≪ユークリッドの互除法≫
ユークリッドの互除法による最大公約数(GREATEST COMMON DIVISOR:GCD)は、次のように求める。
�@2数(aとb)の中で大きい値をl、小さい値をmとする。
�Alをmで割り、あまりをrとする。
r=0ならば、mが最大公約数となる。
r≠0(0<r<m)ならばl←m、m←r として再び�Aの処理を行う。
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン:main.c Visual Studio 2008
[3.3] 言語:C++
[4] 期限:2010年6月18日17:00まで
[5] その他の制限:(まだ本当に初心者なので)do文やif文、for文まで習いました。
期限までは時間がありますが…宜しくお願いしますm(_ _)m
0425デフォルトの名無しさん
2010/06/07(月) 22:29:12int main()
{
int a, b, r;
std::cin >> a >> b;
while(r = a % b) a = b, b = r;
std::cout << b;
}
0426デフォルトの名無しさん
2010/06/07(月) 23:09:24逆にその関数として、不正な値が渡された時はどういう挙動にしようか
0427デフォルトの名無しさん
2010/06/07(月) 23:10:21printf("%d,", i );
}
これで出力したら
1,2,3,4,5,
みたいに最後にもカンマがついちゃうんでfor文の外側に
printf("\b\n");
を付け加えたんだけどうまく最後のカンマが消えません
その理由とどうすればいいのか教えてください
0428デフォルトの名無しさん
2010/06/07(月) 23:21:48スペースで上書きする必要がある
printf("\b \n");
0429デフォルトの名無しさん
2010/06/07(月) 23:23:30�d
0430デフォルトの名無しさん
2010/06/07(月) 23:25:03端末側がバックスペースをサポートしていない、と思われる。
仕方がないから、
#include <stdio.h>
#define N 5
int main()
{
int i;
for (i = 1; i <= N - 1; i++)
printf("%d, ", i);
printf("%d\n", i);
return 0;
}
でごまかすしかない。
0431430
2010/06/07(月) 23:29:20そのような手があったんですね。これでうまくいきました。(cygwin)
#include <stdio.h>
#define N 5
int main()
{
int i;
for (i = 0; i < N; i++)
printf("%d, ", i);
printf("\b\b \n");
return 0;
}
0432デフォルトの名無しさん
2010/06/07(月) 23:32:36#pragma warning(disable:4996)
#include <stdio.h>
int main(void){
int a, b, l, m, r;
printf("整数 a と b を入力して下さい > ");
scanf("%d %d", &a, &b);
if(a>b) l=a, m=b; else l=b, m=a;
while(r = l % m) l=m, m=r;
printf("GCD = %d", m);
}
0433デフォルトの名無しさん
2010/06/07(月) 23:46:04#include <stdio.h>
char *month_name(int n){
static char *months[]={"January","February","March",
"April","May","June","July","August","Septmber",
"October","November","December"};
return months[n-1];}
int main(void)
{
int n;
scanf("%d",&n);
if (n<1||n>12)printf("unkown month\n");
else printf("%s\n",month_name(n));
return 0;
}
不正な値が行く場合がわかりませんので教えて下さい。
0435デフォルトの名無しさん
2010/06/07(月) 23:55:120436デフォルトの名無しさん
2010/06/07(月) 23:55:25関数をライブラリとして提供した場合に、使う側に対して値チェックを強制するべきか、
それとも不正な値を渡された場合にunknown monthを返却する仕様とするのかという話。
で、使用者に対して値チェックを強制した場合、使用者の不手際により
不正な値が渡されることを考慮しなければならない。
その際、メモリアクセス違反で落ちるライブラリでよしとするのか?ということ。
例外機構があれば例外を投げるのも手だけれど、Cではどうするのか。
型をboolにし、out引数を追加するのもありだよね。
でも今回はプロトタイプが指定されている。
その上での考えを教えてほしい。
0437デフォルトの名無しさん
2010/06/07(月) 23:57:16結局関数の中で範囲チェックすることになるけど。
0438デフォルトの名無しさん
2010/06/07(月) 23:58:00これstatic消したら関数抜けた時に戻り値のアドレスが破棄されるんじゃないの?
0439デフォルトの名無しさん
2010/06/08(火) 00:00:30リテラルのアドレスが返るから問題ない
0440デフォルトの名無しさん
2010/06/08(火) 00:11:50sizeof(months) == sizeof(char *) * 12
0441デフォルトの名無しさん
2010/06/08(火) 00:16:14[2] 問題文(含コード&リンク):
次の連立一次方程式をガウスザイデル法とSOR法で解け
{2 , -1 , 0} {x1} {-1}
{-1 , 2 , -1} * {x2} = {2}
{0 , -1 , 2} {x3} {1}
なお、反復回数を20、x1-3の初期値x1-3^0を0、SOR法の・をそれぞれ1.2と1.5で計算せよ。
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 本日中、出来ればお昼までにお願いします。
0442デフォルトの名無しさん
2010/06/08(火) 00:20:40要するに、予約語staticをつけなくとも、
monthsはその各々の要素が文字列リテラルの先頭へのポインタであるから
静的領域に確保されると。
0443デフォルトの名無しさん
2010/06/08(火) 00:27:51そうでなくても、いちいち呼ばれるたびに確保するような処理系なさそうだけどさ。
0444デフォルトの名無しさん
2010/06/08(火) 00:35:16いろいろとありがとうございました。
今回は不正な値を渡された場合にunknown monthを返却する仕様のつもりです。
使用者に対しての値チェックのやり方はどれがいいかまだよくわかりません。
難しいですね。
0445デフォルトの名無しさん
2010/06/08(火) 00:58:11文字列リテラルがstatic const char[]か?ならYes 6.4.5 文字列リテラル
文字列リテラルを指すポインタ非可変長配列がstaticか?ならchar const * const []であってもNo 6.2.4 オブジェクトの記憶域期間
0446デフォルトの名無しさん
2010/06/08(火) 01:03:04横レスだけど
months自体は自動変数だから、スタックに置かれるよ。関数が返しているのは
スタック変数を指すポインタではなく、静的領域に置かれている文字列リテラルの
ポインタ。
0448デフォルトの名無しさん
2010/06/08(火) 08:57:28[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10651.txt
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C
[4] 期限:6月9日12時まで
[5] その他の制限:
libstation.aが無いのでやりずらいかもしれませんが、形だけでもお願いします。
0449デフォルトの名無しさん
2010/06/08(火) 10:20:420450デフォルトの名無しさん
2010/06/08(火) 10:44:00とりあえずガウスザイデル法のみ
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10652.txt
0451デフォルトの名無しさん
2010/06/08(火) 11:08:42SOR法
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10653.txt
0452デフォルトの名無しさん
2010/06/08(火) 12:04:27ありがとうございます。
0453デフォルトの名無しさん
2010/06/08(火) 13:17:45[1] 授業単元: 上級プログラミング
[2] 問題文(含コード&リンク):
1、VisualC++2008のWindowsフォームアプリケーションのプロジェクトを作成し、DataGridViewを作成なさい。列は
A,B,C の3列とする。
2、列Aに入力された4桁の数値を日付形式に変換し表示する様にしなさい(○月○日)。
3、sample.txtの内容を読み取り、その内容を使って列Bにオートコンプリートを実装しなさい。
sample.txtの内容は
あいうえお
abcde
12345
と言う様に、1行に1単語とする。
[3] 環境
[3.1] OS: Windows
[3.2] VC++2008
[3.3] 言語: C/C++
[4] 期限: 6/12
[5] その他の制限:とくに制限はありません
1はできますが2以降がよくわかりません。
2はプロパティでCellStyleを設定しましたが動いてくれませんでした。
3は調べてみたのですが、C++での実装はのっていなかったので・・・
よろしくお願いします。
0454デフォルトの名無しさん
2010/06/08(火) 13:21:570455デフォルトの名無しさん
2010/06/08(火) 13:43:20適当に見繕ってttp://codepad.org/Hzoa3JtQ
0456デフォルトの名無しさん
2010/06/08(火) 14:00:14int型配列 x[101] を定義し、キーボードから人数 N と N 人分の点数を入力し、平均点と
偏差値を計算し、結果を画面に出力するプログラムを作成せよ。
◆ 条件
人数 N に負の値や101以上の値が入力されたときには、再入力するものとす
る。
点数 x[i] に負の値や100点を超える値が入力されたときには、再入力する
ものとする。
◆ 偏差値 Ti の計算式
10( xi )
Ti 50
ただし
N
1
x
i
N i 1
N
1
(x
)2
i
N i 1
ここに、N :データの数 xi :個々の点数 μ:平均 σx:標準偏差
0457デフォルトの名無しさん
2010/06/08(火) 14:01:04Input N (0<N<101):0 ← 入力エラー
Input N (0<N<101):5
Input x[1] (0<=x<=100):200 ← 入力エラー
Input x[1] (0<=x<=100):30
Input x[2] (0<=x<=100):50
Input x[3] (0<=x<=100):-1 ← 入力エラー
Input x[3] (0<=x<=100):60
Input x[4] (0<=x<=100):80
Input x[5] (0<=x<=100):90
平均点 62.0
No. 1 点数 30 偏差値 35.0
No. 2 点数 50 偏差値 44.4
No. 3 点数 60 偏差値 49.1
No. 4 点数 80 偏差値 58.4
No. 5 点数 90 偏差値 63.1
0458デフォルトの名無しさん
2010/06/08(火) 14:02:48(1)のプログラムにおいて、平均点と学力偏差値を計算する部分を関数 seiseki に改
めたプログラムを作成せよ
◆ 条件
データの入力と結果の出力はmain関数で行う。
人数 N に負の値や101以上の値が入力されたときには、再入力するものと
する。
点数 x[i] に負の値や100点を超える値が入力されたときには、再入力す
るものとする。
main関数から関数seisekiに
データの数 N
N人分の点数 x[]
を渡し、関数seisekiからmain関数に
平均点 μ
偏差値 T[]
を受け渡す。
ただし、平均点は戻り値を用いて返す。
0459デフォルトの名無しさん
2010/06/08(火) 14:06:09(2)で作成したプログラムの関数 seiseki の中
次のプログラム例を参考にして、
の配列要素をポインタを用いて表すプログラムを作成せよ。
#include <stdio.h>
float average( int N, float *h);
int main(void){
float ave, height[101];
int i,N;
printf("Input N:");
scanf("%d",&N);
for(i=1; i<=N; i++){
printf("身長 ");
scanf("%f",&height[i]);
}
ave = average(N,height);
printf("平均 %6.1f \n",ave);
return 0;
}
float average( int N, float *h){
int i;
float av, total=0.0;
for(i=1; i<=N; i++){
total = total + *(h+i);
}
av = total/N;
return av;
}
0460デフォルトの名無しさん
2010/06/08(火) 14:35:27wakaran
0461デフォルトの名無しさん
2010/06/08(火) 14:42:29問題文が日本語になっていない
コードも直接貼ってるから読みにくい
0462デフォルトの名無しさん
2010/06/08(火) 14:51:41ありがとうございます。
セグメンテーション違反になりましたが、ここからは自分で頑張ってみます。
0463デフォルトの名無しさん
2010/06/08(火) 15:31:47http://codepad.org/JjTL3Zwl
(1)は input と main_q1関数だけ。
実行するときは、main_q1はmainに関数名を直すのが必要です。
(2)は コピペでも動く。main_q1関数は不要なので、消しても良い。
・偏差値はわからないから、wikipediaのを参考に。
・stdevの求め方は、2乗の平均 - 平均の2乗にした。
・データ入力の際に、avgも求められるが、題意から分けた。
0464デフォルトの名無しさん
2010/06/08(火) 15:38:360465デフォルトの名無しさん
2010/06/08(火) 15:50:30Fortranな先生かな。
ttp://codepad.org/wUR2oqj6
0466デフォルトの名無しさん
2010/06/08(火) 16:10:080468デフォルトの名無しさん
2010/06/08(火) 17:30:20scanf("%c",&c);
で改行をよみこんでしまうから
後の条件式を総スルーしちゃう。
よってbは0で初期化されたまま
あと実際に動かすと
1
+
1
=
1
となってしまう。
これは
1
+
は計算するように書かれているけど
1
=
は計算するように書かれてないから。
0469デフォルトの名無しさん
2010/06/08(火) 17:44:47#include<stdio.h>
int main(void){
int a=0,b = 0;
char c=' ';
char prevc=' ';
while(c != '='){
scanf("%d%*c",&a);
scanf("%c",&c);
if (c == '+'){b += a; prevc='+';}
else if(c == '-'){b -= a; prevc='-';}
else if (c == '=')
{
if(prevc == '+' || prevc == ' ') b+=a;
else if(prevc == '-' || prevc == ' ') b-=a;
}
}
printf("%d\n", b);
}
0470デフォルトの名無しさん
2010/06/08(火) 18:00:42頭良すぎワロタww
何故そのような分析ができるんだ。
C言語難しすぎ、どんだけ繊細なんだよ。
0471デフォルトの名無しさん
2010/06/08(火) 18:18:230472デフォルトの名無しさん
2010/06/08(火) 18:19:080473デフォルトの名無しさん
2010/06/08(火) 18:25:510474デフォルトの名無しさん
2010/06/08(火) 18:28:05苦し紛れの技巧か?
あと='';
''の中は空白だな。
0475デフォルトの名無しさん
2010/06/08(火) 18:36:20C#宿題スレに書きこんでみるか?
0476デフォルトの名無しさん
2010/06/08(火) 18:39:34int main(void)
{
int sum = 0, temp;
char ch = '+';
do {
scanf("%d", &temp);
if(ch == '+') sum += temp;
else if(ch == '-') sum -= temp;
scanf(" %c", &ch);
}while(ch != '=');
printf("%d\n", sum);
return 0;
}
0477デフォルトの名無しさん
2010/06/08(火) 18:46:02こいつに何かを理解させるのは無理だって
0478デフォルトの名無しさん
2010/06/08(火) 19:03:06一個前のを取っておきたかったんだと思うよ。技巧ってほどじゃない
0479デフォルトの名無しさん
2010/06/08(火) 19:03:07[2] 問題文(含コード&リンク):オイラーの定理の仮証明
[3] 環境
[3.1] OS:Windows Vista
[3.2] コンパイラ名とバージョン:visual c++
[3.3] 言語:C
[4] 期限:無期限
[5] その他の制限:初心者なので。。。
互いに素なnとaについてオイラーの定理が成り立つか確かめる。
とりあえずnは1以上5以下の数とし、aは1以上n以下とする。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10654.txt
これを実行すると何故か一部でエラーが出るんですが(プログラミング的な意味ではなく)
その理由と解決方法を教えてください
0480デフォルトの名無しさん
2010/06/08(火) 19:17:35count = 1;の位置がおかしい
0481デフォルトの名無しさん
2010/06/08(火) 19:19:22なにがココまではおkなんだか・・・
ありがとうございます
0482デフォルトの名無しさん
2010/06/08(火) 19:21:07oira *= a;
oira %= n;
ってすれば数が大きくなっても対応可能。
0483デフォルトの名無しさん
2010/06/08(火) 19:23:02まじでそこを聞こうと思ってたところです
ありがとうございます
0484デフォルトの名無しさん
2010/06/08(火) 19:46:03度々悪いんですけど
なぜそうすればいいのか教えてもらえませんか?
自分で考えてもわかりませんでした
わからないのは
なぜ数が大きくなっても対応出来るのかではなく
なぜこの計算方法でも正しい結果が得られるのかです
0485デフォルトの名無しさん
2010/06/08(火) 20:00:300486デフォルトの名無しさん
2010/06/08(火) 20:08:13oiraにnで割った余りを入れちゃったら
次a倍すると意図しない値になっちゃいそうなんだ
少なくとも俺のない頭はそう思っちゃうorz
一回一回a倍とnで割った余りをいれようとした根拠とか考え方とかをご教授願いたかった(’;ω;`)
0487デフォルトの名無しさん
2010/06/08(火) 20:19:180488デフォルトの名無しさん
2010/06/08(火) 20:22:42>>482って
if(i == a){
printf("n = %2d, a = %2d", n, a);
oira = 1;
for(j = 0 ; j < count ; j++){
oira *= a;
oira %= n;
}
if((oira - 1) % n == 0){
printf(": verified\n");
}
else{
printf(": error\n");
}
}
みたいに直せって事だよな?
0489デフォルトの名無しさん
2010/06/08(火) 20:33:160490デフォルトの名無しさん
2010/06/08(火) 20:55:420491デフォルトの名無しさん
2010/06/08(火) 20:58:49a * a = (n * b + c) * (n * b + c)
=(n*b)^2 + 2 * n * b + c^2
(n*b)^2と2*n*bは明らかにnで割り切れるから、
a*aをnで割った余りはc^2をnで割った余りになる
0492デフォルトの名無しさん
2010/06/08(火) 21:07:130493デフォルトの名無しさん
2010/06/08(火) 21:09:19解説ありがとう
なんとなく考え方はわかったがまだしっくりこないのでもうちょい粘ってみる
>>492
気が楽になった
0494デフォルトの名無しさん
2010/06/08(火) 21:09:300495デフォルトの名無しさん
2010/06/08(火) 21:35:01#define NUMBER 5
int gcd(int a, int b) { return a % b ? gcd(b, a%b) : b; }
int main(void)
{
int i, j, c, n, a, oira;
for(n=1; n<=NUMBER; n++) {
for(a=1; a<n; a++) {
if(gcd(n, a)==1) {
printf("n=%2d,a=%2d:", n, a);
for(i=1,c=0; i<n; i++) if(gcd(n, i)==1) c++;
for(i=0,oira=1; i<c; i++) {
oira *= a;
oira %= n;
}
if(oira == 1) printf("verified\n");
else printf("error\n");
}}}
return 0;
}
0496デフォルトの名無しさん
2010/06/08(火) 21:37:49あくまで標準入出力とfor, while, if だけで
0497デフォルトの名無しさん
2010/06/08(火) 21:39:35本当に使うなといわれた?
0498デフォルトの名無しさん
2010/06/08(火) 21:43:13使っちゃいけないことは無いだろうが使わないでできるならそれに越したことはないかと
0499デフォルトの名無しさん
2010/06/08(火) 21:49:33>>491>>494のおかげで理解できました
理解できただけで次似たようなコード書くとき思いつくかどうかは別だけど
0500デフォルトの名無しさん
2010/06/08(火) 21:52:520501デフォルトの名無しさん
2010/06/08(火) 21:58:04[2] 問題文(含コード&リンク):
int plot(int x,int y,int c);は座標(x,y)に色cを設定する関数である。
これが与えられているものとして
コマンドラインから(x,y)の形で座標値が何個か与えられた時
(0<=x,y<=10000)これらに異なる色(選択は自由)を与える。
0<=x,y<=10000を満たす座標の各点についてその点から
最も近い点の色をその点に設定する(2つ以上の点から等距離
にある場合は、これらの点の中でコマンドラインで最初に指定
された点の色を設定)
この処理を行うプログラムを記述する
[3] 環境
[3.1] OS:Windows XP(Service pack 3)
[3.2] コンパイラ名とバージョン:visual c++.net 2005
[3.3] 言語:C++
[4] 期限:6/11迄
[5] その他の制限:
ヘッダファイルは使わない。extern宣言でplot関数を宣言した
のちにpaint関数のコードを記述すること。
0<=x,y<=10000と仮定して良い。
plot関数を適当な名前の整数ファイルの1024*y+(x % 1024)番目
のレコードに値を設定する実装としたドライバコードを使って
テストするとよい。
0502デフォルトの名無しさん
2010/06/08(火) 22:00:43#define NUMBER 5
int main(void)
{
int n, a, oira, c, i, j, k;
for(n=1; n<=NUMBER; n++) {
for(a=1; a<n; a++) {
for(i=n, j=a; k=i%j; i=j, j=k);
if(j!=1) continue;
printf("n = %2d a = %2d :", n, a);
for(c=oira=1; c<n; c++) {
for(i=n, j=c; k=i%j; i=j, j=k);
if(j!=1) continue;
oira *= a;
oira %= n;
}
if(oira==1) printf("verified\n");
else printf("error\n");
}}
return 0;
}
0503501
2010/06/08(火) 22:00:45○この処理を行うプログラムのメイン処理を行う関数
void paint( int argc,char **argv);
を記述する
×この処理を行うプログラムを記述する
0504デフォルトの名無しさん
2010/06/08(火) 22:01:35助言�d
それはその方が無駄にφ(n)(=count)を求めなくて済むからか?
だとしたらその通りかもしれないから今後の参考にするわ
0505デフォルトの名無しさん
2010/06/08(火) 22:11:30プログラム書くときスペースとか改行ってどのタイミングで入れてる?
学校では a = a + 1 って書く奴がいれば a=a+1 って書く奴もいるし
for(i=0;i<5;i++)って書く奴がいれば
for(i = 0 ; i < 5 ; i++)って書く奴もいるし
こうしたほうが効率がいいとか後で見やすいってのがあるなら参考にしたい
今なら癖とかないから変えられるし
0506デフォルトの名無しさん
2010/06/08(火) 22:12:55そう。
できるだけ必要のない無駄な処理はしないってのが大事。
0507デフォルトの名無しさん
2010/06/08(火) 22:14:02どうぞ
http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml
0508デフォルトの名無しさん
2010/06/08(火) 22:14:50vs2008使ってる俺は適当に書いてから「編集→詳細→選択範囲のフォーマット」で整形してる
0509デフォルトの名無しさん
2010/06/08(火) 22:20:58あえてこっちを載せないことに悪意を感じる
0510デフォルトの名無しさん
2010/06/08(火) 22:25:31知らなかったんだごめんよ
0511デフォルトの名無しさん
2010/06/08(火) 22:39:58てか発想が秀逸すぎて手に負えない
0512デフォルトの名無しさん
2010/06/08(火) 22:43:140513デフォルトの名無しさん
2010/06/08(火) 22:50:130514デフォルトの名無しさん
2010/06/08(火) 22:52:000<=x,y<=10000を満たす座標の各点についてその点から
最も近い点の色をその点に設定する
ってあるけど
各々の座標の色はどう初期化するべきなの?
なにかしら初期化しておかないと最も近い点の色もなにもないと思うんだけど。
0515デフォルトの名無しさん
2010/06/08(火) 23:09:330516430
2010/06/08(火) 23:12:01K&R にしておけば後ろ指をさされることはないかと。
ただし私は
int main() {
...
}
とかえている。
emacs(xyzzy) ではこのほうが便利だから。
0517デフォルトの名無しさん
2010/06/08(火) 23:54:47[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10656.txt
プログラムと問題文が書いてあります
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C言語
[4] 期限: 2010年6月9日中に提出
[5] その他の制限: 特にありません
よろしくお願いします。
0518デフォルトの名無しさん
2010/06/09(水) 03:13:20[2] 問題文:整数nを入力し、以下のようにサイズnの“N型の図形”を、奇数目入力では”*”、偶数目入力では”+”で表示で表示されるプログラムを作成しなさい。なお、処理の終了はnが0以下の時とする。複合条件やスイッチを用いて作製なさい。
実行例
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10658.txt
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン:
[3.3] 言語: C
[4]期限:6/9日PM10:00
[5]その他制限: printf int while scanf float for のみの使用
なお、||、break、return,は使用禁止
プログラム形式はサンプル風にお願いします
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10660.txt
0519デフォルトの名無しさん
2010/06/09(水) 03:19:59http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10661.txt
0520デフォルトの名無しさん
2010/06/09(水) 03:41:51int main(void)
{
int i, j, n;
while(scanf("%d", &n)==1 && n > 0) {
printf("n=%d\n", n);
for(i=0; i<n; i++) for(j=0; j<=n; j++) printf("%c", j!=n ? j==0||j==n-1||j==i ? n & 1 ? '*' : '+' : ' ' : '\n');
}
return 0;
}
05219
2010/06/09(水) 10:07:40すごいです!!…学校で習った感じに少し、
書き直させて頂きました(>_<)
こんなに早く出来ると思ってなかったので
びっくりしました。
本当に助かりました!有難う御座いました☆
0522デフォルトの名無しさん
2010/06/09(水) 10:43:14カーディガン
レントゲン
サンドイッチ
0523デフォルトの名無しさん
2010/06/09(水) 11:01:34http://ideone.com/EtsT0
作ってみたけどなんか違うから、だれか直してくれ
0524デフォルトの名無しさん
2010/06/09(水) 16:11:42[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10662.txt
[3] 環境
[3.1] OS:特に指定なし
[3.2] gcc 3.2
[3.3] 言語: (C)
[4] 期限: ([2010年6月10日15:00まで] )
[5] その他の制限: なし
よろしくお願いします。
0525デフォルトの名無しさん
2010/06/09(水) 16:45:36おまえ、5つの数字の列の取りうる範囲は0~99999の100,000個だぞ。
だから入れるバケツの大きさは100,000の配列にしてそこへ2000個のデータを
5桁の数字に対応するバケツに次々入れて、終わったら番号の小さいバケツから順番に
数字を取り出すようにしないとダメだぞ。
0526デフォルトの名無しさん
2010/06/09(水) 16:47:15{
int *p = calloc(100000, sizeof(int));
int i, j, k;
for(i=0; i<size; i++) p[atoi(data[i])]++;
for(i=j=0; i<100000; i++) for(k=0; k<p[i]; k++) sprintf(data[j++], "%05d", i);
free(p);
}
0527デフォルトの名無しさん
2010/06/09(水) 17:46:55int i, j=0, k;
char p5[6];
int *p = calloc(100000, sizeof(int));
for(i=0; i<size; i++)
p[atoi(data[i])]++;
for(i=0; i<100000; i++) {
if(p[i]) {
sprintf(p5, "%05d", i);
for(k=0; k<p[i]; k++)
strncpy(data[j++], p5, 5);
}
}
free(p);
}
0528デフォルトの名無しさん
2010/06/09(水) 18:23:29申し訳ないですが、
||と条件文の中にさらに条件文は使用禁止なんです。
説明足りなくてスミマセン。
[printf("%c", j!=n ? j==0||j==n-1||j==i ? n & 1 ? '*' : '+' : ' ' : '\n'); ココと]
[while(scanf("%d", &n)==1 && n > 0)ココの部分です]
0529デフォルトの名無しさん
2010/06/09(水) 19:11:45これなら大丈夫だろw
http://ideone.com/lGet1
0530デフォルトの名無しさん
2010/06/09(水) 19:27:495つの数字が全部0って可能性はないのかな?
もし0が入る可能性があるのならallocateされた領域の初期値が0じゃまずいかも。
0531デフォルトの名無しさん
2010/06/09(水) 19:28:550532デフォルトの名無しさん
2010/06/09(水) 19:39:49お前は何をいってるんだ
0533デフォルトの名無しさん
2010/06/09(水) 20:07:46何度もすみません
さっきの説明が分かりにくかったですね;
forの中にscanfとかを入れるのがダメなんです。
1行に付きscanf、forなどは1つです。
printf
int
while
scanf
float
for
のみの使用です。
それ以外は使用禁止です。
return
||
else
if
は使用禁止です。
0534デフォルトの名無しさん
2010/06/09(水) 20:09:59誰が禁止って言ったの?
0535デフォルトの名無しさん
2010/06/09(水) 20:21:51わはははは、javaやりながらここ見てたから勘違いだ。笑えwwwww
0536デフォルトの名無しさん
2010/06/09(水) 20:33:58[2] 問題文(含コード&リンク):
次の仕様を満たすプログラムを作成せよ
「xy 平面内に任意の電荷量の点電荷を複数個配置する.xy 平面内の原点Oを中心とする4 m 四方(±2 m)の領域内において,位置r(x, y)に形成される電界Erや電位Φrを計
算する.」複数個の点電荷で形成される電界Erや電位Φrを,任意の位置r で計算する際は,重ね合わせの原理を用います
電界ベクトルの計算は, x 成分とy 成分に分けて行います
[3] 環境
[3.1] OS: unix
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限:6月11日
[5] その他の制限: 特になし
0537デフォルトの名無しさん
2010/06/09(水) 20:54:43先生に言われました;;
0538デフォルトの名無しさん
2010/06/09(水) 21:01:580539デフォルトの名無しさん
2010/06/09(水) 21:03:14学校と先生を教えてくれるかな?w
0540デフォルトの名無しさん
2010/06/09(水) 21:04:30誰だお前は
0541デフォルトの名無しさん
2010/06/09(水) 21:11:04講師の先生(せんせ)に 言われたよ
――痴楽 綴り方教室
0542デフォルトの名無しさん
2010/06/09(水) 21:13:19例ですと
前回の課題の
問題文:整数nを入力し、以下のようになサイズnの”Z型の図形”を”*”で表示するプログラムを作成しなさい。
ただし、図形を表示するためのnの値は3以上とし、2以下の値が入力された場合は処理を終了する様にしなさい。
[実行例]
3 <-n入力
n=3
***
*
***
4 <-n入力
n=4
****
*
*
****
8 <-n入力
n=8
********
*
*
*
*
*
*
********
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10660.txt
はこうなりました。
0543デフォルトの名無しさん
2010/06/09(水) 21:21:140544537 542
2010/06/09(水) 21:27:23すみません!!
番号うつの忘れてました。
ホントすみません;;
0545デフォルトの名無しさん
2010/06/09(水) 21:35:42http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10664.txt
詰めは自分でやってくれ
0546デフォルトの名無しさん
2010/06/09(水) 22:00:300547デフォルトの名無しさん
2010/06/09(水) 22:03:59STanDard InputOutput Headerな
定義されてる関数群がちがう。
0548デフォルトの名無しさん
2010/06/10(木) 00:33:37関数を二つ pen()とqen()として作って
int main()の中に呼びたいんですが
この時pen()の実引数をqen()にしたいんですが
これがうまくいきません、どうしたらいいですか?
レス代行なので長いプログラムは書けません・すいません。
int main(void)
a=pen();
qen(a);
としてもpen()とqen()が別個に呼び出されるだけで一つの作業と
なりません。
0549デフォルトの名無しさん
2010/06/10(木) 02:48:35penの引数をqenの引数にしようとしているようには見えないので、いろいろおっちょこちょいな人なのかな。
関数ポインタをキーワードにいろいろ調べてみてください。
0550デフォルトの名無しさん
2010/06/10(木) 06:07:31pen(qen);
だろ。
0551デフォルトの名無しさん
2010/06/10(木) 06:46:15pen()の中で (*p)(); もしくは p(); として呼び出す
0552デフォルトの名無しさん
2010/06/10(木) 07:52:36double a;
qen(a);
pen(qen);
ですか?普通に無理でしたが・・
pen(qen);だけでもまぁ無理でした。
>>551
pen((*p)(qen(a));ってことですか?これも無理でした。
0553デフォルトの名無しさん
2010/06/10(木) 07:55:25int mainの中で
p= pen;
qen((*p)pen());とかごちゃごちゃ色々なとこ変えて、
付け足して
90回くらい思考錯誤したけど全部だめした......
ちなみにpen()、qen()自体はそれぞれsin関数とcos関数
です。ポインタ関数理解したいのでこのままの構造でい
きたいと思ってます。
0554デフォルトの名無しさん
2010/06/10(木) 07:59:470555430
2010/06/10(木) 08:09:29#include <stdio.h>
#include <math.h>
double p(double (*f)(double), double a)
{
return sin((*f)(a));
}
double q(double a)
{
return cos(a);
}
int main()
{
double a, b;
a = 3.1415926;
b = p(q, a);
printf("%f\n", b);
return 0;
}
/* end */
0556デフォルトの名無しさん
2010/06/10(木) 08:12:370557デフォルトの名無しさん
2010/06/10(木) 08:21:430558デフォルトの名無しさん
2010/06/10(木) 08:23:28関数を2つ呼び出して、一つの関数をもうひとつの関数の
引数にしたいんです。ただそれだけです。
0559デフォルトの名無しさん
2010/06/10(木) 08:23:50わざわざありがとうございます、doubleじゃなくてfloatでした。
この時も関数ポインタはfですね?
あとretrunっているのですか?どういう役割なのかなぁ....
それとa=3.1415926..とは?
色々ややこしいなぁ、簡単なプログラムなのにこんな複雑だとは....
0560デフォルトの名無しさん
2010/06/10(木) 08:25:31もしかして
sin(cos(a));
か?この式に何の意味があるのかは不明だが
0561デフォルトの名無しさん
2010/06/10(木) 08:27:38問題を適切に抜き出す能力が足りないだけ
少なくとも俺は>>558読んでもさっぱりわからん
0562デフォルトの名無しさん
2010/06/10(木) 08:28:07それでオッケーなら>548でもオッケーだろ
0563デフォルトの名無しさん
2010/06/10(木) 08:30:26余計なことしないで教科書のサンプルでも打ち込んでろって思うな
0564デフォルトの名無しさん
2010/06/10(木) 08:38:27簡単な事をわざわざ複雑怪奇に書いて苦しみ悶える事に快感を覚えるタイプ
0565デフォルトの名無しさん
2010/06/10(木) 08:39:27いやめちゃくちゃ単純なんですが・・
合成関数のプログラムですよ。
sin(cos(a))ですよ。
関数が二つあるんだから、二つの関数呼び出す必要ありますよね。
全然意味不明じゃないですが・・・
0566デフォルトの名無しさん
2010/06/10(木) 08:44:22y=sin(x);
変数と代入から勉強だな。
0567デフォルトの名無しさん
2010/06/10(木) 08:47:18それはcos(a)の返り値をsin()の実引数にするといい、
cos()をsin()の実引数にするとは言わない。
正しく用語を使えてないから、他人に正しく伝わらない。
0568デフォルトの名無しさん
2010/06/10(木) 08:47:37まだわからない。
double sincos(double a)
{ return sin(cos(a)); }
ではどうだめなのか。
0569デフォルトの名無しさん
2010/06/10(木) 08:51:53すいません。その通りです。返却値をsin()の実引数の実引数にしたいんです。
>>568
あぁ絶対言うかと思いました。
別に合成関数のプログラム作りたいわけじゃなくて、関数の呼び出しという
構造を学びたいだけで。それなら僕も考えてました。複雑なプログラムはそれ
じゃ無理です。
0570デフォルトの名無しさん
2010/06/10(木) 08:55:310571デフォルトの名無しさん
2010/06/10(木) 08:58:560572553
2010/06/10(木) 09:00:440573デフォルトの名無しさん
2010/06/10(木) 09:01:44名前欄に、「好きな数字#...」に続けて任意の文字列
0574デフォルトの名無しさん
2010/06/10(木) 09:02:36以後気をつけますんで、お願いします、どうしたらいいでしょう....
>>570
少し複雑になったら関数が必要だから。別にプログラムの何もわからないが。
0575デフォルトの名無しさん
2010/06/10(木) 09:03:29日本語でおk
0577デフォルトの名無しさん
2010/06/10(木) 09:06:22おまい誰だよ
05789
2010/06/10(木) 09:09:20【質問テンプレ】
[1] 授業単元:C言語 演習問題4-14
[2] 問題文(含コード&リンク):身長と標準体重を表示するプログラムを作成せよ。
なお、表示する身長の範囲(開始値、終了値、増分)は、整数値として読み込み、
標準体重は小数点以下2桁だけ表示すること。
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: main.c Visual Studio 2008
[3.3] 言語: C++
[4] 期限: 22年6月18日17:00まで
[5] その他の制限: do文やif文、for文までです
file:///C:/Users/aika/Desktop/%E3%83%9E%E3%83%BC%E3%82%AF%E3%82%A2%E3%83%83%E3%83%97%E8%A8%80%E8%AA%9E/c.html
一応上記まで作り、実行も出来たのですが
実行時エラーで問題のように上手くいきません。
多分、水色で示したところが間違っているのだと
思うのですが…(p‥`)
手直し(?)という形で宜しくお願いします、
0579デフォルトの名無しさん
2010/06/10(木) 09:10:47>file:///C:/Users/aika/Desktop/%E3%83%9E%E3%83%BC%E3%82%AF%E3%82%A2%E3%83%83%E3%83%97%E8%A8%80%E8%AA%9E/c.html
ふざけてんの?
0580デフォルトの名無しさん
2010/06/10(木) 09:15:440581デフォルトの名無しさん
2010/06/10(木) 09:25:42>file:///C:/Users/aika/Desktop/マークアップ言語/c.html
http://pc12.2ch.net/test/read.cgi/tech/1274827528/424
0582デフォルトの名無しさん
2010/06/10(木) 09:29:110583デフォルトの名無しさん
2010/06/10(木) 09:33:03それはわかってんよ
実行時エラーとか水色で示した部分がこちらは知りたいわけ
0584566 ◆/91kCCQXBo
2010/06/10(木) 10:23:24#include <stdio.h>
#include <math.h>
/* double sin( double x ); */
/* double sin( double x ); */
float r(double (*p)(double), double (*q)(double), float a)
{
return (*p)((*q)(a));
}
int main()
{
printf("%f\n", r(sin, cos, 1.0));
return 0;
}
0585デフォルトの名無しさん
2010/06/10(木) 10:29:070586デフォルトの名無しさん
2010/06/10(木) 10:34:420587デフォルトの名無しさん
2010/06/10(木) 10:53:59% Prolog (その一)
バケツソート(_整列されたならび) :-
abolish('$temp'/2),
findall(S,(for(1,_,2000),ランダムな文字列の発生(S)),L),
バケツソート(L,_整列されたならび),!.
バケツソート(L,_整列されたならび) :-
バケツに吐き出す(L),
findall(X,(鍵候補値を昇順に発生させる(S),バケツから拾い上げる(S,X)),_整列されたならび).
数値文字候補ならび(['0','1','2','3','4','5','6','7','8','9']).
鍵候補値を昇順に発生させる(S) :-
数値文字候補ならび(L),
member(A,L),member(B,L),member(C,L),member(D,L),member(E,L),
concat_atom([A,B,C,D,E],S).
ランダムな文字列の発生(S) :-
数値文字候補ならび(L),
findall(A,(for(1,_,5),M is (random mod 10) + 1,list_nth(M,L,A)),L2),
concat_atom(L2,S),!.
0588デフォルトの名無しさん
2010/06/10(木) 11:02:44なるほど、よくわかりました
05899
2010/06/10(木) 11:13:51すみません…どう書いたらいいのか
よく分からなかったもので。
#include <stdio.h>
int main(void)
{
int i;
int low, high, step;
printf( "何cmから:" ); scanf( "%d", &low );
printf( "何cmまで:" ); scanf( "%d", &high);
printf( "何cmごと:" ); scanf( "%d", &step);
for(i=low; i<=high; i+=step) {
printf( "%dcm %.2fkg\n", low, ((low += step <= high) - 100) * 0.9);
printf( "%dcm\n", low += step);
}
return( 0 );
}
上記のfor{文}のところです。。。
本当にすみませんでした、
また宜しくお願いします。
0590デフォルトの名無しさん
2010/06/10(木) 11:23:54副作用関連で鼻から悪魔コード じゃない? (関数引数での , は副作用完了点じゃないよな?)
0591587
2010/06/10(木) 11:33:470592デフォルトの名無しさん
2010/06/10(木) 11:42:47本当やね
low2 = ((low += step <= high) - 100) * 0.9;
printf( "%dcm %.2fkg\n", low, low2);
とすればうまくいくはず
0593デフォルトの名無しさん
2010/06/10(木) 11:44:26low2 = ((low + step <= high) - 100) * 0.9;
printf( "%dcm %.2fkg\n", low, low2);
low += step <= high;
か?
0594581 ◆/91kCCQXBo
2010/06/10(木) 11:51:26int main(void)
{
int i;
int low, high, step;
printf( "何cmから:" ); scanf( "%d", &low );
printf( "何cmまで:" ); scanf( "%d", &high);
printf( "何cmごと:" ); scanf( "%d", &step);
for(i=low; i<=high; i+=step) {
printf( "%dcm 標準体重=%.2fkg BMI(22)=%.2fkg\n", i, (i - 100) * 0.9, 22.0*i/100*i/100);
}
return 0;
}
0595デフォルトの名無しさん
2010/06/10(木) 18:59:06[2] 問題文(含コード&リンク):
以下のようにmain関数を定義し、mainの引数を合計するプログラムsumを作成せよ。ただし、引数の数は未定であり、実行時に決定されるものとする。
int main(int argc, char *argv[])
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C
[4] 期限:2010年6月15日まで
[5] その他の制限:
端末上で
./sum 3.2 1.9 2.3
と入力すると
7.4000
と出力されるようにする。
0596デフォルトの名無しさん
2010/06/10(木) 19:27:07int main(int argc, char *argv[])
{
int i;
float tmp, sum=0;
for(i=1; i<argc; i++){
sscanf(argv[i], "%f", &tmp);
sum += tmp;
}
printf("%g\n", sum);
}
0597デフォルトの名無しさん
2010/06/10(木) 19:56:13int main(int argc, char *argv[])
{
printf(argv[1])
printf(argv[2])
}
のようにするとき,コマンドからargv[]にデータを入れないとエラーがでます。
配列argv[]の初期値はどのように設定すればよいのでしょうか?
0598デフォルトの名無しさん
2010/06/10(木) 20:08:210599デフォルトの名無しさん
2010/06/10(木) 21:00:42なお、m = a % b としたとき、gcd(a, b) は m≠0 の場合 gcd(b, m) に等しく、 m=0 の場合 b に等しい。
2つの自然数aとbを入力させ、a 人から b 人を選ぶ組み合わせ comb(a, b)を求め、それを出力するプログラムを作成せよ。
なお、comb(a, b) = comb( a-1, b) + comb( a-1, b-1) であり、 b==0 もしくは b==a のとき comb(a, b) = 1 である。
今週は2つありますが。。。よろしくお願いしますorz
0600デフォルトの名無しさん
2010/06/10(木) 21:16:32argc == 1 の時はargvを調べないようにする
0601デフォルトの名無しさん
2010/06/10(木) 22:50:26なお~~。の部分はプログラムのテストに使うくらいで、実際の問題とはなんの関連もないわな。
0602デフォルトの名無しさん
2010/06/10(木) 23:41:09[1] 授業単元:画像処理
[2] 問題文(含コード&リンク): http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10665.txt
[3] 環境
[3.1] OS: (特になし)
[3.2] gcc
[3.3] 言語: (C)
[4] 期限: ([2010年6月14日00:00まで])
よろしくお願いします。
0603デフォルトの名無しさん
2010/06/10(木) 23:42:170604デフォルトの名無しさん
2010/06/10(木) 23:46:28ボロノイ図の問題かな?
AREA_SIZEを必要に応じて(10000などに)書き換えて下さい。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10666.cpp
0605デフォルトの名無しさん
2010/06/11(金) 00:22:352番目だけ。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10667.c
0606デフォルトの名無しさん
2010/06/11(金) 12:44:03まだ途中ですが次のように書いていました
ですが書いている途中にエラーがででコンパイルできません
Visual C++ でやってます
エラーの理由とその解決方法を教えてください
#include<stdio.h>
int main(void)
{
int score[101], score, number;
printf("input of number is ");
scanf("%d", &number);
for (int j = 0; j < 101; j++) {
score[j] = 0;
}
for (int i = 0; i < number; i++) {
scanf("%d", &score);
if (0 <= score && score <= 100) {
score[score]++;
}else {
break;
}
}
return 0;
}
0607デフォルトの名無しさん
2010/06/11(金) 12:52:350608デフォルトの名無しさん
2010/06/11(金) 12:52:390609デフォルトの名無しさん
2010/06/11(金) 12:56:24すみません
0610デフォルトの名無しさん
2010/06/11(金) 13:28:280611デフォルトの名無しさん
2010/06/11(金) 13:30:46配列名は配列の先頭要素のアドレスを表すってあるけど
ポインタを詳しく理解してないからアドレスとはなんぞやって聞かれてもクエスチョンマークだけど
0612デフォルトの名無しさん
2010/06/11(金) 13:38:11「配列名は配列の先頭要素を表す」こう解釈したんだろうけど
知らない言葉を無視して前後をくっつけて理解した気になってたら
しょっちゅうトラブル起こるよ
06139
2010/06/11(金) 13:44:44そうですね!!ありがとうございます!
理解出来ましたm(_ _)m
本当にありがとうございます!!!
0614デフォルトの名無しさん
2010/06/11(金) 13:49:400615デフォルトの名無しさん
2010/06/11(金) 17:02:14[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10668.txt
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C
[4] 期限: 6月12日 午後9:00 まで
[5] その他の制限:for文まで習ってます。問1、2両方お願いします。
よろしくお願いします。
0616501
2010/06/11(金) 17:13:24どうもありがとうございました。参考にさせて頂きます。
ボロノイ図でググってみましたが関連が深そうです。
課題は「データベース構造設計、更新効率性と正規性のバランス」
がテーマの講座で出たものでした。
0617デフォルトの名無しさん
2010/06/11(金) 17:38:05#include <stdio.h>
問一
int main(void)
{
int i,num[3]={0},t,j,k;
for(i=0;i<3;i++)
scanf("%d", num+i);
j=num[0]/num[2];
k=num[1]/num[2];
for(i=j;i<=k;i++){
t=num[2]*i;
if(num[0]<=t && t<=num[1] )
printf("%d*%d=%d\n",num[2],i,num[2]*i);
}
}
0618デフォルトの名無しさん
2010/06/11(金) 17:46:46http://codepad.org/lFW9VvVR
0619デフォルトの名無しさん
2010/06/11(金) 17:58:02int a, b, c, t, i;
scanf("%d", &a);
scanf("%d", &b);
scanf("%d", &c);
t = a % c;
if (t != 0)
a += c - t;
for (i = a; i <= b; i += c) {
printf("%d, ", i);
}
}
>>617
初期値をループで求めるのはどうなのと思わなくもない
0621デフォルトの名無しさん
2010/06/11(金) 18:38:41[1] 授業単元:プログラミング演習
[2] 問題文 :関数ポインタの配列を使い、入力文字列によって各関数へ分岐させるプログラムを作りなさい。
[3] 環境 :C言語
[4] 期限 :2010/06/12
よろしくお願いします。
0622デフォルトの名無しさん
2010/06/11(金) 19:20:13#include <stdio.h>
void foo() { printf("foo"); }
void bar() { printf("bar"); }
void buzz() { printf("buzz"); }
int main() {
char input[100];
void (*function_table[])() = {
foo, bar, buzz,
};
char* function_names[] = {
"foo", "bar", "buzz", 0,
};
int i = 0;
scanf("%s", input);
while (function_names[i]) {
if (strcmp(function_names[i], input) == 0) {
function_table[i]();
break;
}
i++;
}
return 0;
}
こんなん?
0623デフォルトの名無しさん
2010/06/11(金) 19:32:15ありがとうございます。参考にさせていただきます。
0624デフォルトの名無しさん
2010/06/11(金) 19:39:27function_table
function_names
↑この配列を一つにまとめるにはどうしたらよいですか?
0625622
2010/06/11(金) 19:56:00char name[100];
void (*call)();
};
int main() {
char input[100];
struct function table[] = {
{ "foo", foo }, { "bar", bar }, { "buzz", buzz }, { "", 0 }
};
struct function *p_table = table;
scanf("%s", input);
while (p_table->call != 0) {
if (strcmp(p_table->name, input) == 0) {
p_table->call();
break;
}
p_table++;
}
return 0;
}
こんなのしか思い浮かばなかった、参考程度に
0627デフォルトの名無しさん
2010/06/11(金) 21:12:100628596
2010/06/11(金) 21:12:23printf("%g\n", sum);
↓
printf("%.4f\n", sum);
0629デフォルトの名無しさん
2010/06/11(金) 21:27:01[2] バブルソートは、 配列がすでに適正な順序, あるいはそれに近い順序で並んでいても
n-1回の走査をしなければならない。すなわち、 n*(n-1)/2回の比較が行われなければならない.。そこで、各回の走査の終わりに
交換が行われたか否かをチェックするようにし、交換が行われていなければそれ以上走査をしないのでソートを完了するようなプログラムを作成せよ
[3]
[3.1] Windows
[3.2] Visual Studio 2008
[3.3] C++
[4] 期限:2010年6月15日
0630デフォルトの名無しさん
2010/06/11(金) 21:33:13>>366
0632デフォルトの名無しさん
2010/06/11(金) 21:43:55ありがとうございます。参考にします。
0634デフォルトの名無しさん
2010/06/11(金) 22:02:03[2] 問題文(含コード&リンク):
任意の要素数のint型の配列を作成し、その配列の中にキーボードから数値を入力する関数 make_ary、総和を求める関数 sum_ary、配列からある要素を探す関数 search_ary、配列を表示する関数 printf_ary を実装しなさい。
その際、要素数もキーボードから入力するように設計し、配列はちょうどその要素分だけを作成するようにしなさい。
各関数では添字演算子([])を用いずに、ポインタ操作で実装しなさい。
返り値と引数をどのようにしたら良いか考えて実装すること。
以下のmain関数を参考にする。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10672.txt
また、実行例は以下のようにすること。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10670.txt
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C
[4] 期限:2010年6月14日まで
[5] その他の制限:特にないです。
よろしくお願いいたします。
0635デフォルトの名無しさん
2010/06/11(金) 22:07:100636596
2010/06/11(金) 22:10:170637デフォルトの名無しさん
2010/06/11(金) 22:18:120638デフォルトの名無しさん
2010/06/11(金) 22:25:04int main(void)
{
char str[100];
char a;
int i;
printf("文字列を入力してください:");
scanf("%s",str);
for(i=1;str[i]!='\0';i++){
a=str[i];
str[i-1]=str[i];
str[i]=a;
str[i-1]--;
}
printf("%s",str);
return 0;
}
1行入力しその文の正順と逆順を出力するようなプログラムにしたいです。
ここまでできました。神様助けて
0639デフォルトの名無しさん
2010/06/11(金) 22:53:35【質問テンプレ】
[1] 授業単元:画像処理
[2] 問題文(含コード&リンク): http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10665.txt
[3] 環境
[3.1] OS: (特になし)
[3.2] gcc
[3.3] 言語: (C)
[4] 期限: ([2010年6月14日00:00まで])
<bmp.h>のヘッダファイルはこれです。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10669.txt
・・・・の部分がわからないので教えていただきたいです。よろしくお願いします。
#include <stdio.h>
#include <string.h>
int main(void){
char str[100];
char a;
int i, len, len2;
printf("文字列を入力してください:");
scanf("%s", str); /* 改行は含めない */
len = strlen(str);
len2 = len / 2;
for(i = 0; i < len2; i++){
a = str[i];
str[i] = str[len - i - 1];
str[len - i - 1] = a;
}
printf("%s\n",str);
for(i = len2-1; i >= 0; i--){
a = str[i];
str[i] = str[len - i - 1];
str[len - i - 1] = a;
}
printf("%s\n",str);
for(i = len2; i > 0; i--){
a = str[i-1];
str[i-1] = str[len - i];
str[len - i] = a;
}
printf("%s\n",str);
return 0;
}
0642デフォルトの名無しさん
2010/06/11(金) 23:21:22すいません。出力しましたが、できません。
Today is Thursday..yadsruhT si yadoT ←のようになりません。
input string: Today is Thursday.
yadoT ←になってしまいます。
0643デフォルトの名無しさん
2010/06/11(金) 23:22:470644デフォルトの名無しさん
2010/06/11(金) 23:47:27#include <stdio.h>
#define MAX_LENGTH 100
int main(void){
char str[MAX_LENGTH],*rev;
int i,len;
rev = str+MAX_LENGTH/2;
puts("文字列を入力して下さい。");
scanf("%s",str);
for(len=0;str[len]!='\0';++len) ;
for(i=len-1;i>=0;--i) rev[len-i-1] = str[i];
rev[len+1] = '\0';
printf("正順:%s, 逆順:%s\n",str,rev);
return 0;
}
0645デフォルトの名無しさん
2010/06/12(土) 00:00:24文字列を入力して下さい。
oday is Thursday.
正順:Today, 逆順:yadoTフ
続行するには何かキーを押してください . . .
と出力されるんですが…
0646デフォルトの名無しさん
2010/06/12(土) 00:05:14サンプル画像って、ある?
0647デフォルトの名無しさん
2010/06/12(土) 00:06:55ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10673.c
0648デフォルトの名無しさん
2010/06/12(土) 00:07:100649デフォルトの名無しさん
2010/06/12(土) 00:10:07fgetsは使っていいのか、scanfだと厳しいと思うんだが
0650デフォルトの名無しさん
2010/06/12(土) 00:10:58ありがとうございます。
0651デフォルトの名無しさん
2010/06/12(土) 00:11:54#include <stdio.h>
int main(void)
{
char str[256], *p, *q;
fgets(str, 256, stdin);
for(p = str; *p; p++) if(*p == '\n') { *p = '\0'; break; }
for(q = str, p--; p > q; p--, q++) {
char temp = *p;
*p = *q;
*q = temp;
}
puts(str);
return 0;
}
0652デフォルトの名無しさん
2010/06/12(土) 00:14:090653デフォルトの名無しさん
2010/06/12(土) 00:16:12http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10674.zip
こちらでお願いします。
0654デフォルトの名無しさん
2010/06/12(土) 00:28:05#include<stdio.h>
#include"bmp.h"
int main(void) {
unsigned char image[256][256];
long hist[32] = {0};
char* filename = "gray.bmp";
int x, y, i, k;
LoadBMP(filename, image[0], 256, 256);
for (y = 0; y < 256; y++) {
for (x = 0; x < 256; x++) {
hist[image[y][x] / 8]++;
}
}
for (i = 0; i < 32; i++) {
printf("%02d | ", i);
for (k = 0; k <= hist[i] / 100; k++)
printf("*");
printf("\n");
}
}
0655デフォルトの名無しさん
2010/06/12(土) 00:32:24褒めてあげよう
以下の動画は事実をもとにしています
http://www.youtube.com/watch?v=6kZbeAK-vBE&feature=related
http://www.youtube.com/watch?v=CZhjJlMn2hM&NR=1
0656デフォルトの名無しさん
2010/06/12(土) 00:51:47http://codepad.org/LGxZYbGJ
だれか採点お願い
0657デフォルトの名無しさん
2010/06/12(土) 01:42:44Tabキー押したときスペース2つ分入力されるような設定って出来ない?
0658デフォルトの名無しさん
2010/06/12(土) 01:45:36make_ary
戻り値が-1,-2になることに違和感がある。
int *make_ary(int size);
プロトタイプを↑にして、エラー発生したら、NULLを返すようにする方がすっきり。
print_ary
配列の全要素に対して操作するような場合、常に
for(i = 0;i < size;i++) {
printf("%d, ", ary[i]);
}
のように書く方がよい。
get_numsはそのように書いてある。そろえること。
0659デフォルトの名無しさん
2010/06/12(土) 01:49:09VC++ Express 2008だけど、
ツール>オプション>テキストエディタ>C/C++で
タブサイズ、インデントサイズが決められる。
0660デフォルトの名無しさん
2010/06/12(土) 01:56:22表示形式が実行例と異なっている。
scanf()でnumに読み込んでからary[i]に代入するのは無駄。
0661デフォルトの名無しさん
2010/06/12(土) 01:58:55できたできた
トンクス
#include <stdio.h>
int main(void)
{
char str[100], a_temp;
int i, j, len;
printf("文字列を入力してください:");
fgets(str, 100, stdin);
len = strlen(str);
if(str[len-1] == '\n')
str[--len] = '\0';
printf("%s", str);
if(len%2 != 0) j=len/2; else j=len/2-1;
for(i=len/2; str[i] != '\0'; i++, j--) {
/* printf("%d,%d\n",i,j); */
a_temp = str[i];
str[i] = str[j];
str[j] = a_temp;
}
printf("%s", str);
return 0;
}
0664デフォルトの名無しさん
2010/06/12(土) 12:25:51[問題] 2次元以上の配列
画面上に基盤を書くプログラムを書け。基盤とは縦横19本ずつの線が等間隔に並んだ図形である。
18×18個の正方形あるいは長方形をぴったり詰め合わせた図形と言っても良い。
まだint型しか習ってないからcharとか使えないし
a[18][18]とか置いてもその後の方針がわからん
プログラム自体は書かなくていいんでヒントだけ誰か教えてください
0665デフォルトの名無しさん
2010/06/12(土) 12:32:33int a[18][18];
int i, j;
for (i = 0; i < 18; ++i) {
for (j = 0; j < 18; ++j) {
a[i][j] = 0;
}
}
0666デフォルトの名無しさん
2010/06/12(土) 12:34:19でもそれじゃ出力されるのは楕円だから基盤ぽくならないじゃないですか
でも四角い数字なんてないし
printfで縦線と横線を書いていくんだったら配列要らないし
もうわけわかめです
0667デフォルトの名無しさん
2010/06/12(土) 12:35:44┏━┳━┳━┳━┳━┳━┳━┳━┓
┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃
┣━╋━╋━╋━╋━╋━╋━╋━┫
┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃
┣━╋━╋━╋━╋━╋━╋━╋━┫
┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃
┣━╋━╋━╋━╋━╋━╋━╋━┫
┃ ┃ ┃ ┃○┃●┃ ┃ ┃ ┃
┣━╋━╋━╋━╋━╋━╋━╋━┫
┃ ┃ ┃ ┃●┃○┃ ┃ ┃ ┃
┣━╋━╋━╋━╋━╋━╋━╋━┫
┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃
┣━╋━╋━╋━╋━╋━╋━╋━┫
┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃
┣━╋━╋━╋━╋━╋━╋━╋━┫
┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃
┗━┻━┻━┻━┻━┻━┻━┻━┛
0668デフォルトの名無しさん
2010/06/12(土) 12:35:520669デフォルトの名無しさん
2010/06/12(土) 12:39:48たぶんそんな感じに出力されればおkです
>>668
配列の全要素に0を代入してそれを出力しても
00000
00000
00000
みたいな感じにしかならないじゃないですか
楕円です
0670デフォルトの名無しさん
2010/06/12(土) 12:42:52しなきゃいけないって決まりはないよ
0671デフォルトの名無しさん
2010/06/12(土) 12:50:25if (a[i][j] == 0) printf("□");
ってやると配列が無駄な気がして
そもそもこの方法じゃ四角と四角の間に隙間ができて基盤ぽくならないですよね
0672デフォルトの名無しさん
2010/06/12(土) 12:51:59"基盤"か"碁盤"か。
もし碁盤のつもりなら、交点を中心に円を描くから、
int a[19][19];
にして置かないと。
0673デフォルトの名無しさん
2010/06/12(土) 12:53:45すいません
0674デフォルトの名無しさん
2010/06/12(土) 13:32:070675デフォルトの名無しさん
2010/06/12(土) 13:35:31switch文は使っていいの?
0676デフォルトの名無しさん
2010/06/12(土) 13:37:130677デフォルトの名無しさん
2010/06/12(土) 13:41:40まだ習ってないんでfor, while, ifのみでお願いします
>>676
if (a[i][j] == 0) printf("□");
みたいにやるくらいなら
for(i = 0; i < 18; i++) {
for (j = 0; j < 18; j++) {
printf("□");
}
printf("\n");
}
で十分な気がするんです
配列を有効活用出来ないっていうか
使おうと思えば使えますけど無駄になるような気がして
0678デフォルトの名無しさん
2010/06/12(土) 13:44:55━ ==1
┃ ==2
┣ ==3
┫==4
┻ ==5
┳ ==6
┏━ ==7
━┓==8
┗━ ==9
━┛==10
座標ごとにみたいな感じで配列に数字入れといて初期化して
出力のための関数で
if(a[i][j]==1) printf("━");
…
みたいなのを作っていけばおk
0679デフォルトの名無しさん
2010/06/12(土) 13:45:390680デフォルトの名無しさん
2010/06/12(土) 13:49:24それでやってみます
0681デフォルトの名無しさん
2010/06/12(土) 13:55:28データと表示部分は分けるべき
enum{NONE,WHITE,BLACK}として
枠を書きつつ
if (a[i][j] == NONE) printf(" ");
else if(a[i][j] == WHITE) printf("○");
else if(a[i][j] == BLACK) printf("●");
else printf("?");
みたいに配列の内容によって表示を変えるようにした方がいい
0682デフォルトの名無しさん
2010/06/12(土) 13:58:36ありがとうございます
でもenumってやつはまだ習ってなくてよくわからないです(´;ω;`)
0683デフォルトの名無しさん
2010/06/12(土) 14:04:53#define NONE 0
#define WHITE 1
#define BLACK 2
でもいいよ
間違っても>>678みたいに配列に表示部分の数字を持たせるなよ
あとで石をいじるときに苦労するぞ
0684デフォルトの名無しさん
2010/06/12(土) 14:07:130685デフォルトの名無しさん
2010/06/12(土) 19:42:30int main(void)
{
int i, j;
char board[19][19] = {0};
char *mark[] = {"+", "○", "●"};
for(i=0; ;i++) {
for(j=0; j<19; j++) printf(" |");
printf("\n");
if(i==19) break;
for(j=0; j<19; j++) printf("―%s", mark[board[i][j]]);
printf("―\n");
}
return 0;
}
0686デフォルトの名無しさん
2010/06/12(土) 20:05:40[1] 授業単元: プログラム実験
[2] 問題文(含コード&リンク): http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10676.txt
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
[3.3] 言語: Cです
[4] 期限: ([2010年06月14日22:59まで] または [無期限] のいずれか)
[5] その他の制限: よろしくお願いします!!
0687デフォルトの名無しさん
2010/06/12(土) 20:30:31[1] 授業単元:情報処理
[2] 問題文(含コード&リンク):フィボナッチ数列に出現する数字を順に並べた時(「1,1,2,3,5,8,13,21、・・・」を
「1,1,2,3,5,8,1,3,2,1、・・・」とみなす)
非常にランダムな動きをする。50番目の数字が何であるかを求めるプログラムをかけ。
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン:よくわかんないですけどcentOSのGNOME端末でのコンパイル
[3.3] 言語:C
[4] 期限:できるだけ早くお願いします><
[5] その他の制限:#include<math.h>をつかわずに#include<stdio.h>のみのプログラムでお願いします。
0688デフォルトの名無しさん
2010/06/12(土) 20:31:03{
while(n1 < n2) {
int temp = arr[n1];
arr[n1++] = arr[n2];
arr[n2--] = temp;
}}
void arr_rev2(int *p1, int *p2)
{
while(p1 < p2) {
int temp = *p1;
*p1++ = *p2;
*p2-- = temp;
}}
0689デフォルトの名無しさん
2010/06/12(土) 20:46:37#include <stdio.h>
int main(void)
{
int f1 = 1, f2 = 1, c = 2, i, j;
while(1) {
f1 += f2;
f2 = f1 - f2;
for(i = 0,j = 1; j < f1; i++, j*=10);
c += i;
if(c >= 50) {
for(i = c; i > 50; i--) f1 /= 10;
printf("%d\n", f1 % 10);
break;
}}
return 0;
}
0690デフォルトの名無しさん
2010/06/12(土) 20:49:35main文はどうなりますか?
計算時間を測定しなければならないんですが、よくわからないのでお願いします!
0691デフォルトの名無しさん
2010/06/12(土) 20:57:26stdio.hに時間の測定をする関数は含まれてない
time.hが必要
0692デフォルトの名無しさん
2010/06/12(土) 21:17:03#include <time.h>
void arr_rev1(int arr[], int n1, int n2)
{
while(n1 < n2) {
int temp = arr[n1];
arr[n1++] = arr[n2];
arr[n2--] = temp;
}
}
void arr_rev2(int *p1, int *p2)
{
while(p1 < p2) {
int temp = *p1;
*p1++ = *p2;
*p2-- = temp;
}
}
int main (void){
int t1 ,t2;
double t0;
t1 = clock();
ここがわかりません よろしくお願いします!
t2 = clock();
t0 = (t2 - t1 + 0.0) / CLOCKS_PER_SEC;
printf("%d %f\n",c,t0);
return 0;
}
0693デフォルトの名無しさん
2010/06/12(土) 21:26:200694デフォルトの名無しさん
2010/06/12(土) 21:33:130695デフォルトの名無しさん
2010/06/12(土) 23:01:41[2] 問題文(含コード&リンク):2次元配列を使って2点を結ぶ線分を引くプログラムを書く
[3] 環境
[3.1] OS:Windows vista
[3.2] コンパイラ名とバージョン:Visual C++
[3.3] 言語: C
[4] 期限: 無期限
[5] その他の制限:if, for, while, マクロ, 配列のみでお願いします
関数, ポインタ, swich, stdio.h以外のヘッダは使用不可です。
0696デフォルトの名無しさん
2010/06/13(日) 00:12:42その"線"とやらは
*********
こんなアスタリスクの集合みたいなのでいいの?
0697デフォルトの名無しさん
2010/06/13(日) 00:15:020698デフォルトの名無しさん
2010/06/13(日) 00:15:180699デフォルトの名無しさん
2010/06/13(日) 00:20:54たぶんそうです
>>698
デバイス・・・?
ごめんなさい
たぶん使わない方がいいと思います
0700デフォルトの名無しさん
2010/06/13(日) 00:26:08windowsなら線はデバイスコンテキスト使ってウインドに描画するモノだ。
C言語自体に描画する標準手法はない。そういうものは言語の外の話だからな。
なんか教材で絵が描けるライブラリとか使ってないのか?
0701デフォルトの名無しさん
2010/06/13(日) 00:42:19使ってないです
てか>>697の言うとおり正確な図を書くのではなく
その発送やら配列の使い方やらを学ぶための問題なので
問題文を満たすなんちゃってのプログラムが書ければそれでいいと思います
0702デフォルトの名無しさん
2010/06/13(日) 01:02:14ふーん。じゃあこんなんでどう?
http://codepad.org/tuBrtADI
0703デフォルトの名無しさん
2010/06/13(日) 01:06:56×canvas[y][i] = 1;
○canvas[i][y] = 1;
0704デフォルトの名無しさん
2010/06/13(日) 01:19:03やっぱまちがえてた。こっちが最後。
点(x1,y1)と点(x2,y2)を色々変えてみればいろいろ引けるよ。
http://codepad.org/cI0oiouq
0705デフォルトの名無しさん
2010/06/13(日) 01:33:25[2] 問題文(含コード&リンク):四則演算の記号の個数を入力すると、その個数に合わせた
文字列を表示するようにしなさい。
[3] 環境
[3.1] OS:Windows XP
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C
[4] 期限:2010年6月14日まで
実行例:
記号の個数を入力
+: 4
-: 2
*: 3
/: 2 <===入力した文字列中に/記号は2個
結果
++++--***// <===四則演算の記号のみで出力する
0706デフォルトの名無しさん
2010/06/13(日) 01:44:55こんなかんじ?
int main(int argc, char ** argv)
{
int i, a, b, c, d;
printf("記号の個数を入力\n");
printf("+:");
scanf("%d", &a);
printf("-:");
scanf("%d", &b);
printf("*:");
scanf("%d", &c);
printf("/:");
scanf("%d", &d);
for(i = 0 ; i < a ; i++) putchar('+');
for(i = 0 ; i < b ; i++) putchar('-');
for(i = 0 ; i < c ; i++) putchar('*');
for(i = 0 ; i < d ; i++) putchar('/');
return 0;
}
0707デフォルトの名無しさん
2010/06/13(日) 01:53:40ブレセンハムの直線を引くアルゴリズムでくぐれ
0708デフォルトの名無しさん
2010/06/13(日) 01:59:48http://codepad.org/OlrSiYQp
0709デフォルトの名無しさん
2010/06/13(日) 02:49:490710デフォルトの名無しさん
2010/06/13(日) 04:34:25縦線が引けねーぞw
0711デフォルトの名無しさん
2010/06/13(日) 09:05:06int mpow1(int a, int e, int m) {
int r = 1;
while(e--) r = (r * a) % m;
return r;
}
int mpow2(int a, int e, int m) {
int r = 1, p = a % m;
while(1) {
if(e & 1) r = (r * p) % m;
if(!(e >>= 1)) break;
p = (p * p) % m;
}
return r;
}
0712デフォルトの名無しさん
2010/06/13(日) 09:39:25こんなんでいいかな?うちの環境では全部1秒未満で終了するので全部0になるけど。
int main(void)
{
int data[] = {1000000, 10000000, 100000000};
int i, *buf;
clock_t t0, t1, t2;
for (i = 0; i < (int)(sizeof(data) / sizeof(data[0])); i++) {
if ((buf = (int *)malloc(sizeof(int) * data[i])) == NULL) {
printf("メモリが足りません。\n");
exit(1);
}
t1 = clock();
arr_rev1(buf, 0, data[i] - 1);
t2 = clock();
t0 = (clock_t)((t2 - t1 + 0.0) / CLOCKS_PER_SEC);
printf("arr_rev1(n = %d): %f\n", data[i], t0);
t1 = clock();
arr_rev2(buf, &buf[data[i] - 1]);
t2 = clock();
t0 = (clock_t)((t2 - t1 + 0.0) / CLOCKS_PER_SEC);
printf("arr_rev2(n = %d): %f\n\n", data[i], t0);
free(buf);
}
return 0;
}
0713デフォルトの名無しさん
2010/06/13(日) 09:44:53それからこうしないとnが偶数の時に実行時エラーになるか暴走する。
void arr_rev1(int arr[], int n1, int n2)
{
while (n1 <= n2) {
int temp = arr[n1];
arr[n1++] = arr[n2];
arr[n2--] = temp;
}
}
void arr_rev2(int *p1, int *p2)
{
while (p1 <= p2) {
int temp = *p1;
*p1++ = *p2;
*p2-- = temp;
}
}
0714デフォルトの名無しさん
2010/06/13(日) 09:54:180715デフォルトの名無しさん
2010/06/13(日) 10:17:27<=じゃなくて<でやってみろよ
Windowsだとエラーダイアログを吐いて落ちる
0716デフォルトの名無しさん
2010/06/13(日) 10:19:01>>713は取り消して下さい(汗
0717デフォルトの名無しさん
2010/06/13(日) 10:20:410718デフォルトの名無しさん
2010/06/13(日) 10:47:50if ((buf = (int *)malloc(sizeof(int) * data[i])) == NULL) {
を
if ((buf = (int *)malloc(data[i])) == NULL) {
と書いていて落ちたのを勘違いしてただけ
忘れてくれ
0719デフォルトの名無しさん
2010/06/13(日) 10:57:520720デフォルトの名無しさん
2010/06/13(日) 11:45:090721デフォルトの名無しさん
2010/06/13(日) 11:53:270722デフォルトの名無しさん
2010/06/13(日) 11:55:17[2] 問題文(含コード&リンク): 文字とその確率を入力しそれに対するハフマン符号を文字に割当て
表示する
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語: C
[4] 期限: (2010年6月14日
[5]
0723デフォルトの名無しさん
2010/06/13(日) 12:22:080724デフォルトの名無しさん
2010/06/13(日) 12:31:28char b;
int i;
short s;
double d;
char c;
} test;
とあるプログラム文の一部で、
struct内のみいじって出来るだけ少ないメモリを使用するようにする。
という問題なのですが良く分かりません。
上から順にchar,char,short,int,doubleと並び替えても違いました。
文の中でchar bを使ってなかったので、そもそもchar b;は必要なのか?と思い消しても駄目でした。
0725デフォルトの名無しさん
2010/06/13(日) 12:32:11int main() {
test a;
test many[10000];
printf("Address of char member: %p\n", &a.c);
printf("Address of int member: %p\n", &a.i);
printf("Address of short member: %p\n", &a.s);
printf("Address of double member: %p\n", &a.d);
printf("Difference between addresses of int and char: %d\n",
(int)&a.i - (int)&a.c);
printf("Difference between addresses of short and int: %d\n",
(int)&a.s - (int)&a.i);
printf("Size of char: %d\n", sizeof(char));
printf("Size of short: %d\n", sizeof(short));
printf("Size of int: %d\n", sizeof(int));
printf("Size of double: %d\n", sizeof(double));
printf("Size of test structure: %d\n", sizeof(test));
printf("Size of array of test structures: %d\n", sizeof(many));
return 0;
}
0726デフォルトの名無しさん
2010/06/13(日) 12:35:250727デフォルトの名無しさん
2010/06/13(日) 12:40:29もとの順番では32tyeで、char,char,short,int,doubleに並び替えたら16byteになるからOKでは?
0728デフォルトの名無しさん
2010/06/13(日) 12:45:06関数の内容を吟味する前に実行してエラーが出たから勘違いしたんだよカス
その上で後から内容は見るつもりだったわ
お前みたいなヴォケに言われなくてもな
0729デフォルトの名無しさん
2010/06/13(日) 12:47:000730デフォルトの名無しさん
2010/06/13(日) 12:48:420731デフォルトの名無しさん
2010/06/13(日) 12:49:47http://codepad.org/n8gRbiTl
>>724
並べ替えても最小になるのは環境依存だしあまり意味がない気がするのだが組み込みの実習とかなのか?
ただそのプログラムならunion使っても問題ないからunion使えばいい
0732デフォルトの名無しさん
2010/06/13(日) 12:53:41人としてまで言うか
関係ないだろカス
0733デフォルトの名無しさん
2010/06/13(日) 12:54:210734デフォルトの名無しさん
2010/06/13(日) 12:56:560735デフォルトの名無しさん
2010/06/13(日) 12:57:25Byte数は分からないが
C++ならcharは1、C言語ならcharは1 Byteで1 <= sizeof(char) <= sizeof(short int) <= sizeof(int) <= sizeof(double)は保証されているので、小さい順に(char, char, short, int, doubleの順に)並べれば少なくとも大きくはならない
つまり、等しくなるか小さくなるかのどちらかである
union使おうとしたのは内緒ね
0736デフォルトの名無しさん
2010/06/13(日) 12:58:330737デフォルトの名無しさん
2010/06/13(日) 13:00:190738デフォルトの名無しさん
2010/06/13(日) 13:01:55パディングというものがあってだな・・・決め打ちはデータの送受信で死ぬ
0739デフォルトの名無しさん
2010/06/13(日) 13:05:40注意をするなら言い方ってものがあるだろうが
お前らわざと逆ギレを誘うような言い方しやがって
0740デフォルトの名無しさん
2010/06/13(日) 13:07:060741デフォルトの名無しさん
2010/06/13(日) 13:07:120742デフォルトの名無しさん
2010/06/13(日) 13:08:22会社で怒られたら出社拒否しそうだなw
0743デフォルトの名無しさん
2010/06/13(日) 13:11:26それはハフマン符号ではなくてコンマ符号ではないのか
0744デフォルトの名無しさん
2010/06/13(日) 13:12:25俺は言ってねえよ
馬鹿か
>>742
当たりめえだろ
物には言い方があるんだよ
覚えとけ
下手な注意はかえって相手の怒りを買うだけだ
0745デフォルトの名無しさん
2010/06/13(日) 13:15:460746デフォルトの名無しさん
2010/06/13(日) 13:19:380747デフォルトの名無しさん
2010/06/13(日) 13:20:140748デフォルトの名無しさん
2010/06/13(日) 13:27:31コンマ符号ではなくハフマン符号のつもりだがどこか間違ってる?
0749デフォルトの名無しさん
2010/06/13(日) 13:29:32火病を起こすのがデフォなんだよわかったか
0750デフォルトの名無しさん
2010/06/13(日) 13:31:44ごめんコンマ符号ではないわ
一意に復元可能な符号で瞬時符号でもあるがハフマン符号ではない
0751デフォルトの名無しさん
2010/06/13(日) 13:35:160752デフォルトの名無しさん
2010/06/13(日) 13:41:03[1] 授業単元: プログラミング実験
[2] 問題文(含コード&リンク): http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10678.txt
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
[3.3] 言語: C言語
[4] 期限: ([2010年06月14日00:00まで]
[5] その他の制限:よろしくお願いします
0753デフォルトの名無しさん
2010/06/13(日) 13:42:030754デフォルトの名無しさん
2010/06/13(日) 13:49:07[2] 問題文(含コード&リンク):四則演算の記号を連続し入力すると、各々の文字列を入れると、
文字の個数を結果として表示するようにしなさい。
[3] 環境
[3.1] OS:Windows XP
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語: C
[4] 期限:2010年6月14日
[5] int main(void){からスタート
実行例:
文字列を入力
***-++/+-+/ <===四則演算の記号のみを入力する。
結果
+: 4
-: 2
*: 3
/: 2 <===入力した文字列中に/記号は2個
0755デフォルトの名無しさん
2010/06/13(日) 13:52:06The example program below defines a structure with several members of different types. Copy and run the program, and find out how much memory the test structure uses.
Change the order of the members in the test structure. Observe the changes in memory layout and memory usage.
Try to find the program version where the test structure uses as little memory as possible. Change only the structure definition, not the program itself.
0756デフォルトの名無しさん
2010/06/13(日) 13:54:08例えば、cat data2
8
A
50
B
20
C
10
D
8
E
5
F
4
G
2
H
1
が与えられたとき
「2元符号語で最小の確率を持つ葉から最も確率が近い葉同士を区別するのに1ビット使っていく」と
A:0
B:10
C:1100
D:1101
E:1110
F:11110
G:111110
H:111111
になるべきではないかと、木の作り方によって符号語は変わるけど、平均符号長は最小になるはず
この場合だと平均符号長L = 2.2で、試しにソースプログラムで符号化した符号ではL = 2.22になった
よって、ハフマン符号とは言えない
0757デフォルトの名無しさん
2010/06/13(日) 13:59:41#include <stdio.h>
int main(void)
{
char str[256], *p, sign[] = "+-*/";
int i, cnt[256] = {0};
printf("文字列を入力\n");
scanf("%s", str);
for(p = str; *p; p++) cnt[*p]++;
printf("結果\n");
for(i = 0; i < 4; i++) printf("%c:%d\n", sign[i], cnt[sign[i]]);
return 0;
}
0758デフォルトの名無しさん
2010/06/13(日) 14:30:38なるほど手抜きせずにちゃんと木構造作らないとダメってことか
0759デフォルトの名無しさん
2010/06/13(日) 14:36:29C++が使えるならstd::mapを使って簡単に組めるんだが
0760デフォルトの名無しさん
2010/06/13(日) 14:36:54typedef struct { char b; int i; short s; double d; char c; } test;
http://codepad.org/sVj5d2d2
Size of test structure: 24
typedef struct { char b; char c; short s; int i; double d; } test;
http://codepad.org/I3j79dFU
Size of test structure: 16
typedef struct { double d; int i; short s; char b; char c; } test;
http://codepad.org/IQ3Iscby
Size of test structure: 16
# 何をどう勘違いしたんだ?
0761デフォルトの名無しさん
2010/06/13(日) 15:26:39This means that a program written with array[index] can be converted to using (almost) no [ and ].
Convert the program below. The only place where you need [ and ] is
for the declaration of the data structure (student marks[10]).
Before starting, save the output of the program for later checking.
Then work in very small steps. After each step, recompile your program and check (using diff)
that it is still working correctly (i.e. still produces the same output).
#include <stdio.h>
typedef struct {
int english;
int math;
} student;
0762デフォルトの名無しさん
2010/06/13(日) 15:28:06int main(void) {
int i, english_total=0, math_total=0;
student marks[10] = {
{45, 69},
{68, 80},
{57, 75},
{35, 50},
{60, 71},
{80, 74},
{78, 80},
{32, 46},
{48, 56},
{100, 100}
};
printf("英語\t数学\t平均\n");
for (i=0; i<10; i++) {
printf("%3d\t%3d\t%5.1f\n",
marks[i].english, marks[i].math,
(marks[i].english+marks[i].math)/2.0 );
}
for (i=0; i<10; i++) {
english_total += marks[i].english;
math_total += marks[i].math;
}
0763デフォルトの名無しさん
2010/06/13(日) 15:30:52printf("%5.1f\t%5.1f\t%5.1f\n",
english_total/10.0, math_total/10.0,
(english_total+math_total) / 20.0);
return 0;
}
Hint:
For various parts of your program, use the following steps:
Step 0) Compile and run the above program, and save the output for later tests using diff.
Step 1) Change array[i] to *(array+i). If necessary, add some more parentheses.
Step 2) Define variables p and endp, both pointers to the student structure.
Initialize endp so that it points to the location after the marks array.
Step 3) In each for loop, initialize p to point to the start of the marks array.
To do two initializations, link them with a comma (e.g. i=0, j=0).
Step 4) In each for loop, increment p in addition to incrementing i.
To do two increments, you can again use a comma (e.g. i++, j++).
Step 5) Change (marks+i) to p.
Step 6) Change (*pointer).member to pointer->member .
Step 7) Use the endp variable in the end condition of the for loop, comparing p and endp.
Step 8) Remove the integer loop variable i.
Remove unnecessary parentheses.
0764デフォルトの名無しさん
2010/06/13(日) 16:03:32[ ] 使わずにポインタにしろって問題?
0765デフォルトの名無しさん
2010/06/13(日) 16:07:29そんな感じです。
先生がGAIJINさんなもので、どうしても英語になります。
0766デフォルトの名無しさん
2010/06/13(日) 16:07:49student *p;
for (p=marks; p<marks+10; ++p) {
printf("%3d\t%3d\t%5.1f\n",
p->english, p->math,
(p->english+p->math)/2.0 );
}
for (p=marks; p<marks+10; ++p) {
english_total += p->english;
math_total += p->math;
}
0767デフォルトの名無しさん
2010/06/13(日) 16:09:30C言語ではポインタと配列はほぼ同じである。
これは配列array[index]を使用したプログラムは[と]を使わないプログラムに書き換えられるという事である。
下のプログラムを書き換えよ。
[と]を使って良いのは構造体データ(student marks[10])の宣言だけとする。
始める前に後で比較するために最初のバージョンを保存しておけ。
そして少しずつ変更を加えよ。
変更を加える度にdiffで比較し、再コンパイルしてまだ動作することを確認しながら進めろ。
だな。
0768デフォルトの名無しさん
2010/06/13(日) 16:24:09p < marks+10
↓
student *endp = marks+10;
p != endp
0769デフォルトの名無しさん
2010/06/13(日) 16:52:37[2] 問題文(含コード&リンク):実行例のように入力した文字列を文字型配列に代入し、
規則に従った文字列を出力するようにしなさい。
[3] 環境
[3.1] OS:Windows XP
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語: C
[4] 期限:2010年6月14日
[5] int main(void){からスタート
実行例:
文字列を入力
*3-2*4n+5 <===「*3」は*を3回表示するということ、
結果 「n」は改行ということ。
***--**** *3-2*4n+5は、*を3回表示した後、-を2回、*を4回
+++++ 表示し、改行した後、+を5回するという意味
0770デフォルトの名無しさん
2010/06/13(日) 16:56:34大体そんな感じでいいと思うがdiffでの比較対象が明らかになってないので
動作確認は変更後の出力結果が変更前のそれとdiffで一致するかどうかね
>>767を読んだとき、diffの対象がソースコードに思えたので一応言っておく
0771デフォルトの名無しさん
2010/06/13(日) 17:06:04それにしても、出来上がったのを提出しろとか、だれかにやらせろとか、
または途中経過も、とかは英語では言ってないの?
0772デフォルトの名無しさん
2010/06/13(日) 17:07:48ハフマン符号お願いします
0773デフォルトの名無しさん
2010/06/13(日) 17:37:59[2] 問題文(含コード&リンク): http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10680.txt
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
[3.3] 言語: C言語
[4] 期限: 2010年06月15日8:50まで
/*?? 文章 */ がある所にプログラムを書き込む方式です
よろしくお願いします
0774デフォルトの名無しさん
2010/06/13(日) 18:01:29[2]
f(1)=1
f(2)=12-34=-22
f(3)=123-894+765=-6
f(4)=1234-1213145+1116156-10987=-106742
f(5)=12345-161718196+152425207-142322218+131211109
......
規則性を見いだしてf(n)を計算するプログラム(n<=1000迄は最小限対応)
全桁正確に計算すること
[3] WIndows XP sp3/Visual C++2008/C言語
[4] 6/30迄
[5] stdio.hのみ#include。stdio.hで定義されている関数や定数
を利用出来る。それ以外は自分で定義して使うこと
0775デフォルトの名無しさん
2010/06/13(日) 18:12:45f(1)=1
f(2)=12
-34=-22
f(3)=123
-894
+765=-6
f(4)= 1 2 3 4
-121314 5
+111615 6
-10 9 8 7=-106742
f(5)= 1 2 3 4 5
-16171819 6
+15242520 7
-14232221 8
+13121110 9
0776デフォルトの名無しさん
2010/06/13(日) 18:19:01やりかけです。エラーが…
#include <stdio.h>
typedef struct {
int english;
int math;
} student;
int main(void) {
english_total=0, math_total=0;
student *p = {
{45, 69},
(略)
{100, 100}
};
student *endp=p;
p!=endp;
printf("英語\t数学\t平均\n");
for (p=marks; p<endp; p++) {
printf("%3d\t%3d\t%5.1f\n",
*p.english, *p.math,
(*p.english+*p.math)/2.0 );
}
for (p=marks; p<endp; p++) {
english_total += *p.english;
math_total += *p.math;
}
printf("%5.1f\t%5.1f\t%5.1f\n",
english_total/10.0, math_total/10.0,
(english_total+math_total) / 20.0);
return 0;
}
0777デフォルトの名無しさん
2010/06/13(日) 18:19:020778デフォルトの名無しさん
2010/06/13(日) 18:20:23演算子の優先順位
*p.english
(*p).english
0779デフォルトの名無しさん
2010/06/13(日) 18:22:24そのほかわからん。
0780デフォルトの名無しさん
2010/06/13(日) 18:22:28f(n) = 1 2 ... n-1
-[4*(n-1)] ?
+[4*(n-1)-1] ?
-[4*(n-1)-2] ?
:
0781デフォルトの名無しさん
2010/06/13(日) 18:24:12あー。なるほど。渦巻き状いにまわるのか
0782デフォルトの名無しさん
2010/06/13(日) 18:28:000783デフォルトの名無しさん
2010/06/13(日) 18:29:28渦巻き状に埋めてから 筆算のように演算しないと厳しいか?
0784デフォルトの名無しさん
2010/06/13(日) 18:41:10http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10682.c
/* 実行結果
a e m=40000 16000000 30001
計算回数:15999999
0.940000秒かかりました
計算回数:29
0.000000秒かかりました
*/
0785デフォルトの名無しさん
2010/06/13(日) 18:42:57f(2)=12-43=-31
の間違いじゃね?
0786デフォルトの名無しさん
2010/06/13(日) 18:56:32筆算しようとすると1000 x 4000いらないか?
n=1000のときは最底辺は29982997...1999だぜ。
0787デフォルトの名無しさん
2010/06/13(日) 18:57:04#include <stdio.h>
typedef struct {
int english;
int math;
} student;
int main(void) {
int p,endp,english_total=0, math_total=0;
student *p{
{45, 69},
(略)
{100, 100}
};
printf("英語\t数学\t平均\n");
for (p=marks; p<endp; p++) {
printf("%3d\t%3d\t%5.1f\n",
p->english, p->math,
(p->english+p->math)/2.0 );
}
for (p=marks; p<endp; p++) {
english_total += p->english;
math_total += p->math;
}
printf("%5.1f\t%5.1f\t%5.1f\n",
english_total/10.0, math_total/10.0,
(english_total+math_total) / 20.0);
return 0;
}
あと少しで完成しそうですが…
pとendpをどのように定義するかで悩んでます。
0788デフォルトの名無しさん
2010/06/13(日) 19:15:470789デフォルトの名無しさん
2010/06/13(日) 20:14:41[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10683.txt
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
[3.3] 言語: C言語
[4] 期限: 2010年06月16日
よろしくお願いします
0790458
2010/06/13(日) 20:21:14とりあえず渦は巻けたぞ
http://ideone.com/W7KtS
0791デフォルトの名無しさん
2010/06/13(日) 20:29:15Step 2) Define variables p and endp, both pointers to the student structure.
>>766みたいにすればいいよ
0792デフォルトの名無しさん
2010/06/13(日) 20:35:28お願いします。
0793デフォルトの名無しさん
2010/06/13(日) 20:41:08- #define s 10
+ #define s 8
0794デフォルトの名無しさん
2010/06/13(日) 20:43:050795デフォルトの名無しさん
2010/06/13(日) 20:46:14とんでもない桁の計算になる気がするんだが
0796デフォルトの名無しさん
2010/06/13(日) 20:49:15http://ideone.com/fb5wE
0797デフォルトの名無しさん
2010/06/13(日) 20:53:45金がもらえるんならありがたいけどな。
ちなみに俺はコーディングがしたくてIT企業に入ったのにできないからここで欲求不満を解消してるだけ
0798デフォルトの名無しさん
2010/06/13(日) 20:55:01Nが1000の場合、どんだけ桁数になるんだろ。
0799デフォルトの名無しさん
2010/06/13(日) 21:02:52行ごとに交互に減算と加算をするから対して大きな数にならないはず
0800デフォルトの名無しさん
2010/06/13(日) 21:05:160802デフォルトの名無しさん
2010/06/13(日) 21:08:210803デフォルトの名無しさん
2010/06/13(日) 21:08:25stdio.h 以外は include 不可だから、f("1234","-5678") -> "-4444"みたいな関数が必要?
0804デフォルトの名無しさん
2010/06/13(日) 21:14:47http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10684.c
0805デフォルトの名無しさん
2010/06/13(日) 21:16:130806デフォルトの名無しさん
2010/06/13(日) 21:17:53数値列を生成することろまで作った。 あとは誰か頼む。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10685.c
/* 実行結果
n=6
1 2 3 4 5 6
20 21 22 23 24 7
19 32 33 34 25 8
18 31 36 35 26 9
17 30 29 28 27 10
16 15 14 13 12 11
*/
0807デフォルトの名無しさん
2010/06/13(日) 21:19:550808デフォルトの名無しさん
2010/06/13(日) 21:27:13#include <stdio.h>
typedef struct {
int english;
int math;
} student;
int main(void) {
int english_total=0, math_total=0;
student marks[10]{
{45, 69},
(略)
{100, 100}
};
student *p;
student *endp;
p!=endp;
printf("英語\t数学\t平均\n");
for (p=marks; p<endp; p++) {
printf("%3d\t%3d\t%5.1f\n",
p->english, p->math,
(p->english+p->math)/2.0 );
}
for (p=marks; p<endp; p++) {
english_total += p->english;
math_total += p->math;
}
printf("%5.1f\t%5.1f\t%5.1f\n",
english_total/10.0, math_total/10.0,
(english_total+math_total) / 20.0);
return 0;
}
>>766と>>768を参考にしましたがうまくいかないです。
0809デフォルトの名無しさん
2010/06/13(日) 21:30:140810デフォルトの名無しさん
2010/06/13(日) 21:45:11とりあえずN=7で動くことは確認できたからうp
http://codepad.org/GLVHk36x
多倍長演算は作ったこと無いのでごり押しです。
多分すごいダサイからこの部分を直してくれる人期待。
Nを1000にすると配列を壊すらしく動かなかった。
だから多分すごい桁数になるのではないか?
0811デフォルトの名無しさん
2010/06/13(日) 21:57:57ハフマン記号がわからないからパスw
0812デフォルトの名無しさん
2010/06/13(日) 22:06:5715行目の「p!=endp;」は、書く場所が違うというかいらない。ifとかforじゃないのに変数の比較してて変だって思わなかった?
>>768は>>761の「for (p=marks; p<marks+10; ++p) {」の「p < marks+10」を書き換えろって意味。
それはもうやってるけど、比較する前にendpに何らかの値を代入しなければいけないよね?それがmarks+10。
0813810
2010/06/13(日) 22:36:56N=4でやったら多倍長演算で失敗してたので修正したよ。
2行ほどだけど。
一応N=1000で動作するのは確認したが、結果が正しいか自分でテストしてね。
環境によってはスタックが大きすぎてコンパイルできないかも。
http://codepad.org/JHBwazY1
0814デフォルトの名無しさん
2010/06/13(日) 23:01:48誰かお願いします。
0815デフォルトの名無しさん
2010/06/13(日) 23:05:011000までのリスト作ったぞ
http://eload.run.buttobi.net/cgi-bin/img/e_304.zip
N=1000のとき>>813と比較すると最初の4桁が違ってるから正しいかは保障はしない
0816デフォルトの名無しさん
2010/06/13(日) 23:19:16#include <stdio.h>
int main(void) {
char buffer[100], c, *buffer_pos, pattern = 0;
int i;
buffer_pos = buffer;
printf("input string:");
scanf("%s", buffer);
while (c = *(buffer_pos++)) {
if (c == 'n') {
printf("\n");
pattern = 0;
continue;
}
if (!pattern)
pattern = c;
else {
for (i = 0; i < c - '0'; i++)
printf("%c", pattern);
pattern = 0;
}
}
return 0;
}
エラーチェックとかは一切考慮してない
0817デフォルトの名無しさん
2010/06/13(日) 23:25:39ありがとうございます。
#include <stdio.h>
int main(void){
int i=0, j, rep;
char buf[100], c;
printf("Command > ");
fgets(buf, 100, stdin);
while((c = buf[i++]) != '\0') {
/* printf("in=%c\n",c); */
switch(c){
case '*':
case '-':
case '+':
rep = atoi(&buf[i]);
for(j=0; j<rep; j++) putchar(c);
/* printf("rep=%d\n",rep); */
break;
case 'n':
putchar('\n');
c = '\0';
break;
default:
c = '\0';
}
}
}
0819デフォルトの名無しさん
2010/06/13(日) 23:43:060820デフォルトの名無しさん
2010/06/13(日) 23:51:59N=11以降違うっぽいから3桁以上の数字の扱いがおかしいのかも
0821デフォルトの名無しさん
2010/06/13(日) 23:54:34#include <stdio.h>
int main(void){
int n, i, j, k, t, ns[1000] = {0}, tmp, digit[2] = {0}, f, d;
char a[2][6000] = {0}, temp[6000] = {0};
printf("n=");
scanf("%d", &n);
for (i = 0; i < n; i++) {
for (j = 0; j < n; j++) ns[j] += ((j < n / 2) ? 1 : -1);
tmp = (n - 2 * i);
tmp *= tmp;
for (j = i - 1; j < n - i; j++, tmp--) if (j >= 0) ns[j] = tmp;
tmp = ns[n - i - 1];
for (j = n - i - 1; j <= i; j++) ns[j] = tmp++;
tmp = n * n;
for(j = n - 1, k = 0; j >= 0; j--) for(t = tmp - ns[j]; t; t /= 10) temp[k++] = t % 10;
for(j = 0; j < k || a[i&1][j]; j++) {
a[i&1][j] += temp[j];
if(a[i&1][j] >= 10) { a[i&1][j+1]++; a[i&1][j] -= 10;}}
if(digit[i&1] < j) digit[i & 1] = j;
for(j = 0; j < k; j++) temp[j] = 0;}
d = digit[0] > digit[1] ? digit[0] : digit[1];
for(i = d - 1; i >= 0; i--) {
if(a[0][i] > a[1][i]) { f = 0; break;}
if(a[0][i] < a[1][i]) { f = 1; break;}}
for(i = 0; i < d; i++) {
a[f][i] -= a[1-f][i];
if(a[f][i] < 0) { a[f][i+1]--; a[f][i] += 10;}}
while(a[f][d]==0) d--;
if(f) putchar('-');
while(d >= 0) printf("%d", a[f][d--]);
return 0;}
0822デフォルトの名無しさん
2010/06/14(月) 00:32:26よかったらこれお願いします
0823810
2010/06/14(月) 00:48:21指摘ありがとうございます。
間違ってmyaddsubの中のp1++,p2++していました。
どっちかが先に終わったら++しちゃいけないですよね。
修正しました。
http://codepad.org/eO9N9Mw4
N=1000も>>815と一致したので多分おk。。
>>821
こちらはすごい簡素なのにイケてますね。
0824デフォルトの名無しさん
2010/06/14(月) 01:30:54すごいなこのスレの住人…
0825デフォルトの名無しさん
2010/06/14(月) 02:03:10ほんとスゴイよね。
スゴイC使いも時々はBASICとか他のプログラミング言語も
勉強してるって良く聞くけど効果あるのかな?
0826デフォルトの名無しさん
2010/06/14(月) 03:34:49以下のプログラムの実行結果を記述せよ。
また、”//重要ポイント”とした行の動作について説明せよ。
main(){
int j;
short *ip;
short ii[6];
ip=ii;
*ii=128; *ip++; //重要ポイント
*ip++=256;
ii[2]=512; *ip++;
*ip++=1024; //重要ポイント
ii[4]=2048; *ip++;
*ip=4096;
(*ip)++; //重要ポイント
for(j=0;j<6;j++)
printf("ii[%d] = %d ",j,ii[j]);
printf(" Adress of ii[0] is %04x.",ii);
printf(" Adress of ip is %04x.",ip);}
ただし、short型は2バイト。ii[0]のアドレスを0x00010000。
主記憶の1アドレスに対する単位を1バイトとする。処理系によっては警告が出る可能性もある。
とりあえずプログラムを書いて実行してみたのですが、「ii[0]のアドレスを0x00010000」とあるので間違っている気もします。
一応以下が実行結果です。
ii[0] = 128 ii[1] = 256 ii[2] = 512 ii[3] = 1024 ii[4] = 2048 ii[5] = 4097 Adress of ii[0] is 12ff3c. Adress of ip is 12ff46.
実行結果を見て、iiのアドレスをipに入れてii[奇数]に関してはipに入っているアドレスに値を代入、というふうに解釈しています。
0827デフォルトの名無しさん
2010/06/14(月) 03:45:410828デフォルトの名無しさん
2010/06/14(月) 04:12:31詰まってるとこに関してだが
「ii[0]のアドレスを0x00010000」と仮定してprintfで何が出力されるか予想しなさいということだろう。
プログラム上で実行しても合うはずがない。
0829デフォルトの名無しさん
2010/06/14(月) 05:04:38ありがとうございます。ただ、必要のないところ、というのが見極められないですね。
printf(" Adress of ii[0] is %04x.",ii);
printf(" Adress of ip is %04x.",ip);
ここに関してですが、たぶんipのアドレスはii[0]のアドレスに対して10増えていると思うので、
Adress of ii[0] is 10000. Adress of ip is 1000A.
でいいのでしょうか?“%04x”の“04”を考慮した書き方が分からないです。
4桁で書くということだと思うのですが、そもそも5桁目まであるので。
0830デフォルトの名無しさん
2010/06/14(月) 05:11:050831デフォルトの名無しさん
2010/06/14(月) 05:16:03ちゃんとリファレンス読め
0832デフォルトの名無しさん
2010/06/14(月) 05:57:13すみません。
ググッてみましたがリファレンスというものがなんなのかわからないです。
0833デフォルトの名無しさん
2010/06/14(月) 09:08:49http://msdn.microsoft.com/ja-jp/library/cc440165(VS.71).aspx
0834デフォルトの名無しさん
2010/06/14(月) 09:33:09ありがとうございます。
仕様というかそういうのをもっとよく理解しろということでしょうか。
まあ、なんとか自分で実験しておそらく「少なくとも4桁で足りないところには0を入れる」という意味ではないかと納得しました。
ヒントを与えてくれた方々ありがとうございました。
0835デフォルトの名無しさん
2010/06/14(月) 13:52:56When using fgets, the client program has to prepare a buffer for input.
Create a wrapper function (call it getline) for fgets that allocates a buffer using malloc and returns a pointer to the buffer.
Return NULL when there is no more data to read (end-of-file reached).
Assume that lines are at most 100 bytes long (including a terminating null byte).
Also, assume that input is always from stdin.
Create a main program that reads in up to 100 lines.
Output the lines in reverse order.
Use an array of pointers to store the pointers to each line.
You do not have to free the memory used.
Test Data
Test input: 09C1_in.txt ; test output: 09C1_out.txt .
Submit your program to the Programm Checking System.
Hint:
To use malloc, you need to include stdlib.h.
Hint:
Because the length of the buffer and stdin are constant,
and you do not need to pass the buffer to the function,
the signature of your function should be char *getline(void).
Hint:
A wrapper function is a function that wraps another function to make it easier to use.
0836デフォルトの名無しさん
2010/06/14(月) 13:56:57http://www.dotup.org/uploda/www.dotup.org963836.txt
09C1_out.txt
http://www.dotup.org/uploda/www.dotup.org963837.txt
0838デフォルトの名無しさん
2010/06/14(月) 18:10:39[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10688.txt
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン:
[3.3] 言語:C
[4] 期限:2010 6/16まで
[5] その他:(1)〜(8)の指示のようにお願いします
0839デフォルトの名無しさん
2010/06/14(月) 18:35:07http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10689.txt
0840デフォルトの名無しさん
2010/06/14(月) 19:32:57[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10691.txt
[3] 環境
[3.1] OS:unix
[3.2] コンパイラ名とバージョン:gcc 3.4 emacsで作成して、k-termでコンパイルするやつです
[3.3] 言語:c
[4] 期限: 6月15日
どうぞよろしくお願いします。
問題が見にくいと思われますのでpdfがあります。ここからダウンロードお願いします。
0841デフォルトの名無しさん
2010/06/14(月) 19:33:50[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10691.txt
[3] 環境
[3.1] OS:unix
[3.2] コンパイラ名とバージョン:gcc 3.4 emacsで作成して、k-termでコンパイルするやつです
[3.3] 言語:c
[4] 期限: 6月15日
どうぞよろしくお願いします。
問題が見にくいと思われますのでpdfがあります。ここからダウンロードお願いします。http://www.dotup.org/uploda/www.dotup.org964291.pdf.html
連投すみません。。
0842デフォルトの名無しさん
2010/06/14(月) 19:47:02pdf大丈夫?教官名でてるけど
0843デフォルトの名無しさん
2010/06/14(月) 20:00:11#include <stdio.h>
#include <stdlib.h>
char *getline(void)
{
char *p = malloc(100);
return fgets(p, 100, stdin);
}
int main(void)
{
int i;
char *p[100];
FILE *fp;
for(i = 0; i < 100; i++) if((p[i] = getline()) == NULL) break;
fp = fopen("09C1_out.txt", "w");
while(i--) fprintf(fp, "%s", p[i]);
fclose(fp);
return 0;
}
0844デフォルトの名無しさん
2010/06/14(月) 20:16:24[2] 問題文(含コード&リンク):西暦を年号に変換するプログラムを作成する。
ただし、入力できるのは、1868年以降からであり、2008年以降も平成とする。
明治元年、大正元年、昭和元年、平成元年は、各々、1868年,1912年,1926年,1989年である。
下記を参考にプログラムを作成しなさい。
int gannen[]={1989, 1926, 1912, 1868};
char nengou[][8]={"heisei", "syouwa", "taisyou", "meiji"};
[3] 環境
[3.1] OS:Windows XP
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C
[4] 期限:2010年6月14日
[5] その他の制限:int main(void){から始まる
#include <stdlib.h>
int gannen[]={1989, 1926, 1912, 1868};
char nengou[][8]={"heisei", "syouwa", "taisyou", "meiji"};
int main(void){
int i, nen;
char buf[20];
do {
printf("seireki>=1867 > ");
fgets(buf, 20, stdin);
nen = atoi(buf);
} while (nen < 1868);
for(i=0; ;i++) {
if(nen >= gannen[i]) {
printf("%s %d nen\n", nengou[i], nen-gannen[i]+1 );
break;
}
}
}
0846デフォルトの名無しさん
2010/06/14(月) 20:39:450847デフォルトの名無しさん
2010/06/14(月) 20:49:58[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10694.txt
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C
[4] 期限:6月16日まで
[5] その他の制限:初心者です。なるべく簡単でお願いします。
よろしくお願いします。
0848デフォルトの名無しさん
2010/06/14(月) 21:02:44int main(){
int num,sum=0;
while(1){
scanf("%d",&num);
if(num==0) break;
sum+=num;
}
printf("%d",sum);
return 0;
}
0849838
2010/06/14(月) 21:10:11VC2008で実行してみたところ
(47) : error C2440: '=' : 'void *' から 'student_t *' に変換できません。
となってしまったのですがどうすればいいでしょうか
わかる方はよければ次のこともお願いします
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10695.txt
上記テキスト内の student_t st[STUDENT_NO] = 0
これの 0 の部分はどう書き換えればよいでしょうか
0850デフォルトの名無しさん
2010/06/14(月) 21:12:10この程度の問題が分からないってどんな授業受けてんの?
0851デフォルトの名無しさん
2010/06/14(月) 21:13:55情報系の専門学校出たヤツをPGとして雇ったら
「コンパイルって何ですか?」って聞かれたそうな。
0852デフォルトの名無しさん
2010/06/14(月) 21:16:180853デフォルトの名無しさん
2010/06/14(月) 21:20:01{0}
0854デフォルトの名無しさん
2010/06/14(月) 21:32:04その発想はなかった
0855デフォルトの名無しさん
2010/06/14(月) 21:45:17[2] if (head == NULL) head = stup;//一個目を入力
else if (head->st_id >= stup->st_id) {
/*?? (5) リストのhead側(先頭)にstupを追加する処理を記述する */
/*?? (6) headの中身を現在の先頭のものに入れ替える */
} else {
spt = head;
while (spt->next != NULL ) {
if (spt->next->st_id >= stup->st_id){
break;
}
/*?? (7) sptを次に操作するデータ用に更新する処理を記述する*/
}
stup->next = spt->next;
spt->next = stup;
}
[3] 環境
[3.1] Windows
[3.2] Visual Studio 2008
[3.3] C++
106 taka 65 80 90 100
101 kubo 50 85 70 65
103 hanako 70 75 65 80
104 akane 60 95 80 75
102 tarou 90 80 85 65
105 nara 80 70 50 95
↑これが 左端の番号順になるように(5)〜(7)になんてプログラム書き込めばいいんでしょうか
0856デフォルトの名無しさん
2010/06/14(月) 21:48:180857デフォルトの名無しさん
2010/06/14(月) 21:51:51[2] 問題文(含コード&リンク):図と同じASCII文字を表示するプログラムを作成しなさい。
ただし、プログラム中にちゃんと改行を行うこと。<==改行をしなくても勝手に改行されて表示されるため。
[3] 環境
[3.1] OS:Windows XP
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C
[4] 期限:2010年6月15日
[5] その他の制限:int main(void){から始まる
図
0x30; 0 0x31; 1 0x32; 2 0x33; 3
0x34; 4 0x35; 5 0x36; 6 0x37; 7
(省略)
0x78; x 0x79; y 0x7a; z 0x7b; {
0858デフォルトの名無しさん
2010/06/14(月) 21:51:58int main(void){
int i, j;
// for(i=0x20; i<0x80; i++)
for(i=0x30; i<0x7c; i++)
{
printf("0x%2x; %c ", i, i);
if(i%4 == 3) printf("\n\n");
}
}
>>849
.cpp ⇒ .c
0861デフォルトの名無しさん
2010/06/14(月) 23:36:13#include<math.h>
#define MAXITER 50
#define EPSILON 1e-10
#define X0 3.0
#define Y0 2.0
double f (double x, double y) { return x*x+x*y*y*y-9; }
double fx(double x, double y) { return 2.0*x; }
double fy(double x, double y) { return -1.0; }
double g (double x, double y) { return 3*x*x*y-y*y*y-4; }
double gx(double x, double y) { return 2.0*x; }
double gy(double x, double y) { return 2.0*y; }
/*--- Iteration method ---*/ void iteration(void)
{ int k;
double x0, y0;
double x1, y1;
double af, ag;
x0=X0; y0=Y0;
af=fabs(f(x0,y0));
ag=fabs(g(x0,y0));
printf("%-2s %-16s %-16s %-10s %-10s %-10s\n", "#k", "x", "y", "|f(x,y)|", "|g(x,y)|", "|f|+|g|"); printf("%2d %16.13f %16.13f %10.4e %10.4e %10.4e\n", 0, x0, y0, af, ag, af+ag);
for(k=1; k<=MAXITER; k++){ x1=x0-f(x0,y0)/fx(x0,y0); y1=y0-g(x0,y0)/gy(x0,y0);
x0=x1; y0=y1; af=fabs(f(x0,y0)); ag=fabs(g(x0,y0)); printf("%2d %16.13f %16.13f %10.4e %10.4e %10.4e\n", k, x0, y0, af, ag, af+ag);
if(af+ag<EPSILON) break; } }
0862デフォルトの名無しさん
2010/06/14(月) 23:40:50void displacement(void) { int k; double x0, y0; double af, ag; x0=X0; y0=Y0;
af=fabs(f(x0,y0));
ag=fabs(g(x0,y0));
printf("%-2s %-16s %-16s %-10s %-10s %-10s\n", "#k", "x", "y", "|f(x,y)|", "|g(x,y)|", "|f|+|g|");
printf("%2d %16.13f %16.13f %10.4e %10.4e %10.4e\n", 0, x0, y0, af, ag, af+ag);
for(k=1; k<=MAXITER; k++){ x0=x0-f(x0,y0)/fx(x0,y0);
y0=y0-g(x0,y0)/gy(x0,y0);
af=fabs(f(x0,y0));
ag=fabs(g(x0,y0));
printf("%2d %16.13f %16.13f %10.4e %10.4e %10.4e\n", k, x0, y0, af, ag, af+ag); i
f(af+ag<EPSILON) break; } }
/*--- Newton's method (NEWTON HOU) ---*/
void newton2(void)
{ int k; double x0, y0, x1, y1; double f0, fx0, fy0, g0, gx0, gy0;
double af, ag, dj; x0=X0; y0=Y0; af=fabs(f(x0,y0));ag=fabs(g(x0,y0));
printf("%-2s %-16s %-16s %-10s %-10s %-10s\n", "#k", "x", "y", "|f(x,y)|", "|g(x,y)|", "|f|+|g|");
printf("%2d %16.13f %16.13f %10.4e %10.4e %10.4e\n", 0, x0, y0, af, ag, af+ag);
for(k=1; k<=MAXITER; k++){ f0 =f (x0,y0); fx0=fx(x0,y0);
fy0=fy(x0,y0);
g0 =g (x0,y0);
gx0=gx(x0,y0);
gy0=gy(x0,y0);
dj =fx0*gy0-gx0*fy0;
x1=x0+(-f0*gy0+g0*fy0)/dj;
y1=y0+(-g0*fx0+f0*gx0)/dj;
x0=x1;
y0=y1;
af=fabs(f(x0,y0));
ag=fabs(g(x0,y0));
printf("%2d %16.13f %16.13f %10.4e %10.4e %10.4e\n", k, x0, y0, af, ag, af+ag);
if(af+ag<EPSILON) break; } }
0863/wqtvsAeqI
2010/06/14(月) 23:43:14[2]問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10697.txt
[3]
[3.1]OS:windows7 pro 64bit
[3.2] 環境:visualstudio 2010 express c++、ver10,0です
[3.3] 言語はCです
[4]18日が期限です
[5]その他制限:実行例が見やすいように一の位を揃えてください
自分は三教科の点数を表示するところまではなんとか書けましたが、一の位が揃えられてないです。
できれば自分のソースに付け足す形でお願いできればうれしいです
自分は多元的配列まで習いました
よろしくお願いします。
0865デフォルトの名無しさん
2010/06/14(月) 23:50:54//ここで表示
for(j=0;j<M;j++){
printf("%2d人目:",j+1);
for(i=0;i<N;i++){
printf("%4d ",data[j][i]);
}
printf("\n");
}
0866デフォルトの名無しさん
2010/06/14(月) 23:52:54iteration(); putchar('\n');
puts("# Method of Successive displacement:");
displacement(); putchar('\n');
puts("# Newton's method:"); newton2(); return 0; }
[3] 環境
[3.1] OS:linux
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C
[4] 期限:2010年6月15日
[5] その他の制限:長々と申し訳ございません。861,862です。
PCの調子が悪いせいかアップロータにアップできませんでした。
それで問題なのですが、反復法、順次置換法、Newton法の収束
を求めるもなのですがfx,fy,gx,gyの数値がどのように定義すれば
よいかわからず質問させていただきました。
ぜひよろしくお願いいたします。
0867/wqtvsAeqI
2010/06/15(火) 00:09:59ありがとうございました
なるほど桁をとってやればいいんですね!
ありがとうございます
後、できればソート前の合計点とソート後の合計点もお願いしてもいいでしょうか
0868/wqtvsAeqI
2010/06/15(火) 00:16:14失礼しました自分は863です
int main(){
int i,j,temp,data[M][N],goukei[M]={0};
unsigned int seed;
seed=time(0); /* <-- 任意の正整数を入力 ここでは97を入力 */
srand(seed);
/* 1〜100の乱数を、M×N個作成 */
for(j=0;j<M;j++)
for(i=0;i<N;i++){
data[j][i]=1+rand()/(RAND_MAX/100);
goukei[j]+=data[j][i];
}
printf("\n\n合計点(ソート前):");
for(j=0;j<M;j++)
printf("%4d",goukei[j]);
/* バブルソート */
for(j=1;j<M;j++)
for(i=1;i<=M-j;i++)
if(goukei[j] < goukei[j-1]){
temp = goukei[j-1];
goukei[j-1] = goukei[j];
goukei[j] = temp;
}
printf("\n合計点(ソート後):");
for(j=0;j<M;j++)
printf("%4d",goukei[j]);
}
for(j=1;j<M;j++)
for(i=1;i<=M-j;i++)
if(goukei[i] < goukei[i-1]){
temp = goukei[i-1];
goukei[i-1] = goukei[i];
goukei[i] = temp;
}
0872/wqtvsAeqI
2010/06/15(火) 01:20:51>>870
>>871
ありがとうございます
ただ自分の環境ではコンパイルできませんでした・・・・
エラーメッセージ通りにやっても解消はされません・・・・
どうかよろしくお願いします
ここにhttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10698.txtそのソースをのせました
エラーメッセージは
1>c:\project\kadai01\kadai01\kadai05.cpp(62): error C2059: 構文エラー : '}'
1>c:\project\kadai01\kadai01\kadai05.cpp(62): error C2143: 構文エラー : ';' が '}' の前にありません。
1>c:\project\kadai01\kadai01\kadai05.cpp(62): error C2059: 構文エラー : '}
となっています・・・・
0874デフォルトの名無しさん
2010/06/15(火) 01:42:17[2] 問題文(含コード&リンク):モンテカルロ法で円周率を求めるプログラムを作れ。
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 本日の昼
[5] その他の制限: 使いそうな関数としてsrandom(unsigned long seed),random(),aq
rt(double x),pow(double x, double y)が挙げられている
コンパイル時には-lmオプションをつける
お願いします。
0875デフォルトの名無しさん
2010/06/15(火) 01:52:22いまさら突っ込むべきかどうか悩むがその名前欄はトリップのミスなの?
0876デフォルトの名無しさん
2010/06/15(火) 01:52:32#include <stdlib.h>
int main(void)
{
double x, y;
int i, c;
srand(time(NULL));
for(i = c = 0; i < 1000000000; i++) {
x = (double)rand() / RAND_MAX;
y = (double)rand() / RAND_MAX;
if(x * x + y * y <= 1) c++;
}
printf("%f\n", c * 4.0 / 1000000000);
return 0;
}
0877/wqtvsAeqI
2010/06/15(火) 02:16:33えっと・・すいませんちょっと意味がわかりません・・・・・・
あの初心者なもので・・・
できればもっとかみ砕いて教えてもらえるとうれしいです
>>875
普通に?つけるの忘れてました・・・
なんか適当にキーボード叩いてみたらこうなったです・・
0878デフォルトの名無しさん
2010/06/15(火) 04:04:2862行目ってどこだよ
ソースそのままじゃないだろ
最後に } が多いんだとは思うが
0880デフォルトの名無しさん
2010/06/15(火) 10:18:04[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10699.txt
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン:
[3.3] 言語:C
[4] 期限: 2010年6月16日
[5] その他の制限:if文を習っただけです。
よろしくお願いします。
0881/wqtvsAeqI
2010/06/15(火) 10:54:36ほんとでした最後の中カッコが余計でした
ありがとうございます!
>>879
絶対おかしいとは思ったのですが、試しに}の前に;付けてみたのですがやっぱ無理でした・・・・
てかよく考えれば一番上のエラーを読めばいいんですね!
ちゃんと構文エラーって書いてました・・・
ありがとうございました
助かりましたー
0882デフォルトの名無しさん
2010/06/15(火) 12:13:310883デフォルトの名無しさん
2010/06/15(火) 13:43:27[2] 問題文(含コード&リンク):http://www.bohyoh.com/Books/MeikaiCPP/download.html
9章クラス=17章までのの全演習です
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン:
[3.3] 言語:C++
[4] 期限: 2010年6月16日
[5] その他の制限:初心者です
著者がホームページ持ってるし、後で写しておこうと思ってたんですが
別の著書のみでこの本の解説はありませんでした
出来る限りググったりしてみたんですが見つけられず
厳しいかと思いますが、どうかよろしくお願いします・・・orz
0884883
2010/06/15(火) 13:51:2611-3までの演習はどうにかキャッシュなどに残っている模様です
11-4以降でお力を貸して頂けないでしょうか
0885デフォルトの名無しさん
2010/06/15(火) 16:21:08URLみたけど、そこに演習問題は載ってないし、
1章, 9章以外PDFへのリンクが見えないのだが……。
0886883
2010/06/15(火) 16:54:289章以降のPDFに演習問題というのがある形です・・・
0887デフォルトの名無しさん
2010/06/15(火) 17:00:31横着しないで問題文書いてよ。どれやるのか探させる時点で見る気がなくなる
長いならテキストに起こしてアップローダにあげればいい
0888883
2010/06/15(火) 17:01:36少々時間かかりますがいいでしょうか?
あと・・・恥ずかしながらアップローダの使い方が分からないのです
ご教授いただけませんか?
0889デフォルトの名無しさん
2010/06/15(火) 17:15:02後者はスレ違い。
0890デフォルトの名無しさん
2010/06/15(火) 17:43:16無理に1レスにおさめる為に詰め込んだみたいだなw
しかしそれをやる価値のある問題とはとても思えない件w
0891883
2010/06/15(火) 19:56:51とりあえずこんな感じで大丈夫でしょうか・・・
ちゃんと上げれてるか自信ないですけど
0892デフォルトの名無しさん
2010/06/15(火) 20:21:52[2] 問題文(含コード&リンク):入力した文字列を文字型配列に代入し、アルファベットの大文字、
小文字、四則演算を回数分表示できるようにしなさい。尚、改行記号を\nとし、四則演算、アルファベット、
改行記号以外の文字を含む場合と、アルファベットまたは記号の後に数字が来ない場合、各々、エラーを表示するようにしなさい。
[3] 環境
[3.1] OS:Windows XP
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C
[4] 期限:2010年6月15日
[5] その他の制限:int main(void){から始まる
実行例1:
文字列を入力
a3-2*4\n+5B2
結果
aaa---****
+++++BB
実行例2:
文字列を入力
a3-2*4\n+5ba2
結果
順番間違いエラー
実行例3
文字列を入力
a3-@*4\n+5b2
結果
記号間違いエラー
0893デフォルトの名無しさん
2010/06/15(火) 21:29:000894デフォルトの名無しさん
2010/06/15(火) 21:38:40ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10701.c
0895デフォルトの名無しさん
2010/06/15(火) 23:07:46実行例と違う
0896883
2010/06/16(水) 00:33:22[2] 問題文(含コード&リンク):
ttp://www.dotup.org/uploda/www.dotup.org966022.txt.html
ttp://www.dotup.org/uploda/www.dotup.org966632.txt.html
ttp://www.dotup.org/uploda/www.dotup.org966665.txt.html
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン:
[3.3] 言語:C++
[4] 期限: 2010年6月16日
[5] その他の制限:初心者です
テンプレートを使用してませんでした、申し訳ありません
0897デフォルトの名無しさん
2010/06/16(水) 08:43:07http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10700.c
0898デフォルトの名無しさん
2010/06/16(水) 10:47:40http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10705.c
0899デフォルトの名無しさん
2010/06/16(水) 10:55:44[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10706.txt
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10708.txt
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語:C++
[4] 期限: 6月17日まで
[5] その他の制限: とくに指定は無いです。
本当に困っています。よろしくお願いします。
0901デフォルトの名無しさん
2010/06/16(水) 15:38:2313-2
Type& Peek() {
if (ptr <= 0)
throw EmptyErr(this);
return stk[ptr];
}
int Capacity() {
return size;
}
bool IsFull() {
return (ptr == size);
}
bool IsEmpty() {
return (ptr == 0);
}
0902デフォルトの名無しさん
2010/06/16(水) 15:54:3113-3
http://codepad.org/kKubyBju
0903デフォルトの名無しさん
2010/06/16(水) 20:05:59ありがとうございました
よろしくお願いします。
3次元の実数ベクトルを、要素がfloat型で要素数3の配列を用いて表すものとする。
二つの3次元ベクトルに対して、それらの和、差、内積、外積を求める関数を定義する。
和、差、内積、外積を計算する関数はそれぞれaddvec、subvec、innervec、outervecとし、
それぞれの関数定義の頭部は
void addvec(const float x[3], const float y[3], float z[3])
void subvec(const float x[3], const float y[3], float z[3])
float innervec(const float x[3], const float y[3])
void outervec(const float x[3], const float y[3], float z[3])
とする。
プログラムの動作は、二つの3次元ベクトルaとbの各成分をじゅんじに入力して、それらの和、差、内積、外積を求めて出力する。
以上の説明に沿ったプログラムをC言語を用いて書け。
0905デフォルトの名無しさん
2010/06/16(水) 20:34:11{
int i;
for(i = 0; i < 3; i++) z[i] = x[i] + y[i];
}
void subvec(const float x[3], const float y[3], float z[3])
{
int i;
for(i = 0; i < 3; i++) z[i] = x[i] - y[i];
}
float innervec(const float x[3], const float y[3])
{
int i;
float ip = 0;
for(i = 0; i < 3; i++) ip += x[i] * y[i];
return ip;
}
void outervec(const float x[3], const float y[3], float z[3])
{
int i;
for(i = 0; i < 3; i++) z[i] = x[(i + 1) % 3] * y[(i + 2) % 3] - x[(i + 2) % 3] * y[(i + 1) % 3];
}
0906デフォルトの名無しさん
2010/06/16(水) 20:35:530907デフォルトの名無しさん
2010/06/16(水) 20:41:520908デフォルトの名無しさん
2010/06/16(水) 20:46:430909デフォルトの名無しさん
2010/06/16(水) 20:51:310910デフォルトの名無しさん
2010/06/16(水) 20:52:060911デフォルトの名無しさん
2010/06/16(水) 20:53:27ありがとうございます。
実行すると2行目にエラーがでてしまいます。
自分で直そうとしてもわからなかったので、よかったらどう直すのか教えてください。
0913デフォルトの名無しさん
2010/06/16(水) 21:45:00void addvec(
0914デフォルトの名無しさん
2010/06/16(水) 21:45:18これくらいわかるだろ。
0915デフォルトの名無しさん
2010/06/16(水) 21:59:47ここに依頼するやつが構文を理解しているわけがない。
構文はおろか、全角スペースなんてどうやって見つけるんだよ!とか切れてるやつもいたろ?
0916デフォルトの名無しさん
2010/06/16(水) 22:00:59全角スペースは使ってるエディタによっては見つけるのは面倒
0917デフォルトの名無しさん
2010/06/16(水) 22:16:260918デフォルトの名無しさん
2010/06/16(水) 22:39:04[2] 問題文(含コード&リンク):
問題1:文字列"Computer1Programing2Communication3Electro4"を、"test.txt"に書き込むプログラムを作成せよ。
問題2:ファイル"test.txt"から文字列も読み込み、並びを逆にしてファイル"sample.txt"に出力するプログラムを作成せよ。("test.txt"は問題1で作成したものを使用すること。)
問題3:ファイル"sample.txt"から大文字だけを画面に表示させるプログラムを作成せよ。("sample.txt"は問題2で作成したものを使用すること。)
[3] 環境
[3.1] OS:Windows Vista
[3.2] コンパイラ名とバージョン:VB 2008
[3.3] 言語:C
[4] 期限:2010年6月17日中
[5] その他の制限:無し
よろしくお願いします
0919デフォルトの名無しさん
2010/06/16(水) 22:52:370920デフォルトの名無しさん
2010/06/16(水) 22:58:341:
#include <stdio.h>
int main(void) {
FILE *fp = fopen("test.txt", "w");
fprintf(fp, "%s", "Computer1Programing2Communication3Electro4");
fclose(fp);
return 0;
}
2:
#include <stdio.h>
void f(FILE *fin, FILE *fout) {
int ch = fgetc(fin);
if(ch == EOF) return;
fputc(ch, fout); }
int main(void) {
FILE *fin = fopen("test.txt", "r"), *fout = fopen("sample.txt", "w");
f(fin, fout);
fclose(fin);
fclose(fout); }
3:
#include <stdio.h>
#include <ctype.h>
int main(void) {
FILE *fp = fopen("sample.txt", "r");
int ch;
while((ch = fgetc(fp))!=EOF) if(isupper(ch)) putchar(ch);
fclose(fp);
return 0;
}
0921デフォルトの名無しさん
2010/06/16(水) 23:01:09void f(FILE *fin, FILE *fout) {
int ch = fgetc(fin);
if(ch == EOF) return;
f(fin, fout);
fputc(ch, fout); }
だった
0924デフォルトの名無しさん
2010/06/17(木) 00:38:05コンパイラはなんて言ってるのか書かないと分からん。
fatal error LNK1120:外部参照1が未解決です。
0926デフォルトの名無しさん
2010/06/17(木) 00:47:460928デフォルトの名無しさん
2010/06/17(木) 00:48:38main関数が書かれていないから発生する。
ちゃんとmain関数かいたか?
0929デフォルトの名無しさん
2010/06/17(木) 00:49:53「教えてクン」は、孤高の戦士である。
相手のことを考えるようでは教えてクン失格というものだ。
以下のような行動が、望ましい。
初心者であることを高らかに宣言し、初心者向けの丁寧で分かりやすい説明を強要する。
専門用語の使用を禁じておくとさらに効果的である。
簡潔な説明を禁じられたヲタクどもは、同じ内容を説明するのに、何倍もの労力を強いられる。
自分は努力せず、相手には多大な努力をさせることこそが「教えてクン」の真骨頂である。マルチポストも有効である。
そのBBSを信用していないことを明確に示せる。
「どうせ、お前らじゃ分からんだろう。」という意志表示として高く評価できる。
もちろんマルチポストの非礼をあらかじめ詫びてはならない。
それでは、単なる「急いでいる人」になってしまう。
それは、教えてクンではない。質問のタイトルは、「教えてください。」で良い。
タイトルを読んだだけでは「何に関する質問」か全く分からない。
そういう努力は、答える人間にさせれば良いのだ。
とにかく、答える人間が答えやすいように気を使って質問してはならない。
傲慢で不遜な態度が必須である。「聞きたいことがあります。」など、プロの仕事であろう。
最後に、言うまでも無いことだとは思うが、答えてくれた人達に礼の言葉を返すなど言語道断である。
せっかく「教えてクン」を貫いてきたのに、最後にお礼を言っているようでは、画竜点睛を欠いていると言わざるを得ない。
質問だけしておいて、後はシカトが基本である。
上級テクニックとして、「そんなことはもう試しました。」とか、「そこまで初心者じゃありません。」などと言って、回答者の神経を逆なでしておけば完璧である。
以上のことを踏まえて質問すれば、君も立派な「教えてクン」である。
ビバ!教えてクン! 教えてクンに栄光あれ!!
0930デフォルトの名無しさん
2010/06/17(木) 01:08:21ここには上級者が一杯居るな。
0931デフォルトの名無しさん
2010/06/17(木) 01:47:44int main(void)
{ int kion[12] = {4,6,11,15,18,30,28,30,24,19,10,3};
int i,ave,max,min;
max = -1000;
min = 1000;
ave = (kion[0]+kion[1]+kion[2]+kion[3]+kion[4]+kion[5]+kion[6]+kion[7]+kion[8]+kion[9]+kion[10]+kion[11])/12;
(省略 max,minはfor関数を使って参照)
printf("2000年の月平均気温(摂氏、括弧内は華氏)\n");
for(i=0;i<12;i++)
{
printf("%d月:%d(%d)\n",i+1,kion[i],9*kion[i]/5+32);
}
printf("-----------------\n");
printf("平均:%d(%d)\n最高:%d(%d)\n最低:%d(%d)\n",ave,9*ave/5+32,max,9*max/5+ 32,min,9*min/5+32);
return 0;
}
上のような年間平均気温を配列に格納して表示するプログラムで、
華氏の表示を自作関数を定義してそれを用いよという課題が出たんですが、
自作関数の計算式でmaxやmin,ave,kion[i]をまとめて扱う方法が分かりません。
よろしくお願いします
0932デフォルトの名無しさん
2010/06/17(木) 02:05:08ひとつずつ扱えばいい
0933デフォルトの名無しさん
2010/06/17(木) 02:59:24http://codepad.org/rnOHhJ5u
0934デフォルトの名無しさん
2010/06/17(木) 04:49:44>max = kion[1], min = kion[1];
0にしてループを1からにするのが普通なのに、わざわざこうする意味がわからないw
0935デフォルトの名無しさん
2010/06/17(木) 12:08:57期限過ぎてしまってやばいんです・・
0936デフォルトの名無しさん
2010/06/17(木) 13:54:50それともキーボードからデータを入力?
0937デフォルトの名無しさん
2010/06/17(木) 13:56:42よろしくお願いいします。
0938デフォルトの名無しさん
2010/06/17(木) 17:07:23VCで作った。gccでも動くとおもうけど未検証。ダメだったらスマソ
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10711.txt
0939デフォルトの名無しさん
2010/06/17(木) 17:15:20http://www.hrtdotnet.jp/pro/c/step4/step4_2.html */
0940デフォルトの名無しさん
2010/06/17(木) 19:53:41問題が解けないのでなんら関係のないURLを貼ってみる香具師乙
0941デフォルトの名無しさん
2010/06/17(木) 21:11:342つのベクトルの差の大きさを返す関数 dist を作成せよ。
よろしくお願いします
0942デフォルトの名無しさん
2010/06/17(木) 21:18:24int main(void)
{
static int a[] = { 31, 41, 59, 26, 53, 58, 97, 93, 23, 84, 62 };
int flag;
do {
flag = 0;
for (int i = 0; i < sizeof(a)/sizeof(a[0]) - 1; i++) {
if (a[i] > a[i + 1]) {
swap(a[i], a[i + 1]);
flag = 1;
}
}
} while (flag > 0);
for (int i = 0; i < sizeof(a)/sizeof(a[0]); i++)
cout << a[i] << ", ";
cout << endl;
return 0;
}
0943デフォルトの名無しさん
2010/06/17(木) 21:21:13すなわち、n(n-1)/2回の比較が行われなければならない。 そこで, 各回の走査の終わりに、
交換が行われたか否かをチェックするようにし、交換が行われていなければそれ以上走査の必要はないので
ソートを完了するようなプログラムにしなさい。
「バブルソート」の問題なんですが、いい解答例がありません。
解答例をもらえないでしょうか?
0944デフォルトの名無しさん
2010/06/17(木) 21:22:24各回の走査の中で行われたの交換の様子が分かるよう1回の交換が行われる度に、そのとき配列に入っているすべての値を出力させるようにもしなさい。
0946デフォルトの名無しさん
2010/06/17(木) 22:00:02normalを呼ぶ側で宣言及び初期化された,長さ n の配列 a と宣言のみされた長さ n の配列 b の先頭アドレスを受け取り,1次元配列(ベクトル) a の大きさを1に規格化し、それを配列 b に格納する。
0947デフォルトの名無しさん
2010/06/17(木) 22:03:18問題が解けないので、それらしき日本語を書いてみる香具師乙
0948デフォルトの名無しさん
2010/06/17(木) 22:56:12#include <stdio.h>
#include <stdlib.h>
int main(void){
char buffer[80],txt[80];
FILE * fp;//←stdinは標準入力ストリームであるのでファイル型へのポインタにする必要がない。
int i;
for(i=0;i<5;i++){
fp = fopen("./text.txt","w");//相対パス
scanf("%s",txt);
fprintf(fp,"%s",txt);//配列には&をつけない
fclose(fp);
stdin = fopen("./text.txt","r");//相対パス
fgets(buffer,sizeof(buffer),stdin);//指定したファイルの一行を読み込んでbufferに格納する。
fclose(stdin);
printf("%s\n",buffer);
printf("end of loading\n");
}
}
としたところ、scanfがfor文の最後から戻る度に実行されると思ったのですが実際には、
ssss ssss end of loading ssss end of loading ssss end of loading ssss end of loading ssss
となってしまいました。どのようにしたらscanf()が繰り返し呼び出されるのでしょう?
0949デフォルトの名無しさん
2010/06/17(木) 22:57:39そうじゃなくて多分コード書くのがめんどいだけじゃないかね。
俺もたまにそうする
0950デフォルトの名無しさん
2010/06/17(木) 22:58:16stdin に代入しちゃダメだ
0951デフォルトの名無しさん
2010/06/17(木) 23:06:10お願いしますよ。。。
0952デフォルトの名無しさん
2010/06/17(木) 23:07:58例えば,どのようにすればよいのでしょうか?
0953デフォルトの名無しさん
2010/06/17(木) 23:10:44>scanfを使用してキーボード入力した文字列を、fgets(buffer,sizeof(buffer),stdin)で読み込みこれを繰り返したい。
これって何をしたいの?
tee コマンドもどき?
0954デフォルトの名無しさん
2010/06/17(木) 23:27:57#include <stdio.h>
#include <stdlib.h>
int main(void){
char buffer[80], txt[80];
FILE *fp;
int i;
for(i=0; i < 5; i++){
fp = fopen("text.txt", "w");
scanf("%s", txt);
fprintf(fp, "%s", txt);
fclose(fp);
fp = fopen("text.txt", "r");
fgets(buffer, sizeof(buffer), fp);
fclose(fp);
printf("%s ", buffer);
}
}
0955デフォルトの名無しさん
2010/06/17(木) 23:34:06[2] 問題文(含コード&リンク):
以下のプログラムで、pointを昇順に並び替えるプログラムを作る。ソートの部分のみを書き換え、プログラムを作りなさい。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10713.txt
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C
[4] 期限:2010年6月22日まで
[5] その他の制限:特にありません。よろしくお願いします。
0956デフォルトの名無しさん
2010/06/17(木) 23:40:05ありがとうございます。
scanfを使わずにfgetsとstdinを使用して同様なことはできないでしょうか?
0957デフォルトの名無しさん
2010/06/17(木) 23:46:54スレタイを読んでくれ。
それでもどうしてもここでやりたいのなら何度もやり取りしなくていいように伝える努力をしてくれ。
0958デフォルトの名無しさん
2010/06/17(木) 23:47:26void sort2(struct data *d1, struct data *d2)
{
//ここのプログラムを作成
if(d1->point > d2->point){
struct data tmp = *d1;
*d1 = *d2;
*d2 = tmp;
}
}
0959デフォルトの名無しさん
2010/06/17(木) 23:51:51scanf("%s", txt);
↓
fgets(txt, sizeof(txt), stdin);
0960デフォルトの名無しさん
2010/06/17(木) 23:53:48fgets(txt, sizeof(txt), stdin);
ijo
0961デフォルトの名無しさん
2010/06/18(金) 01:29:00[2]問題文(含コード&リンク)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10714.lzh
[3]環境
[3-1] OS:C/C++処理系があれば何でも可
[3-2] コンパイラ:gccに近い処理系が理想
[3-3] 言語:C/C++どちらでも可
[4] 9/15迄(夏休み終了まで)
[5] 難しいそうです。無理しないほうがいいそうです。ただ出来たら
テストの点に無関係に単位をくれるそうです
0962デフォルトの名無しさん
2010/06/18(金) 01:36:280963デフォルトの名無しさん
2010/06/18(金) 01:59:26符号化・符号解除するプログラムをつくれってことだろ
・#,<,.など記号は暗号化されない。
・最初のincludeが暗号化されていないので、
単語単位で暗号化される、と推測できる。
・暗号化を進めていく過程で符号化の情報が変化してゆくと推測できる。
(例えばxorを取る値が+1されていくとか。)
・数字は符号化されない?または符号化されてもアルファベットには置換されない
・文字数は増減しない。
このヘンはガチ?
0964デフォルトの名無しさん
2010/06/18(金) 02:03:40増えてないところもあるみたいだけど。
0965デフォルトの名無しさん
2010/06/18(金) 02:14:39mwb n;
fYv (o = 2; p < xw; q++) {
となっているので、
一文字の変数がn->o->p->qとなっていることから
多分変数名は登場する度に+1されていくんだろうか?
0966デフォルトの名無しさん
2010/06/18(金) 02:15:26こんな問題出す講師なんて全国でも片手で数えられるほども居ない筈
なんで、どこの誰だかわかってしまう件
当然ここで正解が出てそれを提出しても、額面通り無条件に単位を
くれるのかどうかもアヤスイ件
0967デフォルトの名無しさん
2010/06/18(金) 02:19:130968デフォルトの名無しさん
2010/06/18(金) 02:22:14たしかに、zX AY BZと出現するたびに各文字が1ずつ増えてるんだが
intと思しき、luY→mwbは各文字ごとに123と増えている
先頭行はinclude <stdio.h>とみなして予想をいろいろしているんだけど、実はmain関数が見つかっていない
0969デフォルトの名無しさん
2010/06/18(金) 02:45:480970デフォルトの名無しさん
2010/06/18(金) 02:52:020971デフォルトの名無しさん
2010/06/18(金) 02:52:190972デフォルトの名無しさん
2010/06/18(金) 02:57:220973デフォルトの名無しさん
2010/06/18(金) 02:59:160974デフォルトの名無しさん
2010/06/18(金) 03:00:34なるほど。
次の問題は、基本ルールはiiii --> ijk なんだろうけど
元がijkだった場合との区別かな。
0975デフォルトの名無しさん
2010/06/18(金) 03:00:490976デフォルトの名無しさん
2010/06/18(金) 03:14:37jjj -> jkl の区別が付かない気がする。
0977デフォルトの名無しさん
2010/06/18(金) 03:16:10間違い。
ijk -> jkl と
iii -> jkl との区別、だった。
0978デフォルトの名無しさん
2010/06/18(金) 03:19:39それ以降は++tbl[ch-'A']で置き換える、でおk?
でも層だとすると、linux/kernel.hで、なぜ/がlになるのかわからんな。
0979デフォルトの名無しさん
2010/06/18(金) 03:25:230980デフォルトの名無しさん
2010/06/18(金) 03:37:57#include <linux/
↓いまわかってるアルゴリズムで暗号化
#include <mjovx/kfrpgn.h>
#kqdoweh <plrxy/
なるべき結果
#include <mjovxklfrpgn.h>
#kqdoweh <plrxys
/の扱いが分かればどうにかなるのかもね。
0981デフォルトの名無しさん
2010/06/18(金) 03:38:04眠いんで寝るぽ
0982デフォルトの名無しさん
2010/06/18(金) 03:43:22なんか思いつくかなぁー
0983デフォルトの名無しさん
2010/06/18(金) 03:46:13/k -> kl
のように、次の桁の文字をcopyだと思う。
16行目以降にも、mn,pq,xyという連続文字部分がある。
0984デフォルトの名無しさん
2010/06/18(金) 03:51:580985デフォルトの名無しさん
2010/06/18(金) 04:00:14だからそこは勝手に仕様決めてつくれば課題達成だろう。
ただし問題で与えられたソースは複合できないけど。。
0986デフォルトの名無しさん
2010/06/18(金) 04:02:000987デフォルトの名無しさん
2010/06/18(金) 04:18:430988デフォルトの名無しさん
2010/06/18(金) 04:23:330989985
2010/06/18(金) 04:24:49一文字ずつ暗号化してゆき、一文字毎に置換表を更新し、
それをつかって、次の文字を復号し、複合化した文字でまた置換表を更新し、・・・
ってすすめば可能かな?
0990デフォルトの名無しさん
2010/06/18(金) 05:11:00うーん。
0991デフォルトの名無しさん
2010/06/18(金) 05:34:56<linux/syscalls.h>かな
0992デフォルトの名無しさん
2010/06/18(金) 05:44:15むはー。8文字だったのね!ずっと7文字と勘違いしてた俺のばかー
#include <linux/kernel.h>
#include <linux/syscalls.h>
↓
#include <mjovx/kfrpgn.h>
#kqdoweh <plrxy/syteaqru.i>
[ターゲット]
#include <mjovxklfrpgn.h>
#kqdoweh <plrxystyueaqrv.i>
ちょっぴり違うのは/の影響かなぁ
0993デフォルトの名無しさん
2010/06/18(金) 06:13:47#include <linux/syscalls.h>
#include <linux/fs.h>
#include <linux/
↓
#include <mjovxklfrpgn.h>
#kqdoweh <plrxystyueaqrv.i>
#msfsyfi <tntzzfgw.j>
#ouguagj <vpvba
になった。小文字の次は大文字になるっぽい。けど、これまた次のヘッダがわからないという。
kk.hなんてないよねぇ
役に立つかどうか分からないけど、今のコードを貼って寝ます。
http://codepad.org/btlbxg97
0994デフォルトの名無しさん
2010/06/18(金) 06:15:06#include<linux/syscalls.h>
#include<linux/fw.h>
#include<linux/mo.h>
#include<linux/percpu.h>
合ってる?
0995デフォルトの名無しさん
2010/06/18(金) 06:15:190996デフォルトの名無しさん
2010/06/18(金) 06:16:10#include<linux/fw.h>
↓
#include<linux/fs.h>
0997デフォルトの名無しさん
2010/06/18(金) 06:19:44/usr/src/kernels/2.6.18-164.15.1.el5-x86_64/include/linux
なんてところががが。初めてのぞきました
mo.hは同じところにあるmm.hかもです。
0998デフォルトの名無しさん
2010/06/18(金) 06:21:27<linux/io.h>
0999デフォルトの名無しさん
2010/06/18(金) 06:25:44#include <linux/syscalls.h>
#include <linux/fs.h>
#include <linux/mm.h>
#include <linux/percpu.h>
#include <linux/slab.h>
#include <linux/
1000デフォルトの名無しさん
2010/06/18(金) 06:26:08iはincludeで使われてるから違うだろ
10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。