※スレが荒れるので、◆QZaw55cn4cは書き込み禁止です
>>3 ==◆QZaw55cn4c
立て直す必要なし
ああ、例のあの問題か。 もうすぐ春休みあけで商売がまわりだすんだろうな ちょっと興味あるぜ どれぐらい儲かってんだろ
[1] 授業単元:暇つぶし [2] 問題文(含コード&リンク): 下記のような2chへの書き込み時刻のログを標準入力より受け取り、 EOF がきたら現在の !ninja レベルがいくつであるか出力せよ !ninja レベルについて 最初の書き込み時にはレベル1である 最後にレベルアップした書き込み時刻から24時間以上経過して書き込むと1レベルアップする 条件1 一番最初の書き込み時刻以前にはクッキーは存在しないものとする 条件2 ●無しとする 条件3 書き込み時刻のログは古いものから順に並んでいるものとする 2011/02/11 22:33:44 2011/02/12 01:23:45 2011/02/14 18:19:20 [3] 環境 [3.1] OS: Windows & Linux 両方 [3.2] コンパイラ名とバージョン: なんでも [3.3] 言語: どちらでも可 [4] 期限: [無期限] [5] その他の制限: 特になし
>>8 ※スレが荒れるので、◆QZaw55cn4cは書き込み禁止です
JAVAでいうインターフェイスみたいなのってないの?
>>8 ※スレが荒れるので、◆QZaw55cn4cは書き込み禁止です
>>6 間違えました。
>どれぐらい儲かってんだろ
0 モリタポです。
>>12 ※スレが荒れるので、◆QZaw55cn4cは書き込み禁止です
◆QZaw55cn4c ◆QZaw55cn4c ◆QZaw55cn4c ◆QZaw55cn4c ◆QZaw55cn4c ◆QZaw55cn4c ◆QZaw55cn4c ◆QZaw55cn4c ◆QZaw55cn4c ◆QZaw55cn4c ◆QZaw55cn4c ◆QZaw55cn4c ◆QZaw55cn4c ◆QZaw55cn4c ◆QZaw55cn4c ◆QZaw55cn4c ◆QZaw55cn4c ◆QZaw55cn4c ◆QZaw55cn4c ◆QZaw55cn4c ◆QZaw55cn4c ◆QZaw55cn4c ◆QZaw55cn4c ◆QZaw55cn4c ◆QZaw55cn4c ◆QZaw55cn4c ◆QZaw55cn4c ◆QZaw55cn4c ◆QZaw55cn4c ◆QZaw55cn4c ◆QZaw55cn4c
◆QZaw55cn4c ◆QZaw55cn4c ◆QZaw55cn4c ◆QZaw55cn4c ◆QZaw55cn4c ◆QZaw55cn4c ◆QZaw55cn4c ◆QZaw55cn4c ◆QZaw55cn4c ◆QZaw55cn4c ◆QZaw55cn4c ◆QZaw55cn4c ◆QZaw55cn4c ◆QZaw55cn4c ◆QZaw55cn4c ◆QZaw55cn4c ◆QZaw55cn4c ◆QZaw55cn4c ◆QZaw55cn4c ◆QZaw55cn4c ◆QZaw55cn4c ◆QZaw55cn4c ◆QZaw55cn4c ◆QZaw55cn4c ◆QZaw55cn4c ◆QZaw55cn4c ◆QZaw55cn4c ◆QZaw55cn4c ◆QZaw55cn4c ◆QZaw55cn4c ◆QZaw55cn4c
vectorは要素の追加毎に全部を新しく更新 リストは繋げるだけだから早い この解釈でおk?
更新というか、要素が追加されるごとに追加前の要素数+1の領域を確保しなおしてコピーしている
おりゃ
Cってスレッドあったっけ?
>>19 言語としては規定されていません。
各々の環境でスレッドを管理する関数を呼び出すことになります。(win32 や posix-thread など。)
>>20 ※スレが荒れるので、◆QZaw55cn4cは書き込み禁止です
>>7 #include <stdio.h>
#include <string.h>
#include <time.h>
int main(void){
time_t cur, last_levelup=0;
struct tm hoge={0};
char buf[256], *p;
int year, month, day, hour, min, sec, level=0;
while(fgets(buf, sizeof(buf), stdin)){
p=strchr(buf, '\n');
if(p) *p='\0';
sscanf(buf, "%d/%d/%d %d:%d:%d", &year, &month, &day, &hour, &min, &sec);
hoge.tm_year=year-1900;
hoge.tm_mon=month-1;
hoge.tm_mday=day;
hoge.tm_hour=hour;
hoge.tm_min=min;
hoge.tm_sec=sec;
cur=mktime(&hoge);
if(difftime(cur, last_levelup)>=60*60*24){
printf("Level %d : %s\n", ++level, buf);
last_levelup=cur;
}
}
printf("\n現在のレベルは %d です\n", level);
return 0;
}
> 各々の環境でスレッドを管理する関数を呼び出すことになります。(win32 や posix-thread など。) なにこれ。素人さん?
>>26 「API」「システムコール」といえばよかったですかね。
>>27 「API」「システムコール」ってどういうものなの?
31 :
@問題 :2011/04/04(月) 21:29:54.24
[1] 会社の新人教育で出された問題 [2] 次のコードにコメントを付けよ。 #include <stdio.h> #include <stdlib.h> #include <conio.h>/*処理系によりconio.h→console.h*/ char*h="・○●◇\n"; int p,t,a,d,c,v,i,e=10,s,o,z[255]={0},m[90]={0},r[]={-10,- 9,-8,-1,1,8,9,10}; void k() { if(m[p]==0) for( i = 0 ; i < 8 ; i++ ) { for ( c = 0 , v = p + r[i] ; m[v] == 3-t ; v+=r[i]) c++ ; if(c&&m[v] == t ) { a+=c; v=p; if( d ) do m[v]=t,v+=r[i]; while(m[v]!=t); } } }
void b() { system("cls"); /* コマンドプロセッサを呼び出し、cmnd で指定したコマンドを実行する。 */ for( p = 9 ; p < 82 ; ++p ) a?a:k(),printf("%.2s",&h[m[p]*2]); }
int main() { for( 50[z] = 80[z] = 9,54[z] = 77[z] = m[40] = m[50] = t = s = i = 1 , 52[z] = 75[z] = -1 , 56[z] = 72[z] = -9 , m[41] = m[49] = 2 ; i < e ; m[i++*9] = 4 );
for( ; ; a = d = 0 ) { b(); if( a ) for( d = a = s = p = 8 ; a == 8 ; k() ) if ( t - 2 ) { o = e [m]; for( i = 0, e[m] = 3 ; i != 13 ; c = ( i = _getch() )[z]) { if( c && e + c > 9 && e + c < 81 ) e[m] = o, o = ( e += ( (e+c)%9 ? c : c*2))[m], e[m] = 3; b(); } e[m] = o, i = e/9, p = e%9 + i*9; } else ++p; else if (s)s=0, printf("pass"); else break; t=3-t; } return 0; }
[3] 環境 [3.1] OS: Windows Vista [3.2] VC++2005 [3.3] 言語: (C言語) [4] 期限: ([2011年4月8日まで]
テストだからわざと読みにくくしてるだけだよな? 実際の仕事じゃこんなコードじゃないよな?
やはりそうなんですか。 そういえば先輩は「作り変えても良いよ」と言っていました。 オセロのソースです。
>>30 >>19 に対する返答としては、
「スレッドに関する諸機能は OS が提供するものであり、C 言語には内包されていない。
C からスレッドを使用するには、OS により規定されている方法で OS の機能を使用しなければならない。
Windows ならば win32api (DLL の形で提供されている、最終的には不正命令による内部割込みだったはず。)、
unix ならばシステムコール(i386 上で実装されているLinux を含む種々の unix 系OS は、最終的にソフトウェア割込み(int 命令)だったはず。)を呼び出すことにより、OS 提供の機能を使用する。」
※i386コールゲートによるシステムコールの実装は寡聞にして知りません。教科書的にはこれが正だと思うのですが。
◆QZaw55cn4cってなんでコテ付け続けてるの? 荒れたスレを演出したいの?
僕はプログラムに対してとても詳しいんだ。by.QZ
>>19 に対する返答としては、
Cの言語仕様にはスレッドはないけれど、各環境にはCから使うことのできるスレッド関連ライブラリが
提供されているので、たいていの場合はそれをつかってマルチスレッドアプリを作成する。
ぐらいでいいんでないの。
簡単なレスだと適切な用語を使えない。
小難しそうなレスの時はつぎはぎ感が出ているし内容もずれている。
細かく聞かれると、すぐに別サイトへのアンカーを貼る。
これじゃあ素人だといわれてもしょうがないよね。
どこがずれているか聞きそうだから書いておくよ。
>>38 だとlinuxならシステムコールを自前で呼び出さないとスレッドを用いたアプリが実装できないように読める。
> C からスレッドを使用するには、OS により規定されている方法で OS の機能を使用しなければならない。
> unix ならばシステムコールを呼び出すことにより、OS 提供の機能を使用する。
と。pthreadどこいったの。Windowsはwin32apiを使えばいいって書いてるのにね。
そういうわけで、たたかれてるんだと思うよ。
あー、OS提供の機能がpthreadなんです、ってことか。 めんどくせ。
>>41 >ライブラリ
たしかにこの場合には極めて適切な言葉ですね。
>簡単なレスだと適切な用語を使えない。
>つぎはぎ感
>内容がずれている。
>pthreadどこいったの
ご指摘感謝。次の機会には適切な言葉で対処できるように検討します。
特に、pthread はシステムコールそのものではない点が致命的に違っていました。
>細かく聞かれると、すぐに別サイトへのアンカーを貼る。
これは確かに余計でした。失礼。
おまえらは巣に引っ込んでろ
>>40 は◆QZaw55cn4cなの?
なんで外したの?
>>45 単に付け忘れです。私の専ブラは自動でつけてくれないのです、それだけです。
付け忘れるなら、書き込むな。荒れるだけだ
見栄を張るなら、ボロを出さないように見栄を張れってことだな。 必死でぐぐってる姿は相手から見えないんだから。
>>31 それ七行プログラミングのオセロに似てないか?
まぁ、else使ってる所とか、カスタマイズが甘いから、
七行ぎりぎりの初期のバージョンを改造してるのかな?
そのバージョンならググれば、変数を分かりやすくして
コメントが入ってるバージョンが見つかるはず。
あとは、ぱっと見、入力方法が違うくらいかな?
適当にやったら負けたけど、ちょっと真面目にやったら半分ちょいで完勝したw
>>50 全部走査して最初に置けるところに置く仕様なのに
負けるって、ある意味器用だなw
[1] 授業単元:プログラミング演習 [2] 問題文(含コード&リンク): 以下のような入力が与えられたときに 3 11010 01111 10101 01110 01100 01011 01010 00100 00110 10100 11110 01110 01101 01110 00001 以下のように出力されるプログラムを作成してください。よろしくお願いします。 4 3 8 [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限:2011/4/9
>>52 規則性が分からないんだがヒントはないの?
>>55 もっとヒントが欲しい
最初の数値は 5x5 の塊がいくつ続くかを示していて
11010
01111
10101
01110
01100
に 4 が対応
01011
01010
00100
00110
10100
に 3 が対応
11110
01110
01101
01110
00001
に 8 が対応しており、
3つの塊は互いに独立しているってとこまでは合ってる?
これ以外の入力が行われたときについて何も指定がないんだから 常に438が出力されるコードを書けば題意を満たすことができる
>>56 この問題おもしろいんだよね。前スレの最後の頃に
荒れて荒れてしょうがなかったから、話題を転じる
ためにルールを探すプログラムを書く問題をだした。
この問題も、あなたが、いくつかの問題の解法の
パターンを持っているとして、それを、これではどうかな?
これではだめかな?というふうに確かめていって、
全部解が当てはまったときに、これが多分解法の
プログラムでしょ、とソースを示す。というような問題と
して捉えるならば、面白いんだよね。
>>52 #include <stdio.h>
int main(void){
printf("4\n3\n8\n");
return 0;
}
>>58 ブラックボックスでやるにしてはサンプルが少ないし
独立性の確認もできないのではどうにもならんよ
62 :
57 :2011/04/05(火) 22:40:52.58
あ、間違いありまくりだ 焦りすぎた・・・
63 :
61 :2011/04/05(火) 22:54:14.26
ライフゲームが何世代で収束するかだろ 見ただけで分かったわ
ソースがあがった1時間後に言われてもw
66 :
61 :2011/04/06(水) 01:22:21.57
改善およびコメント付記
http://codepad.org/B93gQFkN ・注意
これは俺が勝手に問題を解釈しただけで、題意と全然違う可能性もある。ライフゲームが正解なのかもしれんw
また、あえて簡単な解き方ではやってなくわかりづらいため、他の人のを待ったほうがいいかもかも
ライフゲーム試したら上から4、8、13だったぞ 適当言うなやww
68 :
61 :2011/04/06(水) 11:56:29.47
文字列を最初と最後から交互に入れ替える暗号プログラムを作ろうとしていますが上手く行きません 例「hello」→「holel」 #include<stdio.h> #include<string.h> int main(void){ char str[80];char str2[80]; int i,j,k=0; printf("文字列を入力してください"); gets(str); j=strlen(str); for(i=0;i<strlen(str);i++){ if(!i%2) str2[i]=str[k++]; else str2[i]=str[j--]; } printf(str2); return 0; }
>>69 int main(void){
char str[80];char str2[80];
int i,j,k=0;
printf("文字列を入力してください");
gets(str);
j=strlen(str)-1; //strlen(str)は'\0'の部分を指し、strlen(str)-1とすることで'o'を指す
for(i=0;i<strlen(str);i++){
if(!i%2)
str2[i]=str[k++];
else
str2[i]=str[j--];
}
str2[i]='\0'; //文字列の最後に'\0'
printf(str2);
return 0;
}
ありがとうございます。 \0が入ってたからそこで文字列が終了してたのか・・・orz
>if(!i%2)
>>69 12345→15243
hello→hoellじゃないの?
・・・・・・ごめんなさいごめんなさいごめんなさいorz
>gets(str); >for(i=0;i<strlen(str);i++){ >printf(str2);
77 :
デフォルトの名無しさん :2011/04/07(木) 01:16:41.55
[2] 問題文(含コード&リンク):
前スレで質問したものを参考にしてステータスを入力するゲームを作っています。
正常に動くんですが、ステータスを表示する時に0がはいってしまうのですが、なかなか直りません・
以下ソースです。ビルドして以下のステータス〜の所で0がはいってしまいます。
お力添えよろしくお願いします。
http://codepad.org/JgDVRSjp [3]環境
OS:Windows
言語:C
[4] 期限:4月7日
よろしくお願いします。
>>77 void state()の中で
player[i].hpをplayer[i].hpCurrentに代入してない
あ、俺が作ったやつだ。conio.hなんて書いたっけなぁ 俺の持ってるソースと照らし合わせてみたら、いくつか違う部分があったのだけれど改良した? もしくは俺が改良してアップしてないだけなのかも。 いま問題なのは、HPが0でないのに0って表示されてしまうってことでおk?
81 :
80 :2011/04/07(木) 01:46:26.33
82 :
デフォルトの名無しさん :2011/04/07(木) 07:53:44.52
>>79 指摘ありがとうございます。なってませんでした・・・
>>80 改良前のソース使ってたかもしれません。
原因がわかったので解決できました! ありがとうございました。
83 :
デフォルトの名無しさん :2011/04/08(金) 16:29:14.44
[1] 授業単元:整数演算 [2] 問題文(含コード&リンク):1個以上32個以下の正整数の最大・最小・最小公倍数・最大公約数を求めよ [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc 3.4 [3.3] 言語:C [4] 期限:2011/04/09 24:00 [5] その他の制限:特になし よろしくお願いします
>>83 #include <stdio.h>
int gcd(int a, int b) { return b ? gcd(b, a % b) : a; }
int lcm(int a, int b) { return a / gcd(a, b) * b; }
int main(void)
{
int i, n, max, min, l, g, temp;
scanf("%d", &n);
if(n < 1 || 32 < n) return 0;
scanf("%d", &g);
max = min = l = g;
for(i = 1; i < n; i++) {
scanf("%d", &temp);
if(max < temp) max = temp;
else if(min > temp) min = temp;
l = lcm(l, temp);
g = gcd(g, temp);
}
printf("最大:%d 最小:%d 最小公倍数:%d 最大公約数:%d\n", max, min, l, g);
return 0;
}
5 6 7 8 9 10 ↑個数を最初に入力する。
#include <stdio.h> int main(int argc, int argv) { int n, i, *elements; char ss[80]; gets(ss); n = atoi(ss); elements = (int *)malloc(sizeof(int)*n); for(i=0;i<n;i++){ gets(ss); elements[i] = atoi(ss); } for(i=0;i<n;i++){ printf("%d, ", elements[i]); } return 0; }
88 :
デフォルトの名無しさん :2011/04/11(月) 09:41:23.56
C+じゃなくてC言語ってconstなかったっけ?
90 :
デフォルトの名無しさん :2011/04/11(月) 23:48:39.01
誘導されてきました。 FIFOを配列を使って実現したいのですが、以下をもっと簡単にできないのでしょうか? unsigned char box[10]; box[0] =1, box[1] =2,box[2] =3, box[3] =4,box[4] =5, box[5] =6, box[6] =7, box[7] =8, box[8] = 9, box[10] =10; この状態で次のキューがたまると FIFOを配列を使って実現したいのですが、以下をもっと簡単にできないのでしょうか? unsigned char box[10]; box[0] =2,box[1] =3, box[2] =4,box[3] =5, box[4] =6, box[5] =7, box[6] =8, box[7] = 9, box[8] =10; このようなFIFOを実現したいのですが、どうしたらよいのでしょうか?
キューがたまってるのに要素が減るのも変な話だけど、memmoveでいいとおもうよ
92 :
デフォルトの名無しさん :2011/04/12(火) 00:08:52.35
そういった関数はつかわないでお願いします。
>>90 >この状態で次のキューがたまると
たまったキューはどこにあるの?
memmove禁止とか不思議だなぁ。 ループでまわせば? for (i=0; i < queue_size - 1; ++i) box[i] = box[i+1];
[1] 授業単元:整数演算 [2] 問題文(含コード&リンク):char 型配列 str[256]を宣言し、キーボードから入力された文字をこの配列に格納するプログラム [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン:Visual C++ [3.3] 言語:C++ [4] 期限:2011/04/09 24:00 [5] その他の制限:特になし よろしくお願いします
#include <iostream> #include <string> int main() { char str[256]; std::string buff; std::cin >> buff; buff.copy(str, sizeof(str)); } 問題文の条件はクリアしてるが 本当はもっと条件あるだろ?
>>96-97 ありがとうございます
格納する「だけ」でいいです。
そうとしか書いてなかったので...
[1] 授業単元:整数演算 [2] 問題文(含コード&リンク):以下の問題に答えなさい 50 Σ((3*i)/2) = A の計算式を計算できるプログラムを完成させなさい。 i=0 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン:Visual C++ [3.3] 言語:C++ [4] 期限:2011/04/09 24:00 [5] その他の制限:特になし 参考書の問題ですが難しくて分かりません。 お願いします。
>>99 ごめん、コードも書かずにつっこみしちゃうけど
「計算できる」とはどういう意味?
単に与えられた計算式をコードに落とせばいいの?
それだけではなく結果を出力する必要がある?
逆に正しい結果だけ出力すればいいなら std::cout << (答えをベタ打ち); というのもあり?
「分からない」んじゃなくて本当は「問題設定ができてない」んじゃないかなあ...
99です。 計算式通りに計算して出力するプログラムです。 ループを使えとヒントに書いてありました。
>>102 ありがとうございました
おかげで何とかなりそうです
[1] 授業単元:プログラムA [2] 問題文(含コード&リンク):演習問題です。 1.for 文の2重ループを使って、九九の計算と出力を以下のようにするプログラムを作りなさい。 __________________________________________ | 1 2 3 4 … |1 1 |2 |3 | 2.float 型の変数a、およびb を引数とし、a がb よりも大きければ整数1 を、小さければ整数‐1 を、同じであれ ば整数0 を返す関数を作りなさい。 3.ポインタ変数p にint 型変数x のアドレスを格納した後、ポインタ変数p の指す変数にint 型変数y の値を足し、ポインタ変数p の指す変数に格納するプログラムを完成させなさい。 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン:Visual C++ [3.3] 言語:C++ [4] 期限:2011/04/ [5] その他の制限:特になし これら問題の解答がなくて困っています。模範解答をどなたか親切な方お願いします!
実際にプログラム動かしてないけど
>>105 1.
printf(" ");
for(j=1;j<=9;j++)
printf("%2d",j);
for(i=1;i<=9;i++){
printf("%d",i);
for(j=1;j<=9;j++)
printf("%2d",i*j);
printf("\n");
}
2.
int func(float a,float b)
{
if(a>b)return 1;
else if(b>a)return -1;
else return 0;
}
3.
int x,y;
int *p;
x=1;y=2;
p=&x;
*p=(*p)+y;
107 :
デフォルトの名無しさん :2011/04/12(火) 23:21:06.14
すみません。質問させてください。 宿題ではないのですけど。 [microsoft visual c++ 2010 express] をダウンロードしたのですが、 このソフトでc言語は動かせますか? c++じゃなくて、cを習っていますので。
>>106 どこからも文句のつけようがない完璧な仕様書がなければコーディングしない、というある意味すれた人達のひとりなのでしょう。
こういう風には死んでもなりたくない、と痛切に感じております。
>>108 ※スレが荒れるので、◆QZaw55cn4cは書き込み禁止です
111 :
デフォルトの名無しさん :2011/04/12(火) 23:36:08.76
>>110 ありがとうございます。
単に使い方を知らなかっただけみたいです。
◆QZaw55cn4cみたいなバカが書き込むと荒れるのでやめてもらえませんか
それも分からないの?
> みたいなちびまるこが書き込むと荒れるのでやめてもらえませんか sum += i * 3. / 2;
118 :
102 :2011/04/13(水) 13:24:41.97
>>105 ありがとうございます
ただ、1の問題が
11 1 2 3 4 5 6 7 8 9
2 2 4 6 81012141618
3 3 6 9121518212427
4 4 812162024283236
5 51015202530354045
6 61218243036424854
7 71421283542495663
8 81624324048566472
9 91827364554637281
続行するには何かキーを押してください . . .
と出力されてしまいます。
120 :
デフォルトの名無しさん :2011/04/13(水) 19:38:46.94
[1] 授業単元:プログラミング演習 [2] 問題文(含コード&リンク): little endianおよびbig endianの両方に対応するように以下のローテーション関数を作れ。 b, w, dはローテートする値、nはローテートするbit数を表す。 BYTE rotateByteRight(BYTE b, BYTE n); BYTE rotateByteLeft(BYTE b, BYTE n); WORD rotateWordRight(WORD w, WORD n); WORD rotateWordLeft(WORD w, WORD n); DWORD rotateDwordRight(DWORD d, DWORD n); DWORD rotateDwordLeft(DWORD d, DWORD n); ただしlittle endianとbig endianのコードを切り替えは、以下のように行うものとする #ifdef __LITTLE_ENDIAN__ // little endianのコード #else // big endianのコード #endif [3] 環境 [3.1] OS:PPCおよびIA32のLinux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限:今日中 [5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々) 標準ライブラリは使わない
>>120 これ出題が間違ってない?
エンディアンによってローテイトの方法が変わるとは知らなんだ
普通、変数に格納された時点でエンディアンの問題は解決してるだろ
>>119 失敬。確かに間違ってたわ。
ただ、間違って入るものの、119の出力にはならないな
2行目コピーし間違ってたりしない?
123 :
デフォルトの名無しさん :2011/04/13(水) 20:53:57.46
固定小数点の平方根を求め、その結果を固定小数点で返す関数 固定小数点は整数部なしとする
>>122 すいません
コピペしたらできなかったので、勝手にいじりました
コピペした状態のままだと
1 2 3 4 5 6 7 8 91 1 2 3 4 5 6 7 8 9
2 2 4 6 81012141618
3 3 6 9121518212427
4 4 812162024283236
5 51015202530354045
6 61218243036424854
7 71421283542495663
8 81624324048566472
9 91827364554637281
と出力されます
多少の表示の乱れくらい自分で直せよと思う この程度の対処をできない奴がプログラムで単位を取るのは納得できない でもそういうスレなんだよなあ・・・
>>124 この今の状況を下のようになるよう治したいよね。
124と下とはどこが違うか探してみようっ!
見つけたら、どう変更すればいいか考えてみようっ!
1 2 3 4 5 6 7 8 9 ←この行の最初が全角になってるけど、実際は半角スペース2つでもおk
1 1 2 3 4 5 6 7 8 9
2 2 4 6 81012141618
3 3 6 9121518212427
4 4 812162024283236
5 51015202530354045
6 61218243036424854
7 71421283542495663
8 81624324048566472
9 91827364554637281
>>121 ネットワークプログラミングすると割とよく。
>>127 その表示にしてもだめなんじゃない?罫線が。たぶん。
>>127 #include<stdio.h>
int main(void)
{
int i,j;
printf(" |");
for(j=1;j<=9;j++){
printf("%5d",j);
}
printf("\n");
printf("---+---------------------------------------------------\n") ;
for(i=1;i<=9;i++){
printf("%2d|",i);
for(j=1;j<=9;j++){
printf("%5d",i*j);
}
printf("\n");
}
return 0;
}
これで良いのでしょうか?自身はありません
ためそう。
>>90 一般的にFIFOを実装する場合、要素の入れ替えは行わない
プッシュ位置とポップ位置を変数として持っていれば良い
厳密にはポップ位置がプッシュ位置を追い越さない工夫が必要だが、十分な配列サイズが有れば気にする必要は無いと思う
雑な例でも書くかと思って書き終わったらFILOだった。 自分のふがいなさを痛感し、また次回に。
136 :
デフォルトの名無しさん :2011/04/14(木) 16:11:25.74
[1] 授業単元:整数演算
[2] 問題文(含コード&リンク):
http://ideone.com/vVzAK [3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc 3.4
[3.3] 言語: C
[4] 期限: 2011年4月16日24:00まで
[5] その他の制限: 特になし
お願いします
上限は?
138 :
デフォルトの名無しさん :2011/04/14(木) 17:15:43.78
4月17日(日)0:00 です。
Mの要素の上限じゃないの?
#include <stdio.h> #define N 10000 char M[N]; void func(int n) { if(n >= N || M[n]) return; M[n] = 1; func(2 * n + 1); func(3 * n + 1); func(5 * n + 1); } int main(void) { int i; func(1); for(i = 0; i < N; i++) if(M[i]) printf("%d ", i); return 0; }
141 :
デフォルトの名無しさん :2011/04/14(木) 17:27:34.89
だめでした。
Mを以下の条件を満たす最小の集合とする。 ・1∈M ・n∈Mならば2n+1∈M ・n∈Mならば3n+1∈M ・n∈Mならば5n+1∈M Mの要素を小さい順に出力せよ。 1: 3 4 6 3: 7 10 16 4: 9 13 21 6: 13 19 31 7: 15 22 36 9: 19 28 46 10: 21 31 51 13: 27 40 46 15: 31 46 76
>>143 ※スレが荒れるので、◆QZaw55cn4cは書き込み禁止です
テクニックに酔ってるようなコードだし
「どうだ、俺様ってスゴイだろう」って鼻から息をフーフー吹き出しているような 顔が脳裏に浮かぶようだなよ 気持ち悪いなナルシストってさ
特にかわったことはしていませんが、どの点が「テクニックに酔っている」とお感じになったのですか?
典型的な構ってちゃんでその癖人の批評が苦痛でしょうがない典型的な自己愛性人格障害 放置放置
巣にこもって両方でてくんな
議論に持ち込めば屁理屈で相手をやり込めると思っている固い信念を 持っているから下手にこいつのペースに乗せられる奴は馬鹿
#define N 3225 // Binary sort void push(struct node **root, int n) { struct node *p = *root; if (p == NULL) { p = malloc(sizeof(struct node)); p->n = n; p->left = p->right = NULL; *root = p; return; } if (n != p->n) { if (n < p->n) { push(&p->left, n); } else { push(&p->right, n); } } } int pop(struct node **root) { struct node *p = *root; int n; if (p == NULL) return -1; if (p->left) return pop(&p->left); assert(p->left == NULL); n = p->n; *root = p->right; free(p); return n; }
>>152 ささいなことですが、
>struct node *p = *root;
これはありえません。
私なら、p は malloc() の返り値をうけるため *だけ* に使い、すでにpush() に入ったときからわかっている値は *root とかきます。
>>152 は p がすでにある *root の場合と *root == NULL のときに malloc() から得た値の場合との両方があり、読みにくくなってしまっています。
あとから読むときのことを考えたほうがいいと思います。
人のプログラムにいちいちケチを付けるな 人には人の流儀がある お前を中心に世の中が回ってるわけじゃない 小学生でも分かる事がわからないのか? いいから巣に帰れ
>>153 ささいなことですが、
> if (!*root)
> if (*root == NULL)
これはありえません。
どっちかの書き方に統一しろバカ
156 :
152 :2011/04/15(金) 10:01:42.55
> assert(p->left == NULL); assert(!p->left); だった▼よく見てなかった。
再帰にする必要も、双方向にする必要もないな
>>157 双方向ではなく二分木です。
そしてニ分木を非再帰で書くんですか?やってできないことはないでしょうけれども、それでどんな利益があるのでしょうか?
と、
>>143 を必要もないのに二分木で書いている馬鹿が申しております
>>158 はまるで自分自身に吐いた言葉のようですね
>>159 生成された新しいデータを加えて全体を逐一ソートにかけるくらいなら、 Ο(logn) の二分木に放り込む方が効率がいいと考えています。
>必要もないのにニ分木で書いている
ではニ分木を使わないやり方を書けるのなら書いてみていただけませんか。その上で客観的に比較してみましょうか。
効率で言うなら
>>140 のほうがよっぽどいいだろw
a.out | sort | uniq | tail -n 3225
165 :
デフォルトの名無しさん :2011/04/15(金) 13:55:06.27
136です。
上限は適当な数で構わないと思います。
今更ですが
>>138 >>141 は私ではないので答えさせて頂きました。
>>140 皆様
ありがとうございました。
>>161 アホ
氏ね
誰もお前と競争したくないわけ
何が「客観的に比較してみましょうか」だよ
相手が「したい」か「面倒臭い」のかも聞かないで自分の意見に従わせる気か
こんなもんでよかったんじゃね? #include <stdio.h> int main(void) { enum {n=100}; char M[500]={ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, }; int i=1;M[1]=1; while(i<n){if(M[i]==1)M[i*2+1]=1;M[i*3+1]=1;M[i*5+1]=1;i++;} for(i=1;i<n;i++)if(M[i]==1)printf("%3.3d ",i); return 0; }
5倍も使うのは贅沢すぎるんじゃね?
こんな感じ? #include <stdio.h> int main(void) { enum {n=100};char M[n]={0};int i=1;M[1]=1; while(i<n){if(M[i]==1){ (i*2+1)<n?M[i*2+1]=1:0; (i*3+1)<n?M[i*3+1]=1:0; (i*5+1)<n?M[i*5+1]=1:0; }i++;} for(i=1;i<n;i++)if(M[i]==1)printf("%3.3d ",i); return 0; }
必ず3回判定するのも無駄じゃね
>>162 おっと。見落としていました。まあ、そうやるのが普通なんでしょうね。
>>161 は撤回します。
>>171 客観的に比較するんじゃなくて、撤回するんだ?
また恥を晒したか ◆QZa w55cn4c そんなんでよく書き込みできるな あ、恥の概念がないんでしたっけww
[1] 授業単元:画像処理 [2] 問題文(含コード&リンク):アスキーコード(0x21~0x7eまで)表を出力をするプログラムを作りなさい [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: Visual C++ 2008 [3.3] 言語: C++ [4] 期限:2011年4月18日 [5] その他の制限:なし
>>167 >char M[500]={
>0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
>0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
>0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
>0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
>0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
>0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
>0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
>0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
>0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
>0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
>};
static char M[500];
でOK。
すれ違い
// CL /TP
>>174 #include<stdio.h>
int main(void)
{
int i,j;
printf("+---------------------------------------------\n") ;
printf("|Oct");
for(j=1;j<=8;j++){
printf("%5o",j);
}
printf("\n");
for(i=0x20;i<0x80;i+=8){
printf("|%3o",i);
for(j=0;j<8;j++){
if(i+j+1>=0x7f) break;
printf("%5c",i+j+1);
}
printf("\n");
}
return 0;
}
>>181 依頼者が求めていることに答えるのがこのスレの趣旨
185 :
174 :2011/04/16(土) 15:38:22.55
>>174 です。遅くなりました
表の形は↓のような形でお願いします
0x20 0x30 0x40 0x50 0x60 0x70
0 0 @ P ` p
1 ! 1 A Q a q
2 " 2 B R b r
3 # 3 C S c s
4 $ 4 D T d t
5 % 5 E U e u
6 & 6 F V f v
7 ' 7 G W g w
8 ( 8 H X h x
9 ) 9 I Y i y
a * : J Z j z
b + ; K [ k {
c , < L \ l |
d - = M ] m }
e . > N ^ n 〜
f / ? O _ o
あと書き忘れてましたが、問題文に「for文の連続ループを用いる」ようにと書いてありました。
忘れていて申し訳ありません
そしてありがとうございます
>>186 本当に申し訳ありません
それと、このプログラムを<stdio.h>のみで作ることはできますか?
>>182 ほら
>>187 のように結局はなるんだよ
わかったか
C++と書いてあっても大抵はC
classや継承を使う場合のみC++だと思って置けば大抵は間違いない
>>188 依頼者の指示内容の誤りは、依頼者自身に言えよ。
間違ってても、指示通りに作れば良いんだよ。
面倒なら回答する必要無いんじゃない?
>>189 >間違ってても、指示通りに作れば良いんだよ。
その通りだな。
疑問持ったなら依頼者に確認
勝手に仕様を俺俺変更するものじゃないよな
その語尾が気に入った。
>187 >このプログラムを<stdio.h>のみで作ることはできますか? それマジで言ってる? 言語はC++なのに? CはC++の「ほぼ」サブセットだから可能ではある。 しかしそれをC++のコードと言われると、モヤモヤする。 それにしても後出しで条件付けられると、手戻りが ひどいことになるのだから、回答付けてくれた人に申し分ないと思わなきゃ。 >189さんの言うことも最もですが、>182さんの気持ちわかります。
194 :
デフォルトの名無しさん :2011/04/16(土) 18:24:49.95
[1] 授業単元: C [2] 問題文(含コード&リンク): [3] 環境 [3.1] 7 [3.2] gcc [3.3] C [4] 期限: 今日の20:00 [5] その他の制限:a[]など配列は使わない。 リスト構造で名簿を作っているんですが、標準入力から名前を常に先頭に 入れるという処理を10回繰り返しても10個とも全部最後に入力した名前に なってしまいます・・・どうしてでしょうか? 山田 田中 佐藤 鈴木 村上 山本 裏山 田山 小島 島々 これだけの名前を先頭から順番に入れて, printf("%s",P.first->name); printf("%s",P.first->->next->name); printf("%s",P.first->->next->next->name); ・ ・ 10個とも島々になってしまいます・・・何故でしょうか? 一番簡単なリスト構造で先頭に入れるプログラム作っていただきませんか? ちなみにPはfirstを含む構造体です。firstは構造体NAMEへのポインタで、 最初first=NULLです。 name,nextはNAMEのメンバーです。
196 :
174 :2011/04/16(土) 18:52:07.23
>>195 ありがとうございます
皆さまご迷惑をおかけしました
今後は皆様のご迷惑をかけないよう、努力していく所存でございます
// CL /clr
>>187 using namespace System;
const int first = 0x21;
const int last = 0x7e;
const int height = 16;
const int begin = (first / height * height);
const int end = (last / height * height + height);
const int width = (end - begin) / height;
int main()
{
int i, j;
wchar_t c;
Console::Write("{0}{0}{0}", L' ');
for(i = begin; i < end; i += height)
Console::Write(" 0x{0,2:x}", i);
Console::WriteLine();
for(i = 0; i < height; ++i){
Console::Write("{0,2:x}", i);
for(j = 0; j < width; ++j){
c = begin + i + j * height;
Console::Write("{0,5}", ((first<=c && c<=last) ? c : L' '));
}
Console::WriteLine();
}
}
なんでトリップ外してんだよ /tech/1295273862/ もNGしなきゃならんじゃないか
頼まれてもいないのに勝手にやって金払えか どこのやくざだよ
>>201 その心配はありません。情報宣伝活動の一環ですので、私が勝手に書く分については「ポリタポ」を請求することはありません。
>>200 じゃあトリップつけます。
>>202 ゴミすら書けないあなたよりましです。
自分を批判する人間は自分より下って思い込みはどうにかしたほうがいい
>>204 そのつもりはなく、いただいたコメントには真摯に対応しているつもりです。
そのような思い込みが感じられるとすれば、私の文面に問題があるのかもしれません。
もしよろしければ、どこがまずいのかポインタでもいただければありがたいです。
人の嫌がることをすすんでやります
207 :
194 :2011/04/16(土) 20:51:05.16
>>202 そういうなら
ゴミじゃないコード晒さないとな
210 :
◆QZaw55cn4c :2011/04/17(日) 02:13:20.89
>>173 目先の端だか恥だかは気にしない性分なんです。それに、
>>140 に比べて、
>>143 には利点もあります。
常々使っている mygetline() もそうですが、C でちゃんとかくのなら、
>>143 位は考慮しておきたいもの、と考えています。
>目先の端だか恥だかは気にしない性分なんです。 こりゃ人に嫌われるわ 特に女に嫌われる 女は屁理屈大嫌いだからな お前いい年して童貞だろ?
[1]C言語演習 [2]問題文 次の形式のタブ区切りファイルがある。(行数は最大で1000万行とする) 生徒ID クラス名 国語得点 数学得点 英語得点 生徒IDは8桁の0から9で構成される文字列 クラス名は4桁の0から9で構成される文字列 国語得点、数学得点、英語得点は3桁の0から9で構成される文字列とする。 (1)各教科の得点の和が同じ生徒達のグループについて、そのグループが何人で何クラスの 生徒から構成されているかを、得点和毎に表出力せよ ただし0人で構成されるグループについては出力する必要がない。 形式例 得点:123 人数:5人 グループ数:4 得点:128 人数:3人 グループ数:3 得点:214 人数:11人 グループ数:9 ............ (2)それぞれの教科の得点が所属しているクラスの各教科の平均点の大小関係と 同じ生徒をリストアップせよ ただしあるクラスの2つの教科の平均点が一致している場合はその2つの教科の得点の 大小関係は不問として出力する。(3つが一致している場合はそのクラスの生徒全員 がリストアップされることになる [3] OSはLinux,言語はCです。(C++は不可) [4] 4/30まで [5] stdlib.h stdio.h string.hをincludeしても良いがそれ以外は不可だそうです よろしくお願いします。
[1] 授業単元: 無し [2] 問題文(含コード&リンク): A,A+,B,B+,C,C+,D,D+,E,E+,F,F+と文字が並んでて、1つ文字を入力したときに その文字が例えばAならA→B+→D→E+→A、D+ならD+→F→A+→C→D+というように 入力された文字から2つ飛ばしで最初の文字まで表示する [3] 環境 [3.1] OS: MAC OSX [3.2] コンパイラ名とバージョン: gcc 4.0.1 [3.3] 言語: C [4] 期限: 無期限 [5] その他の制限: 特になし
D+って1つの文字って言えるのか?
>>212 グループ数:xx ではなく クラス数:xx ではないかな。
216 :
212 :2011/04/17(日) 07:30:53.46
>>215 もしかすると写し間違いがあるかも知れません。
>>214 文字じゃなくて文字列ですね
1つというのも、A〜F+までのなかから1つ選んで、ということです
>221 それはそうですね。 じゃkeyに読み替えてください。 変数に具体的な名前を与えたかっただけです。
224 :
◆QZaw55cn4c :2011/04/17(日) 09:41:21.65
>>212 グループ数というのは、問題文をみるかぎり「同一得点だった人数」だと思われますから、グループ要素数、くらいになるのでしょうかね。
それよりも(2)の日本語が全然わかりません。(2) の出力結果例を教えてください。
225 :
◆QZaw55cn4c :2011/04/17(日) 09:55:22.44
>224 ちがいました。クラス数ですね。やはり。
>>219 VC 用に修正
char *mondai[]={"A","A+","B","B+","C","C+","D","D+","E","E+","F","F+",""};
>>212 (2) 形式例
クラス:1212
クラスの平均点の高い順:国語90.5>英語60.0>数学40.5
国語 英語 数学
A子 87 66 59
B男 90 87 80
クラス:1213
クラスの平均点の高い順:英語30.4>数学29.8>国語20.0
英語 数学 国語
C子 86 67 55
D男 91 88 82
D子 90 88 87
>>226 それをせずにすむ環境(または言語)はどちら?
Sなんとかは正しく動作すらしないので、客観的には
>>223 がいいかな。警告もでなかったし。
230 :
デフォルトの名無しさん :2011/04/17(日) 18:06:29.08
>211 目端がきく、というイデオムを軽くバクったつもりですが、ご理解いただけなかったでしょうか?
>>206 >人の嫌がることをすすんでやります
この評価が一番適切
>>230 理解したくないね
独りよがりのパクリとかどこのナルシストだよ
分かりやすく言えないのかアホ
>>231 人の嫌がる事を進んでやります(・ω・)
人の嫌がる事を進んでやりまず<ヽ`∀´>←意味が違う
◆QZaw55 cn4c は在日チョンではないかと最近思い始めた
>>212 のような問題って、昔Cプログラマ適性検査として
入社後の配置決定試験の時に出された課題みたいな感じ
確か3時間で仕様通りのコードが書けなければ
3年以内退職を前提とした誓約書書かされたっけ
俺?見事失敗。その代わり3年間はオフィスに10時に
着いて、あとは喫煙室との往復だけで給料貰ったし
ボーナスも出たし結婚もしたし...
今は嫁のツテでIT関連学校の教師
この業界はよほどの素質かよほどのコネが無いと生きていくのは
無理なんじゃね?
>234 お前仕事してんの?ニートだろ?
>>212 >ただしあるクラスの2つの教科の平均点が一致している場合はその2つの教科の得点の大小関係は不問として出力する。
もし国語と数学のクラスの平均点が 50 、英語が 70 のとき、
生徒A 国語 100 数学 0 英語 69
生徒B 国語 0 数学 100 英語 71
生徒C 国語 100 数学 0 英語 49
生徒D 国語 0 数学 100 英語 51
この四人のうちどれが出力対象になるのでしょうか?
問題文だけでは、二つの教科の平均点が一致したとき、残りの教科をどう扱うかがはっきりしません。
国語<英語 AND 数学<英語 の生徒。
ま、このような時勢に4月末迄の期限のまだ余裕のある宿題を 日曜日がな一日潰して片付けてあげる人は偉大なのかそれとも... ちなみに(1)と(2)はmainを共通にすべきじゃないかと...
240 :
212 :2011/04/18(月) 04:45:54.88
>>235 取り敢えずはお礼を申し上げます。どうもお手数をおかけしました。
実はこの問題研修終了試験の過去問の5重コピーくらいの劣悪な
コピーから写したものです。もういちど調べてみるとやっぱり
グループ数じゃなくてクラス数でした。
ただCodePadは無償じゃないそうなので開くのには躊躇しております。
241 :
213 :2011/04/18(月) 06:29:36.20
>>218 ,223,226
皆さんありがとうございました!
>>239 自分の力を誇示したいだけだと思われます。そして
>>235 の
>3時間ですか?ちょっと無理ですねえ。
からも分かるように本当はプログラマ適性がないにも関わらず脅迫的にプログラムに
取り憑かれています。変ですね。
>>239 例のスレッドに誘導をはかるべく自分の力を誇示したいだけです。意図したとおりにはなっていませんが。
そして、
>>235 の
>3時間ですか?ちょっと無理ですねえ。
からも分かるように職業的適性はないアマチュアにも関わらずプログラミングに取り憑かれています。
やっぱり変ですね。
>212 これってどのくらいのレベルが想定ですか? 最大1000万レコードというあたりが、初学者向けとは思え無いので確認したいのです。 ちょろっと1000万レコード生成と読み込み処理だけコーディングしてみたけど、 IOの時間だけでも結構かかります。前データをオンメモリに展開すると250メガくらい になります。 最近のPCではこのくらいは屁でもないですが、そこは富豪的アプローチでOK? これが最大1000レコードで各教科100点満点なら初学者向けだと思います。 1000万レコード、999点満点となると、オーバーフローを気にしなきゃならなくなるので、 かなり注意が必要です。 と思って面倒そうだから見てたけど、どうでしょ>212さん。
>235 1000万レコードのデータ食わせてみたら、とりあえずちゃんと動いているっぽいです。 コードをちゃんと追ってませんが、レコードをノードに展開しながら、 2分木にソートしながら突っ込んでいる感じでしょうか? でも使用メモリ量は1.5M位だったようなので違うかな。 各関数に何をする関数かを示すヘッダコメントを書くと、だいぶコードが読みやすく なるので、心がけていただけないでしょうか。
1000万レコード全部合計点同じデータ食わせたらちゃんとうごかねえんじゃね?
100万レコード全部合計点違うデータ食わせたら動かねえんじゃね??
>>243 例のスレッドに誘導をはかるな。スレの邪魔だ。宣伝はあのスレでだけやれ。
他の人の迷惑だ。
>職業的適性はないアマチュアにも関わらずプログラミングに取り憑かれています。
だから変だと思いませんか?なぜそんな趣味レベルの力しかないのにそれで強引に
金儲けをしようとするのですか?自分の力を過大評価しているとは思いませんか?
金儲けとはそんな甘い物じゃありませんよ。
どちらにしろ職業にする力量が明らかに不足しているのにそれで金儲けしようなどとは
いかにも図々しい話です。ナルシスティックで自分に酔っているとしか思えませんね。
249 :
212 :2011/04/18(月) 11:07:29.36
>>244 なんか凄い空気ですね...
>>212 の問題はうちの会社が多分主記憶がMバイトオーダーの
中型UNIX機で業務アプリ開発をやっていた時代の問題じゃ
ないかと...1000万行ってのは当時でもそれほど大きな
データじゃなかったようです。他の過去問にもそのような
数字が出ていますし。ちなみに現在うちの会社が扱っている
のは一案件10億とか100億とかのレコード数当たり前だそうで
す。
>>212 (1) のみ
#include<stdio.h>
#include<stdlib.h>
typedef struct tag_hoge_t{
long num;
unsigned long class_bits[(10000+32-1)/32];
}hoge_t;
int bit_count(const hoge_t *hoge){
int i, j, ret=0;
for(i=0;i<sizeof(hoge->class_bits)/sizeof(hoge->class_bits[0]);i++)
for(j=0;j<32;j++) if((hoge->class_bits[i]>>j)&1) ret++;
return ret;
}
int main(int argc, char *argv[]){
hoge_t *hoge=calloc(sizeof(hoge_t), 1000*3);
long i, student_id, class_id, japanese, math, english, score;
FILE *fp=NULL;
if(argc>1) fp=fopen(argv[1], "r");
if(hoge==NULL || fp==NULL) exit(1);
while(fscanf(fp, "%ld %ld %ld %ld %ld", &student_id, &class_id, &japanese, &math, &english)==5){
if(student_id<0 || 99999999<student_id) break;
if(class_id<0 || 9999<class_id) break;
if((japanese<0 || 999<japanese) || (math<0 || 999<math) || (english<0 || 999<english)) break;
score=japanese+math+english;
hoge[score].num++;
hoge[score].class_bits[class_id/32]|=1<<(class_id%32);
}
fclose(fp);
for(i=0;i<1000*3;i++)
if(hoge[i].num) printf("得点:%ld 人数:%ld人 クラス数:%d\n", i, hoge[i].num, bit_count(&hoge[i]));
return 0;
}
業務相手にお優しいこって
>>212 http://codepad.org/Y5lMdhWZ ・(1)、(2)の両方。
・ただし、Windowsでの作成のためLinuxで動かすにはちょっと改変が必要(キャリッジリターンの部分)。
・科目の数が3つとなっているが、遊び心で勝手に3つ以外(5個とか100個とか)可能にした。
そのため、入力するファイルが若干変わり、次のように入力してもらうようにした。
例.
国語\t数学\t英語\t・・・\t理科
12345678\t9012\t345\t567\t・・・\t890
以下略
まぁ、科目増えた分の点数と、1行目に科目名入れるようにしたってだけ。
・テスト行うため、ファイル作成する関数導入(rand()使用、srand()は付けてない)。上記にしたがった書き込みを行う。
・malloc使い過ぎたときのエラー対策が不十分(freeがてけとー)。
・データは、例えばid(8桁)の場合、00011111のように0を省略せずに入力しないとプログラム終了させている。
・わかりやすくを心がけて作ったつもり(遊び心スイッチ入れた後はそんなこと気にしなかった。)。
・ということもあり、計算速度はすげぇ遅い。1000万行はやるな。
>>245 テストありがとうござます。
二分木に突っ込んでいるのは、レコードそのものではなく、0+0+0〜999+999+999 の点数を単位としたデータ構造で、
点数ごとに同点数の人数とクラス名の線形リストを持っています。同一点ごとのクラス数は、線形リストに追加された要素の数を最後に勘定することで調べています。
レコードそのものをメモリに全部乗せるのは無理と踏みました。
>>246 プログラムのつくりとしては問題ありません。二分木に一つの要素が追加されるだけになります。
>>247 それは問題ですが、題意に沿うかぎり、0〜999+999+999 の計 3000通り弱ですので、メモリは足りるだろうと踏みました。
>>248 >なぜそんな趣味レベルの力しかないのにそれで強引に金儲けをしようとするのですか?
金儲けじゃありません。モリタポ儲けです。
>>254 0-999が3組ある場合の組み合わせが3000通り弱なの?
国語が0点、算数が0-999の1000人と
国語が1点、算数が0-999の1000人と
国語が2点、算数が0-999の1000人で3000通りになってしまったよ。
てゆーか、何でそんなにプログラミングが好きなのか よくわからない 仕事とか勉強とかに必要だからいうのは兎も角
暇つぶしに宿題やるのは悪くないと思ってる職業マならここに。 関係ない人が、目的もなく宿題をやるのは不思議。けどなんかやろうとしてたんだっけか。 日曜大工的なもんだと思えばいいんでないかな。
>>258 少しでも、C言語の周りを活性にしようとしているだけだろ。
肝心のソースコードを晒す場所があまりないからここでということ。
てか何でソースを晒したいの?
>>259 日曜大工が趣味の人が、日曜大工の輪を広げたいがために
ホームセンターで展覧会を開いていると思えばよい?
それも、何度も拒絶されているにもかかわらず、懲りずに展覧会を開く。
>212
続々コードが上がってきましたね。
ちょっと読んでみます。
私もまずは1だけです。
ttp://codepad.org/DDlp8Quq >249
>>212 の問題はうちの会社が多分主記憶がMバイトオーダーの
>>中型UNIX機で業務アプリ開発をやっていた時代の問題じゃ
であれば、今上がっているようなコードではダメでしょうね。
すべてのデータをオンメモリに展開するわけにはいかないでしょうから。
点数別に読み込みながら集計して、出力の繰り返しかな?
>ちなみに現在うちの会社が扱っている
>のは一案件10億とか100億とかのレコード数当たり前だそうです。
そういう場合はDB使っているでしょうね。
自分のは兎も角、人が書いたC文書読んで面白いの? てか最近はソフト頒布はオプソで原則が浸透しつつあ るんで、読まざるを得ないことも少なくないけど
C文書w
>>265 他人のレスを読むのが面白いかどうかというとなんともいえないのと同じで、
反応するためには普通に読むでしょう
こういう言葉のやりとりが面白くないから、少しはソースコードでも 載らないものかと思ってる人にサービスするためのスレ。 宿題であるかなんて関係もない。
>>255 >>212 >各教科の得点の和が同じ生徒達のグループについて
国語・数学・英語の総和だけ考えればいいので、個別で0〜999 までなら、総和は 0〜2997 です。この2998通りについて、おのおの出現回数と出現したクラス名を記録しておけばいいわけです。
>>256 そういう換金可能性は、どのような「もの」に対しても当てはまることです。
どんな「もの」に対しても当てはまる性質を理由にあげても(それはオークションにかければ理論上どんなものでも換金できます。)それによr営利目的か営利目的でないかを判断することはできないのではないでしょうか。
>>272 対価を取らずに宿題に答えるスレで、
対価を取るスレの宣伝行為はやめろ。
スレの進行の妨害だ
マジレスするとこっちのスレで対価無しの回答してたらモリタポ儲け出来ないじゃん 出題者側もそれに気づいてるから専用スレに出題者が現れないんだろ
>>274 有償スレへのリンクを貼り付ける行為がきわめて悪質。
>>273 出題者の望む最大限の行動(すなわち動く C プログラムソースを作成し公開すること)を「妨害」と判断した根拠を示してください。
そういえば、あなたは私を糾弾するばかりで、ひとつもソースを公開していませんね。それこそこのスレの進行を妨害しているのではないでしょうか。
一度くらい、ソースを公開したその同じレスの中で私を批判してみてください。
誰と戦ってるんだw
>263です。 >250 コード読みました。 比較した中では一番シンプルでいいと思います。 読み込んだデータよりも、集計データの方をオンメモリで持ったほうが 小さくていいですね。しかも読みながらビンソートになっているから パフォーマンスも一番です。 自分のコードも始めに読み込みデータと集計データを、オンメモリに もつようにしていたのですが、ソートは必要だと思い込んでいました。 そうか、集計時にビンソートになっているから、読み込んだデータのソートは 不要ですね。ソートが必要だと思ったので、メモリ上に読み込んでいたので、 そのことに気づけなかったのは、自分が残念です。 クラス数の集計でビットカウントが使われているのが、私と全く同じだったので 少し親近感があります。 それだけに自分のコードが残念だ。
282 :
212 :2011/04/19(火) 06:58:15.81
>>281 ,263さん
貴重な時間を割いて回答いただきありがとうございました。
283 :
253 :2011/04/19(火) 10:51:11.25
需要ないが、主に自己満足のため(あと、他に課題も相談もないようなので)、
>>253 の改善をあっぷ。
http://codepad.org/bqK0m1aY ・キャリッジリターンなんて関係なかった。たぶんlinuxでも動く。
・つーか、便利な関数もっと使えばよかったと今更思う。
・メモリの開放をも少ししっかりやった。
・他いろいろ細かい部分の修正。
・遊び部分はそのまま。
>>183 クラス名を"0000"〜"0009"に決め打ちしてない?
出力結果が何かおかしいんだけど
286 :
@ :2011/04/19(火) 17:47:07.29
[1] 授業単元: C [2] 問題文(含コード&リンク): エラトステネスの篩 第一引数にint型の変数m, 第二引数にint型の配列Pが与えられたとき、 配列Pにm以下のすべての素数を格納し、格納した素数の個数を返す関数 int eratosthenes(int m, intP[]) を作成せよ。 なお、格納した素数の個数がhの場合、素数の配列PのP[0]からP[h-1]に昇順に 格納されているものとする。 [[3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限:2011/4 [5] その他の制限:なし よろしくお願いします。
287 :
A :2011/04/19(火) 17:48:05.50
よろしくお願いします。 #include<stdio.h> #define max_n 10000/ int eratosthenes(int m, int P[]); int eratosthenes(int m, int P[]){ /* この部分を作成 */ } main(void){ int i,n,h; int P[max_n]; printf("Input n: "); scanf("%d",&n); h=eratosthenes(n,P); printf("Primes not exceeding %d are :\n",n); for(i=0; i<h; i++) printf("%d ",P[i]); printf("\n"); }
288 :
283 :2011/04/19(火) 18:38:54.67
>>284 クラス数少なくするか、生徒数多くするかしないと、課題(2)の結果が1クラスあたり1人となってしまうため、クラス数を減らしてます。
#defineで10000に戻せば課題のどおりです。
>>286 int eratosthenes(int m, int P[])
{
int i, j;
for(i = 0; i <= m; i++) P[i] = 0;
for(i = 3; i <= m; i += 2) P[i] = 1;
P[2] = 1;
for(i = 3; i * i <= m; i += 2) if(P[i]) for(j = i * i; j <= m; j += 2 * i) P[j] = 0;
for(i = j = 0; i <= m; i++) if(P[i]) P[j++] = i;
return j;
}
篩として使った配列に、素数をつめなおすってなんか気持ち悪いなw
>>290 ソートして結果を返すっていう関数もあるからね
292 名前:あぼ〜ん[あぼ〜ん] 投稿日:あぼ〜ん
294 名前:あぼ〜ん[あぼ〜ん] 投稿日:あぼ〜ん
C言語 ソースファイル #include <stdio.h> int main(void){ int ch; FILE *sfp, *dfp; char sname[64], dname[64]; /* ファイル名 */ printf("コピー元ファイル名:"); scanf("%s", sname); printf("コピー先ファイル名:"); scanf("%s", dname); if ((sfp = fopen(sname, "r")) == NULL) { /* コピー元をオープン */ printf("コピー元ファイルをオープンできません。\n"); } else { if ((dfp = fopen(dname, "w")) == NULL) { /* コピー先をオープン */ printf("コピー先ファイルをオープンできません。\n"); } else { while ((ch = fgetc(sfp)) != EOF) { fputc(ch, dfp); } fclose(dfp); /* コピー先をクローズ */ } fclose(sfp); /* コピー元をクローズ */ } return 0; }
ファイルを連結するコマンド cat の自家版 次の処理を行うプログラムを作成します。 コマンド引数として,0個以上のファイル名を指定します。 コマンド引数で与えられた名前のファイルの内容を順次連結して、標準出力に出力します。 コマンド引数が与えられなかった場合、標準入力からのデータを標準出力に出力します。 エラーメッセージは、標準エラーへ出力します。 よろしくおねがいします
>>298 その昔、void 氏が fj.sources に投稿していた記憶がありますが、今となってはどこを探せばいいのでしょうかね。
知らないなら黙っててくれませんか
まるきりクローンが欲しいの?
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
http://deaimail.from.tv/up/src/up3988.jpg [3] 環境
[3.1] OS:windows
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C
[4] 期限:本日中
[5] その他の制限:
if・for・2次配列くらいしか習っていないので
可能ならそれらの文で書いていただけると助かります
>>305 #include<stdio.h>
#include<math.h>
int main()
{
int i;
double x[12];
double u,s;
printf("データを12個入力してってね\n");
for(i=0;i<12;i++)scanf("%lf",&x[i]);
u=0;
for(i=0;i<12;i++)u+=x[i];
u/=12;
s=0;
for(i=0;i<12;i++)s+=(x[i]-u)*(x[i]-u);
s=sqrt(s/11);
printf("平均=%lf 標準偏差=%lf\n",u,s);
return 0;
}
[1] 授業単元:ポインタ関連 [2] 問題文(含コード&リンク): 2重ポインタを使って、 014c7fcがポインタアドレスで +0x4f4したところに01を代入して +0x4f8したところに02を代入するソースを書いてもらえませんか? お願いします [3] 環境 [3.1] OS: windows [3.2] VC++で [3.3] 言語: できればC++で [4] 期限: 2011年4月28日まで [5] その他の制限: 病院(肘の手術をうけました)にいて自分自身あまり習ってません・・・
309 :
308 :2011/04/20(水) 21:28:44.35
何か足りないころがありましたら、言ってください
それ本当に問題文あってるか?
311 :
308 :2011/04/20(水) 21:58:17.03
0x4f4と0x4f8に関してはオフセットです
そもそも一般的なwindowsアプリじゃ物理アドレス決め打ちなんて出来ないだろ アドレスを指定する事は出来るがそこが物理アドレスと一致してるとは限らない
314 :
308 :2011/04/20(水) 22:08:03.40
ではDLLとかでもおkです
int **ppi=reinterpret_cast<void**>(0x014c7fc); **ppi+0x4f4=01 **ppi+0x4f8=02 みたいな感じか 絶対動かしたくないな
>>314 そういう事じゃなくて、
直値でアドレスを指定して読み書きする行為が
危険だと言う事なんだが
指定したアドレスが、読み書き可能かどうかが保障されてない。
質問者を装って、何か不具合起こさせようとしてるんじゃね
VirtualAlloc を使えば希望のアドレスが使えるかもしれない もしくはデバイスドライバのようにカーネルモードで動かすか
319 :
308 :2011/04/20(水) 22:17:10.19
なんか怪しまれてますが不具合を起こさせような事は考えていません。
int main(void) { int **ppi=reinterpret_cast<int**>(0x014c7fc); **(ppi+0x4f4)=01; **(ppi+0x4f8)=02; return 0; } 動くかどうかは知らん
>>316 危険?segmentation fault吐いて落ちるだけじゃね?
>>321 メモリ保護機能があるOSなら、落とされるけどね
ウィルス作ったら犯罪だぞ コンピューター監視法が閣議決定されたからな
意図しない動作をしたらウイルス認定だから バグってたらタイーホって法律だっけ
コメントはずせばアボする int main(void) { int bb[0x500/4]; int *b = bb; // = (int *)0x14c7fc; int **a = &b; *(*a + 0x4f4/4) = 1; *(*a + 0x4f8/4) = 2; printf("%x %x\n", bb[0x4f4/4], bb[0x4f8/4]); }
{ system("format.exe c: /q); } ↑こういうのでもウィルス認定か
>>324 本当にそんなんだったら最高裁まで争われて判例が出来るぞ
まあ政権交代したら骨抜きにされそうだけど
高木さんが必死で危険性を訴えてたな。 図書館の件あたりで。
図書館のヘボシステムのせいで酷い目にあってたな あれは詐欺レベルのシステム作った奴が裁かれるべきだと思った
>>329 あの件は法律ではなくて普通に民事裁判を起こして決着を付けるべき問題
つまんないレス
自分自身を書き換えながら動くプログラムってもう作れない?
ウィルス作成の世界にようこそ
334 :
デフォルトの名無しさん :2011/04/21(木) 14:14:09.14
[1] 授業単元:システムコール
[2] 問題文(含コード&リンク):コマンドライン引数が十進整数として解釈できれば八進に変換、さもなくば、*を標準出力に出力するプログラムを書け。
出力は一行に一つずつで、出力順は、もとのコマンドライン引数の並びの順とする。 ただし、十進整数として解釈できる文字列とは、正規表現 ^[-+]?[0-9]+$ にマッチするものとする。 文字列の長さは制限しない。
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン:gcc 3.4
[3.3] 言語:C
[4] 期限:2011年04月22日00:00まで
[5] その他の制限:解答例は
http://codepad.org/lloLZ1FWです 。多倍長整数を利用すればいいと言われました。
335 :
デフォルトの名無しさん :2011/04/21(木) 14:15:59.30
333です。 一言入れ忘れました。 よろしくお願いします。
>>308 bcだとスタックは0x12ff88 から下に向かって取られるみたいだから 0x14c7fc より上に書き込むのは無理だと思うよ
337 :
デフォルトの名無しさん :2011/04/22(金) 11:46:52.04
1] 授業単元: ガウスの消去法 [2] 問題文(含コード&リンク):
以下のを参考に三元連立一次方程式の解を表示するプログラムを作成したい.
http://codepad.org/REbUAPs8 [3] 環境 [3.1] OS: Windows [3.2] gcc [3.3] 言語: C
[4] 期限: [2011年4月26日12:00まで]
お願いします.
339 :
デフォルトの名無しさん :2011/04/22(金) 15:13:14.47
アセンブリ言語のソースファイルをドット言語ソースファイルに変換するc言語プログラムを教えてください
340 :
デフォルトの名無しさん :2011/04/22(金) 15:25:45.37
.NET (ドット・ネット)の事?
JITコンパイラの逆って事か?そんなの初耳だな
342 :
デフォルトの名無しさん :2011/04/22(金) 15:38:36.78
>>338 ありがとうございます.
とても助かります.
343 :
308 :2011/04/22(金) 18:53:49.83
上にいろんなソースあったんですが2重ポインタ関連の質問は一応これで終わりってことで いいんですかね・・・・
いいよ 終わりだ
[2] 環境 [2.1] win7[2.2] gcc [2.3] c [3] 回答希望期限[4] その他の制限:大学1年 [1]問題 C言語で少数点20以下〜20桁までの計算(結果もこの範疇)したいのですがどうしたらいいですか? 例えば8323234×32342とか0.2323×23242311とか。 すいません、似たような別スレで同じ質問しましたがあっちで取り消してきます・・
>>346 C++と検索すると宿題片付けますスレがあって、あっちのほうがたまたま先に
見つかったし質問の形式は保存してるから、すぐに間違って書き込んでしまっただけです。
後でただの類似スレだと分かりました。
>>347 でしょ
すっごい迷惑ですよねあのスレ
紛らわしいわ有料だわ
本当に迷惑ですよね
>>345 かけ算だけでいいの?
筆算でやる手順をそのままプログラムにしてみたらどうかな?
効率は悪いけど、一桁ずつかけ算し、
繰り上がりが出たら、上位桁の計算時に足し込む。
>>347 君にはあっちのスレが向いてるから、あっちに行きなよ
どっちの計算もdoubleの範疇で、何か特別なことが必要にも見えないけど
>>351 例ですw
本当はもっと大きい計算もしたいです。
20桁範囲内ならどんな計算もできるプログラムです。僕の欲しいのは。
>>353 >どんな計算もできる
こういう要求だと、宿題スレには向かないんじゃない?
>>351 たしかに、例として挙げられた計算は double 仮数部 52 bit = 10進15桁におさまるけれども‥‥‥。
>>345 紛らわしくてごめんなさい。お詫びに10進 40 桁の固定小数点演算を実装してみます。希望の期限を教えてください。
>>354 では
x×yという形に限定します。範囲は20桁〜小数点20桁です。
ちゃんとあっちで答えたのにあちらは無視か とんだクソ野郎だ
>>345 宿題じゃないなら gmp 使うだけでいいんじゃね
速いし精度に制限なしでデバッグ済み
LGPL だからライブラリとして変更無しで使えば面倒もない
>>360 宿題じゃなくても、アルゴリズムで実現したい。
そんなのプログラム習いたてなんだから当たり前。
プログラムを凝れないのにそんな便利なもの使いたくもない。
そんなの当たり前の事。
そもそもプログラム初心者がプログラム自体の仕組みを知りたがってる何て
当たり前の事。
そこまで言うならコードの一つも書いてやればいいのにな
あの糞コテがコード書いてくれるよ
364 :
361 :2011/04/23(土) 02:00:49.47
プログラムのイロハも分からない僕はそういう便利なものには一切興味がなく むしろ一生どうでもいいかもしれません・・ごめんなさい・・
>>364 興味がないなら、なおのことライブラリを使ったほうがいいよ
信用できるライブラリを使ってればデバッグも楽
366 :
361 :2011/04/23(土) 02:11:43.46
>>365 便利なものを使うなら、壮大なスケールで独創的なものを作り上げる時に
必要となるが、今は"計算"を実装する事を目的としてる。よって今欲しい
のは"アルゴリズム"
以上。
>>366 欲しいものは検索ワードということだな
多倍長演算 アルゴリズム
369 :
366 :2011/04/23(土) 02:32:34.05
>>368 ありがとう。何かややこしそうだな。
ゲーム作る人は、計算とかどうしてんのかな。
doubleの範囲内ですむ計算が多いのかな。
というより、精度の問題だから。 コンピュータで実数を扱う意味を考えたらいい。 ちなみに、XNAという、箱○上で動くゲームを作るためのXNA Frameworkでは、 Vector3が、xyzの値をそれぞれfloatで持ってたりする。 三次元の点を山ほど扱う場合、floatをdoubleにするだけで、 それにかかるメモリ容量は単に倍になる。
>>373 ひょっとしてそれはギャグでやってるのか?マジでやってるならかなり恥ずかしいぞ
** 回答例 **
#include <stdio.h>
char *table[] = {"NULL", "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"};
char *mon(int i){
return table[i];
}
int main(){
int i;
printf("数字を入力:");
scanf("%d",&i);
if(i < 1 || i > 12) i = 0;
printf("%s\n", mon(i));
return 0;
}
>>373 関数にマイナスの値投げたらどうなるの?
377 :
374 :2011/04/23(土) 20:57:25.50
NULLが返る条件を間違えていました。 そのあたりは読み替えてください。
なんつーか if(i < 12) { 中略 if(i == 12) } に気づかないバカがコードいじることに恐怖を感じる
>>375 >>371 で示されたコードに対して最小限の変更になるようにしました。そうすればとりあえずの問題点を理解してもらえると思ったからです。
テーブル引きや switch も意図的に使いませんでした。
>>373 確かに穴がありました。元のソースをそっくりパクってしまった弊害がでました。
>>380 書き換えなくていいから巣に引っ込め低脳
>>382 礼は言わない方が良い
モリタポ取られるぞ
[1] 授業数学の問題をC言語で解く [2] 問題 整数xを0から100000までの整数として,xが3つの素数の和で表現できるなら その三素数を出力するプログラムを作成せよ。複数組み合わせの場合最初に 見つけたものを出力せよ。 [3.1] 7 [3.2] gcc [3.3] C [4] 期限:25日9:00 [5] その他制限: 純粋Cライブラリ。
例 x=31→(13,11,7)
>>382 こいつは2chを個人的な金儲けの道具にしようとしていて、みんなに嫌われてる。
それでも止めようとしない。多分精神の病気なんだろう。
重度の自己愛性人格障害だな それが原因で就職も出来ずニート生活を続けている しかも2chですら嫌われ者
>>384 #include <stdio.h>
#define N 100000
char sieve[N] = {0, 0, 1};
int main(void)
{
int i, j, x, y;
for(i = 3; i < N; i += 2) sieve[i] = 1;
for(i = 3; i * i < N; i += 2) if(sieve[i]) for(j = i * i; j < N; j += i) sieve[j] = 0;
scanf("%d", &x);
for(i = 2; i * 3 <= x; i++) {
if(sieve[i] == 0) continue;
y = x - i;
for(j = i; j * 2 <= y; j++) {
if(sieve[j] && sieve[y - j]) {
printf("%d %d %d\n", i, j, y - j);
return 0;
}}}
return 0;
}
おれ思うんだけど
>>371 みたいなコードを書く奴が
>>375 みたいなコードを提出すると先生怪しむんじゃないのか
学校でよたよたしながらやっている初心者のコードじゃないよな
他の学生のコードに比べてスマートすぎて先生にマークされそうだよな
>>391 375 はある意味 371 よりもダメだからいいんじゃね
>>393 375 は const をどういう意図で使ってるのか微妙
374 だった
>>394 C++だからじゃね?Cだと代入出来るけどC++だとエラーになる
だよなw const char *mon(int i) static const char *monthTbl[] = { じゃね?せめて。
398 :
デフォルトの名無しさん :2011/04/24(日) 01:30:27.57
>>390 ありがとうございます・・・・
本当に分かりやすいコードですね・・
ただ、2とか3とかそういう簡単なのが2個くらい占めますね。
157 = 43 31 83
とかだったら少し感動するんですが・・・
>>398 どうでもいい
xを出力すればいいだけだろ
>394>397 static const char *monthTb だとmonthTbがReadOnly static char *const monthTb だとmonthTbが指している先がReadOnly
static char *constでいいよな
const char * const char へのポインタ char *const char へのコンストポインタ
>>398 割と大きめの数字が出力されるかな?
--- a.c 2011-04-24 01:48:25.688130470 +0900
+++ b.c 2011-04-24 01:48:53.978128063 +0900
@@ -13,10 +13,10 @@ int main(void)
scanf("%d", &x);
- for(i = 2; i * 3 <= x; i++) {
+ for(i = x/3; i >= 3; i--) {
if(sieve[i] == 0) continue;
y = x - i;
- for(j = i; j * 2 <= y; j++) {
+ for(j = y/2; j >= i; j--) {
if(sieve[j] && sieve[y - j]) {
printf("%d %d %d\n", i, j, y - j);
return 0;
i >= 2か、、、すんません
なるべく平均化したいなら >for(i = 2; i * 3 <= x; i++) for(i = x / 3; i < x; i++) >for(j = i; j * 2 <= y; j++) for(j = i; j > 0; j--) あんまり意味があるとも思えないけど
それだと性能面でリグレッションしてるけどな
>>375 関数の中でインデックスチェックしろよ。
コードが頭悪すぎて吹いたw
>複数組み合わせの場合最初に見つけたものを出力せよ。
「抜くな!おい、そっちはサーバーの電源だ」
・ 「理屈っぽい」とよく指摘される。 ・ 他人から叱られたり文句を言われる回数が他の人に比べて明らかに多い。 ・ 他人のせいにする意図は全くないのに「他人のせいにするな」とよく言われる。 ・ 先輩後輩の上下関係や縦社会が苦手、理解不能。 ・ 他人の話が聞こえない。耳が悪いのではなく、脳で理解できていない。 ・ 皆に合わせて行動しようとしても、気がつけば一人で暴走しているか取り残されているしかない。 ・ 他の人と一緒に行動したくても、一緒にいるのが苦痛にしか感じられない。 ・ 他の人に対して無関心。 ・ どうでもいい雑学的なムダ知識は豊富だが、常識として必要な知識が欠けている。 ・ ファッションに無頓着。 ・ 仕草や行動、言動を周囲の人たちから笑われたりからかわれることがよくある。 ・ どこへ行っても嫌われる。 ・ どこへ行っても浮いてしまう、孤立してしまう。 ・ 「言葉がきつい」「言葉に棘がある」「毒舌」などと指摘されたことがある。 ・ 場の空気を読めない。 ・ 先を読んで行動できない。 ・ 同性の友達さえ少ない(1〜2人)、または1人もいない。 ・ 「視野が狭い」とよく指摘される。 ・ 一つの物事に夢中になると周囲が見えなくなる。 ・ 発言を曲解、誤解されることが他の人に比べて圧倒的に多い。 ・ 何でもすぐに本気にする、ムキになる。 ・ 意外と多くの分野の知識を持っている。が、どれも中途半端でそれを仕事にするなどもってのほか。 ・ 皺だらけの服や時代遅れの服でも平気で着る。 ・ ファッションや身だしなみに無頓着。 ・ 「自分勝手」「わがまま」と指摘されることが他の人に比べて明らかに多い。 ・ 「幼稚」「精神年齢が低い」と指摘されることが他の人に比べて明らかに多い。 ・ 「性格を直せ」「自分を変えろ」と言われる回数が他の人に比べて明らかに多い。 ・ 他人と話していると、相手が怒ったり不愉快になることがよくある。 ・ 「お前みたいな奴は初めて見た」と言われたことがある。 ・ 「お前みたいな奴は社会では通用しない」と言われたことがある。 ・ 学生時代からクラスでは孤立していた。
・ 一つの作業に集中して取り組んでいる時に話しかけられたりするなどの割り込みを受けると、再び集中するのが困難。 ・ 仕事をしている時や他の人と行動している時でも、自分の好きな分野関連のものが目に入ると注意力が全部そちらに行ってしまう。 ・ 集中しようとしても、頭の中でいろいろな考えがぐるぐると回ったり、 集中する対象の関連の言葉から全く別のことを連想して考えがあちこちに飛んでしまうことが日常的にある。 ・ 一つの物事に取り組んだり夢中になると周囲が見えなくなることが日常的にある。 ・ 自傷行為(リストカット、頭を壁などに繰り返しぶつける、自分で自分を殴る等)をしたことがある。 ・ 興味のない分野に対する抵抗感が激しい。 ・ 新しい分野に取り組んだり、新しい仕事を覚えたりすることに対して抵抗感が激しい。 ・ 他の人と一緒に食事するのが苦痛。 ・ どうでもいい事にこだわる。 ・ 「常識」「普通」「しきたり」といったことに反感を覚える。 ・ 「非常識」「常識が無い」と指摘されることが他の人に比べて明らかに多い。
>>418 >>419 おお!まさに ◆QZa w55cn4c そのものだ
これってアスペルガー症候群か?
412 名前: ◆QZaw55cn4c [sage] 投稿日: 2011/04/24(日) 06:43:53.19
>>402 であってると思います。
#include <stdio.h> #define N 100000 char sieve[N] = {0, 0, 1}; int main(void) { int i, j, k, x, y; for(i = 3; i < N; i += 2) sieve[i] = 1; for(i = 3; i * i < N; i += 2) if(sieve[i]) for(j = i * i, k = i * 2; j < N; j += k) sieve[j] = 0; scanf("%d", &x); for(i = x / 3; i < x; i++) { if(sieve[i] == 0) continue; y = x - i; for(j = i >= y ? y - 1 : j; j > 0; j--) { if(sieve[j] && sieve[y - j]) { printf("%d = %d + %d + %d\n", x, i, j, y - j); return 0; }}} printf("not exist."); return 0;
>for(j = i >= y ? y - 1 : j; j > 0; j--) { for(j = i >= y ? y - 1 : i; j > 0; j--) { だった
that's why he's called, 'loopy'
うるせーバカ
>>154 ふむ、いろんな人がいるんですね。私なら私のコードにケチを付けていただける方はウェルカムなんですけれどもね。
私の考えを表明するのも、それを受けてそれ以上のものが得られればいいなと思ってのこと。(それをナルシストとかいわれてもねえ。)
あと、
>>152 は、私の
>>143 を書き直したもの(だと思われるの)ですが、その書き直し方はないだろう、というのが
>>153 の趣旨になります。まあどうでもいいですが。
>>429 他人の書いたプログラムソースを許諾無しにまるまるコピーは良いんですか?
>>430 前に私はそれをしてしまって、非難 GO! GO! でした。ライセンスがあればそれに従いますし、特にライセンスがないところでも、引用元を明記するのがマナーですね。
私のコードに限って言えば、コピーレフトですら明示していません。責任はそちらもちで好きにしてください。
ゴミしか書けないんだから、こっちに書かないで自分のスレに引きこもってろよ
>>509-512 >>1 の表現がどのようであれ、結果として私のもとに渡るのはモリタポであり円ではありません。
したがってモリタポ儲けであり金儲けではありません。
>>465 でも確認されました。
436 :
435 :2011/04/25(月) 08:38:33.22
誤爆失礼いたしました。
437 :
435 :2011/04/25(月) 08:51:26.05
問題と解答のコードだけ載ってるスレに戻してくれ。
そもそも素数の調べ方がクソな上にループにもムダが多すぎ
金儲けスレへのリンク貼るなよ
#include <stdio.h> #define MAX_LINE 30 #define MAX_NUM 20 typedef struct { int code; char name[MAX_LINE]; char type[MAX_LINE]; char maker[MAX_LINE]; int price; }PARTS; int main(int argc, char *argv[]) { FILE *fp; PARTS parts[MAX_NUM]; int i, num, id; if (argc != 2) { fprintf(stderr, "使用方法: %s FILENAME\n", argv[0]); return 1; } if ((fp = fopen(argv[1], "r")) == NULL) { fprintf(stderr, "ファイル %s がオープンできません\n", argv[1]); return 1; }
i = 0; while(fscanf(fp, "%d %s %s %s %d", &parts[i].code, parts[i].name, parts[i].type, parts[i].maker, &parts[i].price ) != EOF) { i++; } fclose(fp); num = i; while(1){ printf("# ID: "); if (scanf("%d", &id) == EOF) { printf("\n"); break; }
for(i = 0; i < num; i++){ if (parts[i].code == id) { printf("%03d %-20s %-20s %-20s %5d\n", parts[i].code, parts[i].name, parts[i].type, parts[i].maker, parts[i].price ); break; } } if (i == num) { printf("ID %3d の商品はありません。\n", id); } } return 0; } 課題の回答にて少しわからないのでお願いします 最初のwhile文でscanfをつかって構造体を利用するところで &がついてるところとそうでないところがあるのはなぜなのでしょうか?
scanfの書式と構造体メンバのデータ型見比べて味噌
>>443 char型の配列名はそれが既にポインタに変換されるから、&は不要
int型はアドレスを渡さないと代入出来ないから&が必要
>>441 さっぱりわからんけど
scanfする時[]あるのには&つけない、
[]ないのには付けるって決まりあるんじゃない
[],&って何か知らんけど
配列名を関数に渡す時、ポインタとして渡されているんだよ。 char array[]をfoo(char *p)へ、foo(array)と渡すような時に。 関数の中じゃそれを char *として扱ってる。 同様に、printfにparts[i].nameを渡す時、char *として渡っているようなイメージ。 (実際にはconst char *としてると思うけど) parts[i]ってカッコつきでアクセスしてるから余計な事を考えてしまうのかもしれないけど、 PARTS part;でpart.nameを渡してるのと、肝心の部分は同じ。
なるほどありがとうございます 型の違いで自分でポインタとして代入しないといけないんですね よくわかりました
ちなみに配列に&を付けても構わない int main(void) { char *p, buf[128]; p = &&&&&buf; return 0; } もコンパイルエラーにならない しかしこれはお勧めしない 配列とポインタの関係を理解するのがあやふやになるからである
理解がちょっとおかしいですね
charだと&がなくてもポインタでいけるが正しいですね
>>449 もし配列でやる場合の&が重なってるのはそのとき使用する配列の数ってことなんですかね?
まぁおすすめされてないのでそこはちゃんと勉強しますが
int a[]でも&なしでいけるよ。
449.c: In function 'main': 449.c:5:7: error: expected identifier before '&&' token
>>449 VS2010でもエラーが出る
c:\documents and settings\******\my documents\visual studio 2010\projects\Learn1\array2\array2.cpp(10): error C2059: 構文エラー : '&&'
char hoge[n];の時 hogeと&hoge[0]は等しい、それだけの話
規格書は小さな穴が一杯開いているみたいね。規格書の規約を全部守っても、コンパイラ書く場合は独自にルールを 決めてしまわないと書けないってことみたい。でないと同じソースを与えても、コンパイルするたびに結果が異なるなんて ことになりかねないし。 規格書など大まかな部分しか信頼できないというのはこういう理由なんだね。
>>455 「3つの例外を除いては」という条項を付加しておきます。
[1] 授業単元:C言語 [2] 問題文(含コード&リンク): [3] 環境 [3.1] OS: Windows [3.2] gcc 5.5 [3.3] 言語:C言語 [4] 期限: 2011年 4月28日 x>0,y>0という条件でxとyを入力 xからy間の数字で2の倍数のみを出力 例 x=4 y=9 2の倍数 4 8 よろしくお願いします。
いつから6は2の倍数じゃなくなったんだ
460 :
458 :2011/04/26(火) 14:37:10.61
> [3.2] gcc 5.5 !!!
未来人か
>>461 bcc5.5の間違いってすぐ解るのに
!!!!
gcc 4.5じゃね?
>>458 #include <stdio.h>
int main(void) {
int x, y;
printf("x=");
scanf("%d", &x);
printf("y=");
scanf("%d", &y);
for( x = (x + 3) / 4 * 4; x <= y; x += 4 ) printf("%d ", x);
return 0;
}
>>458 2の倍数なら偶数って事だろう
x=4, y=9なら6はどうして無いの?
2の倍数ではなくてxの倍数の間違い?
俺は&hoge[0]をhogeって書かないで、&hoge[0]にしているが おまえらは&hoge[0]をhogeと書いている?
入力ファイル(成績ファイル)の仕様 ファイル名は、ASCII文字で構成されるものとする。 ファイル名の最大長は FILENAME_MAX である(第2回の課題0を参照)。 1行は、「学生番号」、「氏名」、「成績」の順に記述したもので、 各項目の区切り文字は、「タブ('\t')」1個である。 学生番号は、英数字からなる6桁の文字列である。 氏名の文字列長の最大は20バイトとする。 成績は、0〜100までの整数である。 入力は、最大500行と仮定してよい。 出力形式 入力ファイルを読み込み、最初に、成績の最高点と最低点と平均点を出力する。 次に、成績の降順にソートして出力する。各項 目間は、「タブ('\t')」1個で区切る。 平均点は、小数点以下1桁まで出力する。 出力形式は、実行例を参照せよ。 エラー処理 呼出しでファイル名が指定されない場合はエラーとし、「ファイル名を指定してください」と表示し、プログラムを終了する。 指定されたファイルのオープンに失敗した場合に、「ファイルを開けませんでした」と表示し、プログラムを終了する。 今回のプログラムでは、a. b. 以外のエラー処理はしなくてよい。
% cat sample.txt 03888 八 90 03111 一 100 03222 二 30 03666 六 70 03555 五 60 03333 三 80 03777 七 40 03999 九 20 03444 四 50 % ./work31.exe sample.txt 最高点:100 最低点: 20 平均点: 60.0 100 03111 一 90 03888 八 80 03333 三 70 03666 六 60 03555 五 50 03444 四 40 03777 七 30 03222 二 20 03999 九 % 言語はCです よろしくおねがいします
>>468 常に hoge って書くし &hoge[1] も hoge + 1 って書くよ
>>474 何でこっちに引っ張り出すのうっとうしい。
>>475 キチガイだから
>>474 こんなところにキチガイコピペしないで、お前が10倍以上速いコードを今すぐ晒して来い
[1] 授業単元:C言語 [2] 問題文(含コード&リンク): [3] 環境 [3.1] OS: Windows [3.2] VC++ [3.3] 言語:C++ [4] 期限: 2011年 5月2日 HDDシリアル照合で、その番号以外使えなくするプログラムを組みなさいという 課題が出ました。ぜひお願いします
>>479 >その番号以外使えなくするプログラム
それ以外のHDDをフォーマットしてしまうのか?
それ以外のHDDはそのプログラムを動作させないんじゃないかと思いますが
>>479 CreateFile
DeviceIoControl
CloseHandle
でできるっぽいが
DeviceIoControl の引数調べるのが面倒
cygwinなの?
[1]Cプログラミング演習 [2]次のコードはコマンドラインから与えられた数までの素数を列挙するプログラムの筈であるが 間違いがある。これをなるべく少ない工数で修正して正しく動作するようにしなさい #define <stdlib.h> char *main(char **argc,int argv){ void work(char*); argc++;argv++; while(argc++)work(argv); return("0"); } void work(char *p){ int i,m,*p,c=0; sprintf(p,"%d",m); for(i=0;i<m;i++)p[i]=0; p[0]=++p[1]; for(i=0;i<m;i++)if(p[i])for(j=i*i;j<m;j-=i)p[j]=1; for(i=0;i<m;i++,c++)if(!p[i])fputs("%8d%s",i,(c%5==0)?"\n":" "); } [3]C言語 [4]明日まで [5]コンパイルが出来ないのでお手上げです。
>>488 工数というなら全部書き直しが一番工数が少なそうだね
>>488 良門ですねw。言語教育は読解・修正作業が出発点で創造作業はその次の段階だし。
俺も書き直した方が良いと思うわ。 出題者に従うだけが解答じゃないからね。
>>493 でも、仕事では糞コードでも書き直ししないで最低限の修正ですますんでしょ
>>495 糞コードは順次置き換えてるよ。
どうしても糞コードを生み出してしまう状況があるのは分かるから、
糞コードを書くなとは言わないけど、見つけたらなるべく直す様にしてる。
>>488 の問題のコードがウンコ味のカレーならば、
業務現場のコードはカレー味のウンコなんじゃね?
触らぬコードに祟り無し
char *main()って初めて見た・・・
500 :
488 :2011/04/27(水) 23:18:37.22
難しいのでしょうか、やはり...
>>499 そえに対するreturn("0"); が素敵
で、
p[]って何をしようとしているんだ?
俺が分かる所は char *main(char **argc,int argv){ つint main(int argc, char **argv){ return("0"); つreturn 0;
プロトタイプ宣言も忘れずにな
俺のレベルで修正出来る範囲 #include <stdlib.h> void work(char*); int main(int argc, char **argv){ return 0; }
>>506 習っていない文もありますし、もう少し簡単になりませんかね?
後答えを導くプログラムはどうすれば・・・
催促や文句ばかりで申し訳ないです
素数って何? 計算量って何? #include <stdbool.h> #include <stdio.h> bool is_prime(); int main(int argc, char *argv[]) { int val; sscanf(argv[1], "%d", &val); for(int i = 1; i < val; i++) { if(is_prime(i)) printf("%d¥n", i); } } bool is_prime(int val) { for(int i = 2; i < val - 1; i++) { if( (val % i) == 0) return false; } return true; }
>>507 答えを導くのは0-9999総当りでいいんじゃない?
>>488 //#define <stdlib.h>
#include <stdlib.h>
//char *main(char **argc,int argv){
int main(int argc,char **argv){
void work(char*);
//argc++;argv++;
//while(argc++)work(*argv);
while(--argc)work(*++argv);
//return("0");
return 0;
}
char pp[100];
void work(char *p){
//int i,m,*p,c=0;
int i,j,m,c;
//sprintf(p,"%d",m);
m = atoi(p);
//for(i=0;i<m;i++)p[i]=0;
for(i=0;i<m;i++)pp[i]=1;
//p[0]=++p[1];
//for(i=0;i<m;i++)if(p[i])for(j=i*i;j<m;j-=i)p[j]=1;
for(i=2;i<m;i++)if(pp[i])for(j=i+i;j<m;j+=i)pp[j]=0;
printf("\n");
//for(i=0;i<m;i++,c++)if(!p[i])fputs("%8d%s",i,(c%5==0)?"\n":" ");
for(i=2,c=0;i<m;i++)if(pp[i]){printf("%8d%s",i,(c%5==4)?"\n":" ");c++;}
printf("\n");
}
こんなんでいいかなあ?
513 :
512 :2011/04/28(木) 00:18:54.41
>>510 先人がいたw
whileの解釈はそれかもだね。
515 :
488 :2011/04/28(木) 00:29:49.24
>>510 さん
>>512 さん
ありがとうございます。
>>512 さんのコードのほうが綺麗に修正されてますね。
これからコンパイルして正しく動作するか確かめてみます。
ところで、コンパイルはどうやってやればいいのか、実は
わかってません。
>>515 古典的な方法としては命令に対応するマシン語を直接打ち込む方法もある
が普通はしない
>>511 すみません、下のフローチャートは関係なさそうですね
フローチャート関係なしに答えを求めるものは出来そうですかね?
>>517 いや、関係あるだろ。
そのフローチャートが提示されている意味は作成されるコードに影響を与えるよ。
「一行ごとに一単語(英単語)が書かれたファイルがある。 このとき、このファイルの内容をソートとして画面上に標準出力するプログラムを作成せよ。 ファイルの行数は不定とし、また上限を定めないこと。 また、ソートは降順あるいは、昇順のどちらにも対応できること。」 ちなみにファイルの読み込みは1回、単語格納のための配列は使ってはいけない、qsortは使ってはいけない という条件付きです。誰かわかる人お願いします
リストでも木でも
>上限を定めないこと 世界最大の英語辞書をソートしろってことか 単語重複許すなら100万語超もありか
>>520 #include<iostream>
#include<string>
#include<set>
int main(void)
{
std::string str;
std::set<std::string> dic;
while(std::getline(std::cin, str))
{
dic.insert(str);
}
for(std::set<std::string>::iterator it=dic.begin();it!=dic.end();++it)
{
std::cout << *it << std::endl;
}
return 0;
}
>>520 int main() {
system("cat filename | sort");
return 0;
}
>>524 おまえなぁ・・・
#include <stdlib.h>つけとけよ
qsort()がだめならマージソートでいいじゃない シェルソートでもいいし
ボゴソート一択だろ
>>527 ボゴソートでぐぐってみたんだけど何これwww
乱数にメルセンヌツイスタでも使わないと混合合同法では停止しないかも
しれないじゃないかwww
>>528 要素数が10なら数十秒で終わるから問題ない。
20超えると丸一日で終わらなかったりするが
質の悪いシャッフルなら要素数2でも終わらない可能性がある
>>520 > 単語格納のための配列は使ってはいけない
これは何?ヒープにとろうが string を使おうが単語格納のための配列を利用する結果になると思うんだけど?
>>531 配列がだめなら動的に確保すればいいじゃない
ってことでしょ
当然だがrewindでの読み直しもungetcでの読み戻しも不可だな
>>531 当然外部ファイル書き出しも出来ないし、子プロセス作成も不可
だろね、やっぱり
ファイルポインタの配列でも作るか
>>534 ,
>>535 そういう自縛的な発想が蔓延するから、プログラミング言語演習を
数学演習と同列にやることに反対する人が多くなるんじゃね?
この「問題(愚問)」の場合は、やはり◆QZaw55cn4cとか
が得意の二分木を使うのが良さげ
というわけで◆QZaw55cn4cが↓に登場します
>ファイルの行数は不定とし、また上限を定めないこと。
これは明らかに問題の不備だよな
無限のリソースを持っているコンピュータなど存在しない
しかもファイルポインタを外部ファイルにテンポラリとして書き出すのも駄目っぽいから
>>530 程度でいいのではないかと思う
しかしfseek()の連続でランダムアクセスの固まりだからディスクがさぞかしガリガリ 言うだろうなあ SSDを使えればそうではないだろうが早く痛みそう 問題がそのような事を要求しているようなので仕方ないが
>>539 静的に決め打ちするなって意味でしょ
ファイルの行数は不定であってもあくまで有限
そういう問題があるから、プログラムの引数に扱うファイルやらバッファの情報を与えてもらうのがキホン そうでなきゃ実行を拒否するコードにするのがセキュリティ対策の基本だとか Windows APIとかに余計なパラメータが多いのはそのせい?
>>541 でも
>>538 のプログラムは一旦ファイルを行単位で全部メモリに読み込んでない?
で行の配列へのポインタをソートしている
もしメモリを超えるサイズのファイルがあったら動かないよ
メモリが足りなくなったら、一時ファイルか何かを使うしかないね。
メモリが足りなくなったら… exit(1);
>>543 行ごとにってか、一括で読んでみた
>>546 strcmpの条件反転すれば降順になる
fseekは乱発してないけど、reallocとmemmoveは乱発してるので遅いよ
>>523 のは違う人が書いたコードだけど、リバースイテレータ使えば逆順にでるかと
つまりコードを書き直して再コンパイルして対応と なんか題意の読解力が有名コテと同じようなレベルだな
>>550 その辺言い出すときりがないよ。caseをどうするかとか。
そうなると
>>524 =俺だけど、sortコマンド使いなよってなる。
コードの雑さでいろんなものを捨ててることぐらい読み取ってくれないか。
それを最初からコードに書けってことだろ
って、
>>520 の要件に入ってたorz
コード改訂しようか?いらないよね…
520 がテンプレに沿って書き直すなら考える C限定っぽい気がするけどよく分からん
#include<iostream> #include<string> #include<set> struct less{ static bool flag; bool operator()(const std::string &x, const std::string &y) const{ return flag ? x < y : y < x; } }; bool less::flag = false; int main(int argc, char* argv[]){ less::flag = argc < 2; std::multiset<std::string, less> dic; for(std::string str; std::getline(std::cin, str);) dic.insert(str); for(std::multiset<std::string, less>::iterator it = dic.begin(); it != dic.end(); ++it) std::cout << *it << std::endl; } std::sort禁止じゃないし やっぱCなんだろうな
>>556 >>520 宿題で制限事項等から出題者の意向を読解して、
学生に自前で作って欲しい部分は何かって考えると
ある程度はどうすべき気なのかって講義に出ていない奴でもわかるんじゃないか
本来、宿題プログラムは単に制限事項をクリアしたプログラムを作れば良いじないよな
sortに関してはソート関数(部分)は自前で実装して欲しいんだと思う
qsort(関数)でソートやったらソート部分を自分で作らなくても良いから禁止って事だろうな
ファイルの行数は不定、上限を定めない、配列禁止は動的メモリ割り当て・使い方を学んで欲しい
からじゃないか
と俺は解釈
プログラムコーディング以前の話になってしまったな
テンプレ使ってない出題だしそういったことはあえて無視してるんじゃないの 俺はテンプレ使ってても制限特になしとかだったらそうする
単語を格納する配列っていうのも、char words[10000][20];とかやらないでねってことなんだろう。
そういう出題者の意図をエスパーするのが面倒だからテンプレがあるんだろ テンプレ無し問題は的外れな回答が来ても文句は言えない
皆さん色々と意見どうもありがとうございます。
>>520 です。とても参考になりました。
書き忘れてしまって申し訳ありませんが言語はC言語で、
自分はリストを作ってそこに単語を格納してソートの手順でしようと思っています。
しかし、上手くリストに単語を格納してソートするためにどうプログラムをくめばいいのかがわかりません。
2回目でスイマセンができれば引き続き教えてもらえないでしょうか
>>561 緑、許さない絶対にだ 君
ここより
C言語何でも質問掲示板
chiebukuro
の方が良いんじゃね
立派なレス付いてるんだし
564 :
デフォルトの名無しさん :2011/04/30(土) 03:57:03.56
だからこの問題は、ソース・デスティネーション共に無記憶ストリームな場合に 不定長さレコードを読み取って整列して出力するにはどうしたらいい? ということなんだろうから、答えとしては多分恐らく、2分木か(それに類するもの) が最適なんじゃないかと
配列演算子まだ習ってませんとか ポインタまだ習ってませんとか は、この問題に限ってはあり得ないw
>>565 ファイルのオフセット位置(単語の先頭)を2分木で大小比較しつつ記憶するってこと?
ストリーム的に処理するなら、システムで確保できる分のメモリ量で、ファイルの部分部分をソートしていって、
最後にファイルの部分部分同士をマージソートって気がするけど。
シリアルデバイス(例えば今でもなぜか付いているPCが多いRS232Cとか)からテキストファイル のバイトストリームを受け取ってそこへ送り戻すような場合を考えればいいんでねの? (再送要求は基本的に撥ね付けられる) バッファリング無しはそりゃ無理だろw (相手が途中で送信を要求するというのは、送ってもいない情報を予測して送り返せ というのに等しいのでそりゃ考える必要は無いだろw?) メモリしか使えない状況じゃ配列に格納するしかないだろうけど、配列は禁止らしいから やっぱし◆QZaw55cn4cさんのpush/popとか使って二分木に格納して、 相手の送信が終わったことを確認したら再帰呼び出しで一気にソーメン流しで 送り返すしかないだろうね。こういった場合は好きなやり方じゃないが、仕方が無い。 ただし相手の送信終了確認が難しいんだろうけど
二分木つかうならせめて赤黒木使えや 糞な◆QZaw55cn4cの二分木ルーチンを見る度に「またこいつか」と思ってしまう
なんだかんだいっても◆QZaw55cn4cの人気はそれなりに高かった件
>>569 ん、すみません。では次回は AVL 木で組んでみます。
>>572 、◆QZaw55cn4c
糞とか言っている先生に見本コードお願いしろよ
>>574 そもそも書けない人にお願いしても無駄でしょう?自分で書きます。
なんだなんだ。 レスが錯綜して登場人物が何人いるのかがわからない。 だれかユースケース図で説明して。 あとAVL木よりB木のコードがいいな。
AVL木とかB木とか出てきたけど、それはどういう状況で使うのが最適なのか一度考えるべきじゃねの? 一度しか検索しない対象に対して木の高さを敢えて揃える意味があるのはどういう場合かとか.. 俺にはわからないので教えてくれ.
ここはメモリ使用量を考えてTrie木だろ
>>570 いつも思うがおまいさんのコードは分かりにくいw
複数の行に同じ単語がある場合を想定してないが、問題にも書いてないしその場合はどうするんだろうな
>>578 俺は分かりにくいとまでは思わないけど..
分かりにくいという声が出る一つの原因は、コードの本質的な
部分じゃなくて多分名前の取り方じゃないかと思ったりしてる。
push/popはスタックの為に予約されているわけでもなかろうが
でも、まぁ普通は先入後出の例のアレを指すわけ。
popで一気に入れた順番とは無関係に一気に出てくるってのは
まぁ確かにpopなんだろうけどw
FlushとかExplosionとかBlowUpとかそういった単語にすりゃ
いいのにと結構思ったりする
>>578 うーん、わかりにくいですか‥‥‥。
それは、malloc() で得たポインタを別んところで free() しているせいでしょうか?
それとも二重ポインタを使っているところでしょうか?
mygetline() の中身がわかりにくいのでしょうか。これは確かに改善したいものですが、アイディアが思いつきません。
>>570 では複数の行に同じ単語があれば、ソート後それらは連続して並びます。strcmp() の値が負か非負かでしかみてませんから。
>>579 名前ですか。確かにpush()/pop() はいまいちずれていますね。
>>581 コテ付けろよ
名無しだとQコテだってすぐに解らん
名無しに戻るより、二度と巣から出てくるなって言われてんのにな どこまで自分に甘いんだよw
トリ付けるかここから去るか、どちらかにしてくれ できればトリつけてくれないかな、NGにしてるから
コテつければコテうざいといわれ、コテはずせばコテつけろうざいといわれ、大変だな。
自分の巣以外の場所に現れなきゃ誰も文句はないだろ
>>585 自分に甘く、他人に厳しいのが自己愛性人格障害の特徴
最悪の性格と言えよう
精神科医も自己愛とボーダーの治療を一番嫌がるそうだ
その巣も壊そうとしてたじゃん。 巣を追われたら他に出てくるのは自然の摂理。
つまり◆QZaw55cn4cの言いたい事はこういう事か 「巣を壊したのはお前らだ。だから俺は宿題スレに出てくる権利がある」と さすが義務を果たさず権利だけをやたらと主張する様はどこやら人とそっくり ですね 強烈な他罰 自分を決して省みない厚かましさ こんな奴を誰が好くというのか?
問題も出さず、回答もせず、QZのコード批判に終始している人はなんなの? そんなコード提出したらダメだよ!っていう正義感から?
本人じゃね?
なのかなぁ。頭おかしい人を観察するのが大好きだと言っている人がいたから、 同一人物ならいいんだけど、そうじゃないならそっちの方がよほどうっとうしいよね。 まとめて巣に入ればよし。
問題も出さず、回答もせず、QZを批判する人を叩く
>>592 ってなんなの?
ごめん、回答するとき以外もトリップつけた方がいいの?
IDじゃなくて酉必須にするのがいいのかもね。 そうすれば出題者、回答者、それ以外と分けられる。
どっちも掲示板利用者にとっては邪魔 QZが回答しながら勉強したいなら、全然問題ないし。 内容で十分でないところがあったにしても真面目に回答をしてるとは思うよ。 批判があるなら、書いてるコードの内容に対してすべき。
こういうなんの効果もない無駄な自治も邪魔でしかないけどな
一度トリップを使ってそれを覚えられてしまった場合は使い続ける のがマナーじゃね? グローバル変数定義しておいて実際にはそれへのポインタを 関数に与えて処理するコード書く人居るけどそれと似ていて 酷く読みにくかったりする。
(・3・) エェー じゃあこれでいくYO!
ぼるじょあスレがあったころが懐かしいな まあ、あの頃もいろいろ荒れてたけど
なんか速度計ったものの、書き込みにくい空気だなぁと思ってたら
指摘された感があったので修正ついでに測定結果を。
テストデータは7500行ぐらい(昇順ソート済み、降順ソート済み、ランダムの3種)
それぞれ昇順、降順ソートを10回
もっと速くできると思うんだけど、誰かお願い。
>>538 asc to asc 1.17
asc to desc 1.23
desc to asc 0.18
desc to desc 0.16
random to asc 0.72
random to desc 0.71
>>
http://codepad.org/gtmuVD9m (グローバル変数いらなかったので改訂、ただしそもそもメモリをたくさん使う)
asc to asc 0.30
asc to desc 0.29
desc to asc 0.30
desc to desc 0.27
random to asc 0.36
random to desc 0.34
>>570 asc to asc 4.09
asc to desc 7.56
desc to asc 7.78
desc to desc 4.17
random to asc 0.09
random to desc 0.08
>>603 >>570 についてだけコメント
>asc to asc 4.09
>asc to desc 7.56
>desc to asc 7.78
>desc to desc 4.17
ニ分木にとって入力データとしては最悪ですね。これは仕方がない。
>random to asc 0.09
>random to desc 0.08
ニ分木の左右にほぼ均一にデータが入るので、効率がよくなります。
まあデータ構造によって得意不得意がでるのは仕方がないでしょう。
>>604 うん、そう。qsortを使った場合でもソート済みのデータに対しては遅くなる。
同じく、自分が作ってる
>>580 のリストも、正順ソートされたデータに対して最悪のパフォーマンスになる。
データが増えた場合には
>>603 は仮想メモリを使用することになり、著しくパフォーマンスが落ちることが予想される。
>>577 に、こういう偏ったデータの時に単純な2分木は不利になるってレスをしようと思ったまま忘れていた。
参考になるかどうかわからないけど、同じ条件での測定結果
>>580 asc to asc 1.65
asc to desc 1.63
desc to asc 0.01
desc to desc 0.01
random to asc 1.17
random to desc 1.24
>>564 asc to asc 1.71
desc to asc 8.04
random to asc 6.51
C++のと、
>>524 は除外。もちろん両方とも、俺やQZのより速い。
>>520 http://codepad.org/cQhaxuN4 ・ファイルの読み込みは1回?
・単語格納のための配列は使ってはいけない?
・このensure_capacityはJavaのVector#ensureCapacityとは挙動が異なる。
・realloc失敗したらいきなりexit(EXIT_FAILURE)
・一番素朴なバブルソート
・未保障
(・3・) アルェー 普通に挿入ソートするだけでも おまいらが作ったのよりずっと早いYO! もっと頑張れYO!
>>520 正直、割と適当な記述だという自覚がある
・トライでの実装。パトリシア・ツリーも考えたが、さくっと書くのは回答者の技術的に無理だったw
・単語小文字のみ、降順表示のみ対応
・規格Cでは保証されていない文字の性質(a〜zの文字コードが連続している)を用いている
・最大単語長が126文字を仮定。課題的に問題があるのかは分からなかった
・正しい実装である保証はない
http://codepad.org/tDyLMi1J
うざがられそうだなぁと思いつつ、改訂版と測定結果を貼ってみる。
>>538 の改良版
http://codepad.org/APIS2iA7 asc to asc 0.02
asc to desc 0.02
desc to asc 0.19
desc to desc 0.19
random to asc 0.11
random to desc 0.10
>>587 を小文字限定にしたもの(単語長の制限はないまま)
http://codepad.org/2IuKE34U asc to asc 0.04
asc to desc 0.03
desc to asc 0.03
desc to desc 0.03
random to asc 0.03
random to desc 0.03
>>609 asc to asc 0.06
asc to desc 0.07
desc to asc 0.06
desc to desc 0.06
random to asc 0.07
random to desc 0.07
>>608 さんのコードもみてみたいです。
>>610 いや、大いに参考になります。trie でソートする、という実装が表にでてくるのも、ひとえに
>>610 の人徳でしょう。
>
>>608 さんのコードもみてみたいです。
さて、どうでしょうかね。
>>577 >>570 は単純な二分木、というだけではなく、それを再帰呼び出しで実装しているので、この上もなく悲惨なことが判明しました。
手元の環境では、大きなデータを食わせると予告もなく stack overflow で落ちます。(ダンプも吐かないとは‥‥‥。)
いくら malloc() の返り値をチェックして最低限の予防線を張っていても、stack overflow だけは検知できない。(こんなことは DOS 時代以来‥‥。)
>>569 のいうとおり、
1) 最低限、平衡二分木にする(AVL 木, 2-3 木, 2色木(赤黒木))
2) 可能ならば再帰呼び出しは行わない。
といったところでしょうか。
トリついてなくても特定簡単すぎるw
ある程度以上のものは再帰で処理できないのは常識。 パズルとかをプログラミングで解こうとするとよくわかる。
(・3・) エェー 挿入ソートのアルゴリズムは
>>610 の一番上と同じだYO!
qsort にすればもっともっと早くなるYO!
ちなみに ”Cに慣れると何でも「いきなりのC」ができると思う癖がつきやすい”と、とある先輩が... マイプログラムにいちいち仕様書書けとかいうんじゃなくて、実はもっと高級言語(C直系のものも多い) を使ってアルゴリズムとか洗練させてからCで書き直さしたほうが無難(急がば回れ)、さもなくば泥沼に 嵌ることも多い という意味
ここまでがんばりましたが、入力した数字が偶奇異なる場合でないと正しく動きません。助けてください。 #include <stdio.h> int main(){ int i,j=0,num,child[1000],song,song2; scanf("%d %d",&num,&song); //子供たちに通し番号を付ける。 for(i=1;i<=num;i++){ child[i]=i; } song2=song; while(j!=1){ while(song2>num){ song2=song2-num; } for(i=1;i<=num;i++){ if(child[i]!=0){ printf("%d",child[i]); } } return 0; }
>>619 じゃないです。こっちです。
#include <stdio.h>
int main(){
int i,j=0,num,child[1000],song,song2;
scanf("%d %d",&num,&song);
//子供たちに通し番号を付ける。
for(i=1;i<=num;i++){
child[i]=i;
}
song2=song;
while(j!=1){
while(song2>num){
song2=song2-num;
}
/*
printf("%d %d",song2,child[song2]);
getch();
*/
child[song2]=0; song2+=song; //ループ脱出用。 j=0; for(i=1;i<=num;i++){ if(child[i]!=0){//何人残ってるか数える j++; } } } for(i=1;i<=num;i++){ if(child[i]!=0){ printf("%d",child[i]); } } return 0; }
>>618 #include <stdio.h>
int main(void)
{
int i, j, n, l, start;
int child[1000];
scanf("%d%d", &n, &l);
for(i = 0; i < n; i++) child[i] = i + 1;
for(i = n, start = 0; i > 1; i--) {
start = (start + l - 1) % i;
printf("%d\n", child[start]);
for(j = start + 1; j < n; j++) child[j - 1] = child[j];
}
printf("%d\n", child[0]);
return 0;
}
>>720 偶然、例の場合に答えが一致してるだけ
コメントはずしてsong2とchild[song2]を表示させれば順番おかしいことわかるだろ
thx コード美しすぎわろた
0を入れてくバージョンも #include <stdio.h> int main(void) { int i, j, num, length, idx, child[1000 + 1]; scanf("%d%d", &num, &length); for(i = 1; i <= num; i++) child[i] = 1; for(i = num, idx = 1; i > 1; i--) { for(j = 0; ; idx++) { if(idx > num) idx = 1; if(child[idx]) j++; if(j == length) break; } printf("%d\n", idx); child[idx] = 0; } for(i = 1; i <= num; i++) if(child[i]) printf("%d\n", i); return 0; }
627 :
626 :2011/05/02(月) 09:11:00.34
こちらでの実測結果です。データは 10000行×120文字までのランダム長英大小文字列、10回反復して平均をとりました。
>>570 asc to asc: 6.00
asc to desc: 8.76
desc to asc: 7.57
desc to desc: 6.63
random to asc: 0.18
random to desc: 0.18
>>626 asc to asc: 0.16
asc to desc: 0.15
desc to asc: 0.21
desc to desc: 0.13
random to asc: 0.15
random to desc: 0.14
>>610 の一つ目
asc to asc: 0.17
asc to desc: 0.14
desc to asc: 0.27
desc to desc: 0.27
random to asc: 0.20
random to desc: 0.21
いつまでオナニー続けんだよ
629 :
626 :2011/05/02(月) 10:17:25.66
630 :
629 :2011/05/02(月) 10:29:37.11
ベンチを取り直しました。条件は
>>627 と一緒です。
>>570 asc to asc: 5.84
asc to desc: 8.61
desc to asc: 7.52
desc to desc: 6.68
random to asc: 0.18
random to desc: 0.17
>>629 asc to asc: 0.20
asc to desc: 0.17
desc to asc: 0.16
desc to desc: 0.17
random to asc: 0.18
random to desc: 0.20
>>610 の一つ目
asc to asc: 0.13
asc to desc: 0.13
desc to asc: 0.25
desc to desc: 0.29
random to asc: 0.19
random to desc: 0.20
トリップはずしてもクソのままだな
>>632 隔離場所にひっこんでいてもらいたい
俺はあほな誘導するのがうざかっただけだから
>>631 糞は糞だよ
自己愛性人格障害は性格の病気だから一生治らん
>>630 いい加減に他のスレ行ってやれカス
空気が読めないのかアホ
>>632 回答のついた過去の問題でも、解きたい人、解けた人ははどんどんコードをアップしていいとは思ってはいます。
今回、私が叩かれているのは別の理由だったと思いますし。
そのこころは、
>>268 。
現在、赤黒木を試行中です。これはなかなか手ごわい。でも赤黒木の応用範囲が極めて広いことを考えると是非征服したいものです。
今年のゴールデンウィークは「赤黒木」がテーマになりました。
いいわけねーだろ
[1] 授業単元: [2] 問題文(含コード&リンク):デフォルトの場合は Alt+K 1(DEFAULT) カスタムの場合は Alt+K 2(CUSTOM) Alt+Kが押されたらカスタムのようにしてください。 ウィンドウまたはダイアログボックスに表示お願いします。 [3] 環境 [3.1] OS:windows [3.2] VC++ [3.3] 言語: C++ [4] 期限: 5月5日 [5] その他の制限: 制限なし
640 :
308 :2011/05/04(水) 11:18:50.54
まずデフォルトが表示されててそこから Alt+Kを押すとデフォルトがカスタムに値を1から2に変更させたいです
意味が分からん。
642 :
308 :2011/05/04(水) 11:26:46.15
まぁ同じところに表示されてデフォルトだと・Alt+K 1(DEFAULT) Alt+Kが押されたら・Alt+K 2(CUSTOM) こういう風になるようにできればオkだと思います
>>642 つまり
1回目にAlt+K -> Alt+K 1(DEFAULT)
2回目にAlt+K -> Alt+K 2(CUSTOM)
を表示させるってことか?
とりあえずその分かりにくい日本語をなんとかしろw
Alt+K 1 という表記が分からない 2アクションとして受け取ると DEFAULTを実行する術がない 意味が分からん。
645 :
308 :2011/05/04(水) 11:43:04.22
>>643 そのとおりです。日本語おかしくてスイマセン・・・・
646 :
308 :2011/05/04(水) 11:43:55.14
1と2は値です
まず638は日本語を勉強してくること 俺のESPを駆使すると、ALT-Kで1と表示されたものが2に変わるくらいに思える
649 :
308 :2011/05/04(水) 11:52:41.21
643 :デフォルトの名無しさん:2011/05/04(水) 11:35:26.76
>>642 つまり
1回目にAlt+K -> Alt+K 1(DEFAULT)
2回目にAlt+K -> Alt+K 2(CUSTOM)
を表示させるってことか?
こういうこと
650 :
308 :2011/05/04(水) 11:54:13.11
とりあえずAlt+Kの位置も変わらず 1(DEFAULT)が2(CUSTOM)に変わるって事です。
ウィンドウやダイアログボックスはそもそもスレチだろ
頭が悪いんだからしょうがねーだろ
答えたくないだけだろ
気に入らない依頼に回答が付かないようにするためじゃね
バカらしい答えてやろうぜこのスレの意味ないだろ
[1] 授業単元:再帰プログラミング [2] 問題文:n人でr個に分ける方法の数 nSrはStirling数という。関数Stirling 作成せよ。 ここで nSr = n-1Sr-1 + n-1Srr , nS0 = 0 , nS1 = 1, nSr = 0(r > n) [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C言語 [4] 期限:5/4 [5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々) ポインタは習っていません。よろしくお願いします。
習ってないならまず習って来い
n-1Srrはn-1Srの誤字じゃないの?
>>659 非再帰にしてみたが、即効で桁あふれするから無意味
#include <stdio.h>
#define N 8192
#define table(i, j) t[r * (i) + (j)]
long long stirling(unsigned int n, unsigned int r)
{
static long long t[N];
long long i, j;
if ((n + 1) * (r + 1) >= sizeof(t)/sizeof(*t)) return -1;
for (i = 0; i <= n; i++) for (j = 0; j <= r; j++) table(i, j) = 0;
for (i = 0; i <= n; i++) table(i, 0) = 0; /** nS0 = 0 */
for (i = 0; i <= n; i++) table(i, 1) = 1; /** nS1 = 1 */
/** nSr = n-1Sr-1 + n-1Srr (n >= r) */
for (i = 2; i <= n; i++)
for (j = 2; j <= i && j <= r; j++)
table(i, j) = table(i - 1, j - 1) + table(i - 1, j) * j;
return table(n, r);
}
int main(void)
{
long long n, r;
if (scanf("%lld%lld%*c", &n, &r) != 2) {
fprintf(stderr, "invalid input\n");
return 1;
}
printf("%lld\n", stirling(n, r));
return 0;
}
>>662 いや、おそらく (n-1Sr)r が正解だと思う。
int型で工夫することによって20桁同士の整数の掛け算を行い char型で計算結果を出力せよ。 これをお願いします。困っています。
ヒント 0x1234 * 0xabcd = 0x12 * 0xab * 0x10000 + 0x12 * 0xcd * 0x100 + 0xab * 0x34 * 0x100 + 0x34 * 0xcd
>>665 intで40桁表せられるハードウェア作ればいんじゃね?
668 :
355 :2011/05/06(金) 17:53:21.34
>>670 ありがとうございます
コピペしたところ、「識別子が見つかりませんでした」とエラーがでました
>>671 #include <string.h>
ググればすぐ分かる事を教えてやることないのに
[1]授業単元:プログラミング2
[2]問題文:char型のポインタ配列の先頭ポインタ**cを引数とする
返数なしでcの指し示す配列に順に月の名前の文字列を代入
作成したプログラム(
http://codepad.org/jf7lkdXu )だと
エラーが起きてしまいます。お願いします。
char *name[6]; にしてみ。
ねずみ?
>>677 おお!できるようになりました
ポインタ配列とポインタのポインタはこうすればよかったのか
勉強になりました
ありがとうございました
1]授業単元:プログラミング
[2]問題文:自己参照型構造体を用いて、以下の処理をするプログラムを作成せよ。
正の数入力→連結リストを辿り、初めて入力された数ならばカウンタを1増やす。同じ数が続けて入力されたらその数のカウンタをさらに1増やす。
負の数入力→負の数の絶対値と同じ回数入力された数のデータを削除(例えば、-3を入力し、それ以前に14が3回入力されていたら、それを削除)
0を入力→データを出力して終了。
データ出力→終了の流れはどうにかなりましたが、それ以外で上手い発想が思いつきません。
http://codepad.org/yayuXIUa 期限は明日までです。
>>680 http://codepad.org/f51zggbZ 回答がついてないのでやろうと思ったんだけど、正の数入力時の内容がどうにもわからず。
「正の数入力→入力された数の入力回数を保持する」と読み替えて作ったものをうp。
意図と違ってたら、もうちょっと細かく書いてみてください。
元コードと考えが違うところは、headは有効なノードではなく、ダミーノードにした点ぐらいのはず。
>>681 いいんじゃね?
俺もずっと前にこの手のプログラムを山ほど作ったが
ダミーノードを使った方がプログラムの見通しが良くなった。
今はC++のコンテナ std::list とイテレータで何も考えなくて
良くなったが、Cは全部書かないといけないし free() の所で
バグりやすいから大変だね
てんぷら全部埋めないのが流行ってるの?
>>680 と
>>681 のコード質の差が激しすぎだな
小学生の工作宿題なんかを親が小学レベルに合わせずに親の基準(俺俺基準)
で作成したって感じだな。カンニングバレバレだろうな
>>681 >初めて入力された数ならばカウンタを1増やす
>同じ数が続けて入力されたらその数のカウンタをさらに1増やす
この2つの処理を
>正の数入力→入力された数の入力回数を保持する
に変更ってこと?
>>684 もとのコードは生かしたつもりだったけど、ダメだったかな。
変更内容はそのとおりで、元コードの構造体と、削除時の説明からそうしてみたけど、的外れですかね……
あとはリストの並び順とかも指定なかったので適当だったりで。
宿題ならこのほうがよくね?ってのがあるなら書いてくれると次書くときできるだけ反映します。
>>682 ありがとです。
一応、メモリリークの検査と、警告は全部潰す方向でやってます。
危うく見事にfreeまわりでバグってるとこでしたorz
>>685 依頼主が何も言わないのなら、それで良いんじゃないか
少しはやる気ある依頼主みたいだから
>>681 を元に自分で俺様回答作成しているんじゃないか
>>680 の依頼主ですが、残念ながら宿題片付けはできなかったものの
自己参照型構造体のメカニズムについて少しずつ理解はしています。
C言語が得意な知人曰く、headはポインタ変数にせず普通の変数として扱い、
その中のポインタ変数であるhead.nextを使うとやりやすいとの事なので、
また考えて見ます。
688 :
デフォルトの名無しさん :2011/05/10(火) 14:16:41.34
平面上の位置座標(x, y)から相対的に(Δx, Δy)だけ移動した位置座標を求めたいとする。 (x, y)と(Δx, Δy)をそれぞれ配列として表現し、これを引数として受け取って求めたい座 標を返す関数void func1(double x[], double d[], double a[])を定義して、 その動作を確かめるプログラムkadai4-1.cを書きなさい。ただしx[]が元の位置座標、 d[]が移動分、そしてa[]に答え が代入されるものとする。 (x, y)と(Δx, Δy)はキーボードから次で入力するものとする。 scanf("%lf %lf %lf %lf", &A[0], &A[1],&B[0],&B[1]); 答えは以下で出力されるものとする。 printf("answer = (%lf, %lf)\n", C[0],C[1]); よろしくおねがいします
数学の問題と違って、解き方だけでなく書き方も重視されるのが C言語の問題 だからかどうか知りませんが、点プレに沿って質問してくださいね
>>688 #include <stdio.h>
void func(double x[], double d[], double a[])
{
a[0] = x[0] + d[0];
a[1] = x[1] + d[1];
}
int main(void)
{
double A[2], B[2], C[2];
scanf("%lf %lf %lf %lf", &A[0], &A[1],&B[0],&B[1]);
func(A, B, C);
printf("answer = (%lf, %lf)\n", C[0],C[1]);
return 0;
}
>>689 書き方と解き方は結構繋がっているからな
692 :
688 :2011/05/10(火) 15:04:40.28
>>690 ありがとう
2x2の行列A,Bの差を求める関数void func2(int A[][], int B[][], int C[][])を定義してその動作を確かめるプログラムkadai4-2.cを作りなさい。演算結果はC[][]に代入されて返されるものとする。
ただしAとBはキーボードから次で入力するものとする。
scanf("%d %d %d %d %d %d %d %d", &a[0][0], &a[0][1], &a[1][0],&a[1][1], &b[0][0],&b[0][1],&b[1][0], &b[1][1]);
答えは以下で出力されるものとする。
printf("answer = %d %d %d %d\n", c[0][0], c[0][1], c[1][0], c[1][1]);
strSrcの文字列を逆にして,strDstに書き込むプログラムを作成してください.
ただし,文字列の操作にはポインタ変数strDst, strSrc, pC, pDを用いることとし,strSrc[i] のような配列操作は用いないこととします.
また,配列strSrc[]の1つ前の番地に0が入っていることを前提としないプログラムにしてください.
http://codepad.org/V7e6qsPC
すいません、
>>693 です。
C言語勉強したてなのですが、このような課題が出来ません…
ここ数時間試行錯誤してるのですが、どうも上手く出来てないようなのでお力を貸してもらえると嬉しいです。
strSrc strDst共に文字列リテラルへのポインタなんで scanfや書き換えができるかどうかは処理系依存 殆どの処理系で禁止されている。 テンプレに嵌らない質問は別のスレで
[1] 授業単元:プログラミング言語
[2] 問題文:
>>693 [3] 環境
[3.1] OS: windows7
[3.3] 言語:C言語
[4] 期限: 2011/5/12(金)
[5] その他の制限: 授業では最近ポインタに入りました。ポインタの入ってから初めての課題です。
文字列のコピーは出来たのですが、どうしても文字列の反転が出来ません…。
699 :
698 :2011/05/10(火) 22:33:21.88
>695 strSrc, strDstとも配列だから問題ない。 >697 コメントに書いたけど、scanfで読み取る文字列がstrSrcのバッファを溢れさせると まずいことになる。 まぁ、課題の進み具合からして、あふれるような入力は無い前提で 構わないとは思うが。
>>698 ありがとうございます!理解するのに少し時間がかかりそうですが、勉強してきます…
>>701 本当ですね…問題文は一切改変してないので、問題作成者側のミスかもしれません。
授業(口頭での課題の簡単な説明)ではstrSrc , strDstを配列として扱っていたので、配列だと思われます。確認してみます…。
pC=strSrc;pD=strDst; while(*pC)pC++; if(pC>strSrc)pC--; while(pC>strSrc){ *pD=*pC; pC--;pD++; } pD=0;
↑バグってる
705 :
698 :2011/05/10(火) 23:02:37.42
バグがあった。 >703さんのコードで3行目に当たるところの処理がまずい。 pC--; → if (pc > strSrc) { pC--; } テストはほとんどしていないので、他にもあるかも。
>>703 (#の後ろは無修正行を意味)
#pC=strSrc;pD=strDst;
#while(*pC)pC++;
#if(pC>strSrc)pC--;
while(pC>=strSrc){
#*pD=*pC;
#pC--;pD++;
#}
*pD=0;
これでおk?
sizeofは覚えるとやたらと使いたくなる演算子の一つだが むやみに使う癖を付けると後で泣きを見やすい(実体験) バイトサイズオンリーで押していくシステム直属処理用の もので理論・応用レベルのコードではなかなか取れない やっかいなバグの温床になりがち
>>707 エンディアンではまったのですか?yrskrb kwsk
それとも、アラインメントですか?yrskrb kwsk
馬鹿にするために聞くとは意地が悪いなw
>>710 そんなことはありません。sizeof を避ける、という意見は初めて聞きましたので、理由をしりたいだけです。
アラインメントの問題をさけるために assert をバンバンいれたり fwrite(), fread() で構造体のメンバ変数を
ちまちま読み書きしたことがあります。
エンディアンのトラブルを避ける方法はちょっとよくわかりません。
むしろsizeofからエンディアンに発展した経緯が知りたいわ
[1] 授業単元:プログラミング [2] 問題文(含コード&リンク):ボウリングのスコア計算をするプログラムを作成せよ [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: cygwin gcc [3.3] 言語: C [4] 期限: 本日中 [5] その他の制限: 問題文はこれだけです 習った範囲は2次元配列、if、for、while、switchといった初歩的なものなので 可能ならばそれらでやっていただけると助かります
[1] 授業単元:プログラミング [2] 問題文(含コード&リンク): トランプのカード(1〜10,J,Q,K)が13枚ある。 まず、1枚のカードが表示されており、プレイヤーは次のカードが その数字よりも大きいか小さいかを当てる。 間違えたらそこで試合終了(もう一回続けるかどうか尋ねる。) 予想が正しかったら次の予想を続けるゲームのプログラムを作りなさい。 また上記のゲームのプレイヤー側の思考プログラムを作りなさい。 [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: cygwin gcc [3.3] 言語: C [4] 期限: 本日中 [5] その他の制限: 習った範囲は2次元配列、if、for、while、switchといった初歩的なものなので 可能ならばそれらでやっていただけると助かります ゲームのプログラムと思考プログラムはそれぞれ別のファイルでお願いします。
本日中ってもっと余裕もって質問しろよw あと2つ目はわかったけど最初のボウリングの問題もっと具体的に
>>715 何だか色々と申し訳ないです
ボーリングの問題なんですが本当に問題文これだけなんで
自分も詳しくは分からないのですがレーン毎に倒した本数を入力していく形式だと思います
一応今授業で乱数を学んでいるのですが特に関係なさそうですし…
要するにストライクやスペアを取った時の処理がミソなんだろうな あと最後の投球は3回になる可能性も考慮して
>>716 ゴールデンウィークの前に出された問題ですか?
こんな感じで与えられるのかな? int score[10][3];
ストライクでたら後の2投加算で、スペアは1投加算だっけ? 単純に面倒だな
>>713 int main()
{
const int score[10][2] = {{0, 0}, {10, 0}, {8, 2}, {10, 0}, {10, 0}, {10, 0}, {5, 3}, {8, 2}, {10, 0}, {10, 10}};
const int extra = 10;
int sum = 0;
int i;
for (i = 0; i < 9; i++) {
if (score[i][0] == 10) {
if (i != 8 && score[i + 1][0] == 10) {
sum += 10 + score[i + 1][0] + score[i + 2][0];
} else {
sum += 10 + score[i + 1][0] + score[i + 1][1];
}
} else if ((score[i][0] + score[i][1]) == 10) {
sum += 10 + score[i + 1][0];
} else {
sum += score[i][0] + score[i][1];
}
printf("%d\n", sum);
}
sum += score[i][0] + score[i][1] + extra;
printf("%d\n", sum);
}
合ってるかもよく分からりません
>>714 #include <stdio.h>
#include <stdlib.h>
int main()
{
const char *card[] = {"1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K"};
const int random[6] = {1, 4, 6, 5, 12, 0};
int i, res = 0;
for (i = 0; ; i++, i %= 6) {
printf("次は%sより大きいと思うなら1, 小さいと思うなら0を入力してください\n", card[random[i]]);
scanf("%d", &res);
if ((res == 0 && random[(i + 1) % 6] < random[i]) || (res == 1 && random[i] < random[(i + 1) % 6])) {
printf("つぎは%sなので正解でした\n続けるなら1を入力してください\n", card[random[i + 1]]);
scanf("%d", &res);
if (res != 1)
break;
} else {
printf("不正解ですい\n");
break;
}
}
}
>>714 #include <stdio.h>
int main()
{
int res;
printf("出されたカードはなんでしたか?数字で入力してください(J = 11, Q = 12, K = 13で)\n");
scanf("%d", &res);
printf("次のカードは今回より%sとおもいます\n", res < 8 ? "大きい" : "小さい");
}
【質問テンプレ】 [1] 授業単元プログラミング [2] 問題文(含コード&リンク): 2x2の行列A,Bの差を求める関数void func2(int A[][], int B[][], int C[][])を定義してその動作を確かめるプログラムkadai4-2.cを作りなさい。演算結果はC[][]に代入されて返されるものとする。 ただしAとBはキーボードから次で入力するものとする。 scanf("%d %d %d %d %d %d %d %d", &a[0][0], &a[0][1], &a[1][0],&a[1][1], &b[0][0],&b[0][1],&b[1][0], &b[1][1]); 答えは以下で出力されるものとする。 printf("answer = %d %d %d %d\n", c[0][0], c[0][1], c[1][0], c[1][1]); [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限: 13日まで [5] その他の制限 特になし よろしくおねがいします。
#include <stdio.h> void func2(int A[][2], int B[][2], int C[][2]) { int i ,j; for (i = 0; i < 2; i++) for (j = 0; j < 2; j++) C[i][j] = A[i][j] - B[i][j]; } int main() { int a[2][2], b[2][2], c[2][2]; scanf("%d %d %d %d %d %d %d %d", &a[0][0], &a[0][1], &a[1][0],&a[1][1], &b[0][0],&b[0][1],&b[1][0], &b[1][1]); func2(a, b, c); printf("answer = %d %d %d %d\n", c[0][0], c[0][1], c[1][0], c[1][1]); }
次の文を修正しなさい >ポインタ変数宣言時における構文糖 >type *p=type型配列定数宣言 >例 >int const *p={1,2,3,4,5,6,7,8,9,10}; >は許可されないので >int pbase[10]={1,2,3,4,5,6,7,8,9,10}; >int const *p=pbase; >としなければならない。 >これでは冗長なのでpがconstである場合に限り >int p[]={1,2,3,4,5,6,7,8,9,10}; >でconst ポインタ変数pが宣言されたとすることができる >Cでは配列とポインタを意図的に区別をしていない >していないからこそ処理系の裁量で「配列」が値渡し(配列的) >できるか参照渡し(ポインタ的)しか出来ないか決定できる >前者の場合は副作用の少ないすっきりとしたわかりやすい >コードが書けるが、実際には動作できないようなコードも >生み出しがち。後者は現在の標準(巨大データは参照渡)。
>ポインタ変数宣言時における構文糖 >type *p=type型配列定数宣言 >例 >int const *p={1,2,3,4,5,6,7,8,9,10}; >は許可されないので >int pbase[10]={1,2,3,4,5,6,7,8,9,10}; >int const *p=pbase; >としなければならない。 >それはおいといて >int p[]={1,2,3,4,5,6,7,8,9,10}; >はint型の配列pの宣言です >Cでは配列を関数の引数に渡すと >関数内ではポインタになります
>>722 >>717 が言及しているけど、最後の10フレーム目は、ストライクが2回続いているんで、もう1投あるね。
{10, 10, 8}
あ、ごめん、よく見たら const int extra = 10; が10フレームの3投目か。
>>722-724 ありがとうございます
それと申し訳ないんですが
>>714 のゲームプレイヤー側の思考プログラムなんですが
「ランダムに大小を選択するのではなくある程度思考して選択するように」との一文があったのですが大丈夫ですかね?
それとボーリングのプログラムを倒したピンの数を標準入力していって
スコアを算出するように出来ませんかね?
お手数かけて申し訳ないです
「これからしばらく寝ます。」
>>732 ランダムに選択していないし、ある程度かどの程度か分からないけれど、思考はしているように見えるよ。
「別の回答作ってるから少し待ってて」
void func2(int A[][], int B[][], int C[][])
いまのCはint[][]ができるのか。良い時代になったな
>>727 [][2]と[][]は型が違うんじゃないか?
Cでは別に禁止してないけど、実装上の理由からCコンパイラの多くが 許可していない(対応していない)というのも多いんじゃね?
>>736 おいおいこれは「ジャグ配列」と言ってC/C++の二次元配列とは全く違うぞ
強いて言えば std::vector<std::vector<int> > に近い
つまり行ごとに列の要素数が違ってもいいわけだ
10フレーム3投目がおかしくね?
ポインタでない配列をNULLで初期化するのってあってるの?
NULLはマクロ定義 0の場合が多いけど処理系によって違う
>741 間違ってるだろうね。 Cの場合は #define ((void *)0) ってなっていることが多いとおもう。 #define 0 なら結果的に問題ないけど、終端文字をNULLって書くくらい、間違っている。
>>742 どう定義されていようが、間違いには変わりない。
[1] 授業単元:プログラム実習 [2] 問題文(含コード&リンク): 名前・身長・体重・血液型が記録されたメモ帳(ファイル)がある。 これを身長順にソートして並べ替えてコマンドプロンプト上に 表示させるプログラムを作成せよ。 なお、今回メモ帳はstudentsdata.txtという名前で保存されていることとする。
[3] 環境 [3.1] OS: Windows vista business [3.2] コンパイラ名とバージョン: visual basic [3.3] 言語:C言語 [4] 期限:2011年5月16日(月)午前9時まで [5] その他の制限: 最後の行には身長・体重の平均、一番多い血液型を表示させること。 条件として構造体を使うこと。 長文で投稿できなかったので2回に分けました。 よろしくお願いします。
>>745 で、ファイルは固定長?それとも何かの区切りがあるの?
>>746 つか、vbでCは無理
もう一度宿題を確認して来い
名前・身長・体重・血液型の書式が指定されてるか確認した方がいいよ 勝手に決め打ちした書式でも文句は言えないぞ
749 :
デフォルトの名無しさん :2011/05/12(木) 14:14:19.58
[1] 授業単元:プログラミング [2] 次の連立方程式を解け x1+2x2+3x3+4x4=30 2x1+3x2+4x3+x4=24 3x1+4x2+x3+2x4=22 4x1+x2+2x3+3x4=24
751続き [3] 環境 [3.1] OS: Windows7 [3.2] コンパイラ名とバージョン: visual basic [3.3] 言語: C++ [4] 期限: 2011年5月13日(金) [5] できれば元の式のみを解くというだけでなく、他の数値等でも解けるように式自体を読み込まして解きたい。 数式がとても見辛いですがよろしくお願いします。ガウスの消去法です。
visual basic
755 :
764 :2011/05/12(木) 16:51:34.82
大変失礼しました。 ファイルの中は 氏名 身長 体重 血液型 氏名 身長 体重 血液型 ・ ・ ・ といった具合に並んでいます。 (空白はスペースです) あと、visual basicではなく visual studioの間違いでした。すみませんでした。
>>754 double a[N][N+1];
for (int i = 0; i < N;i++){
for (int j = 0; j < N + 1; j++){
printf("a[%d][%d] = ", i+1, j+1);
scanf("%lf", &a[i][j]);
}
}
>>754 お礼が遅れてすみません。非常に助かります。
ありがとうございました!
762 :
デフォルトの名無しさん :2011/05/13(金) 11:37:13.83
[1] 授業単元: ニュートン法 [2] 問題文:与えられた実数(a,b,c,d)に対して,つぎの連立非線形方程式 の解をニュートン法を用いて,解くプログラムを作成しなさい. f1(x,y)=y+ax^2-b=0 f2(x,y)=y^2+cx^2-d=0 ただし,初期値(a,b,c,d)を入力でき,上記の方程式の解が画面表示さ れること 【自己チェック法】 (a, b, c, d)=(0.1, 5, 1, 100)→ (x, y)=(9.306, -3.661),(-9.306, -3.661) , [3] 環境 [3.1] Windows [3.2] gcc [3.3] C言語 [4] 期限: 2011/5/15 18:00まで [5] その他の制限: できるだけ簡単な関数で よろしくお願いします.
(abcdじゃない方の)初期値も標準入力で入力できたほうが良かったでしょうか そうしないと数値を変えてコンパイルしなおさないともう一つの解を出せないですし ニュートン法の手法自体では解が一つしか出ないんですが 複数解についてなにか指示はありましたか? 一応初期値を複数とって比較すれば出せないこともないですが数学的にはかなりアレな方法な気がします
解は最大4つか
767 :
デフォルトの名無しさん :2011/05/13(金) 13:31:49.67
1] 授業単元:数値計算アルゴリズム [2] 問題文:f(x)=e^-x -x^2=0の解(x>0)を原始反復法とニュートン法から求め、その収束の速さを比べよ。なお、解の精度は10^-6 とする。 [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C言語 [4] 期限: 2011年5月13日18:00まで [5] その他の制限:なし よろしくお願いします。
原始反復法が分からん どんなんだっけ?
原始反復法=反復法
連立方程式の反復法なら分かるんだがなあ
>>773 文字列の比較はstrcmpを使ってください
==ではだめです
× char *name[3] = {"tree","cake"}; ○ char *name[2][16] = {"tree","cake"};
>>775 むしろ
char *name[] = {"tree","cake"}
でいいだろ
ていうかその◯のやつはなんなんだよwwwwww
>773 直接エラーになっているのは scanf("%s",&s); → scanf("%s",s); 文字列比較はstrcmpが必要になるのは>774の通り。 >775 何か勘違いしてませんか?
778 :
773 :2011/05/14(土) 15:34:19.77
strcmpなしではできないのでしょうか?
>>778 できるよ
先頭から一文字づつ比較すればいい
780 :
773 :2011/05/14(土) 15:42:22.33
>>782 ここは宿題すれだから、
>>1 のテンプレに従って
問題文と回答方法を書いてくれると早い。
>>787 >const char *name[] = {"tree","cake"};
>const int price[] = {300,500};
なぜ static をはずした?
789 :
787 :2011/05/14(土) 20:16:50.68
いつもの癖で 質問で気付いたけど呼び出し毎のスタック確保&解放防止の為なのね、 付けた方が良いのかも
787は中途半端すぎだろconstもつけろよwwwww 改変の危険と速度面から
本人がstrcmp使わないでとか自身で書いたコードがCなのにC++かいな、 ってか前もこの手の話なかったか?w
>> [3.3] 言語: C++ 仕様通り。問題無し。
半端なC++化だな
A Better C.
コードも書かずに批評かよ… 本格的なC++化というのを見せてくれ。w
>>797 本格的とかいわれてもwwwww
stringを使って簡略化したなら
末尾の検出のために手動で-1入れた配列とか使ってないでコンテナも使えばいいじゃんぐらいの話しよ
hoge.cpp
>>798 5月初旬じゃコンテナまで習ってないだろ。
>>800 出題者のこと考えるならそもそもstringも使うべきじゃないだろ
どうみてもCだもの
あくまで
>>792 が半端だなぁってだけだよ
>>802 お題が、言語:C++、制約条件:strcmpは使用しない事とあるので、
std::string使えというのが出題者の意図と判断した。
もう一つの可能性(strcmpを自分で書く)は既に出ている。
質問テンプレに「これまで習った範囲」も入れた方が良いな。
テンプレぐらいちゃんと書こうよって皮肉だと思う あと、strcmpを使わないっていうのは、本来そんな制限はないけど、 出題者が思い込みで勝手につけた制限だと思う。宿題スレにはよくあること
>>803 あぁなるほど
C++って描いてあるのに結局Cでやれってことかよって奴をちょくちょく見たので思い込んでた
>>785 tree
tr
trees
rg
で試したけど全部300
[1] C言語GW課題 [2] キーボードから128文字以内の文字列を読み取り それが浮動小数点表現であるかどうかを検査する プログラムを作りなさい。浮動小数点表現ならば その数に1を足した数字を表示しなさい。 [3] Windows/Visual C++/C言語 [4] 5/13迄(遅れています) [5] printf,scanfしか習ってません ボインタとかまだ習ってません これ以外の関数は使えないと思います。 よろしくお願いします。
809 :
784 :2011/05/15(日) 16:00:57.97
784です。遅れてすいません 様々なプログラムをありがとうございました 参考にさせていただきます
>>813 エラー E2140 dai2.c 15: ここでは宣言はできない (関数 main )
またC99で書いたろカス
あと、E大文字、とか。 それは出題者で出来るだろうから宿題。
817 :
デフォルトの名無しさん :2011/05/15(日) 18:55:59.95
>>820 ついでにこれもテスト。
3.4 3.4
>>820 整数.整数f+整数
という記法は無かったので、
int isexp(int c)
{
return c == 'E' || c == 'e';
}
に修正してくれ。コメントも合わせて要修正。
浮動小数点 スペース 浮動小数点
は2個?それともエラー?
>>808
エラーだと思うけどなぁ
もしくは、1つ目のみ処理対象
なんか久々にまともにこのスレで議論してるとこ見た気がする
以下のsscanfの仕様と同じように作ればいいんじゃないかな? if( sscanf(buf, "%lf%s", &value, s) == 1 ) printf("%s + 1 = %f\n", buf, value + 1.0);
>>808 #pragma warning (disable:4996)
// 処理:2つ以上の数は1つ目だけの処理
// 制限:scanf/printf だけを使う
// 目的:復興のための再開発
#include <stdio.h>
int main(void){
double data;
if(scanf("%lf", &data) == 1)
printf("%f\n", ++data );
else
printf("error\n");
}
>>828 それだと小数点も指数も無い整数が通っちゃう気がする
ちなみに、もりたぽ有償くんのは、最初そのイメージだったけど、通るように直してた。 3e4とか。
QZさんを糞呼ばわりしている人はQZさん以上のものが 書けたのかな?
本人擁護乙
本人擁護も糞呼ばわりもわりとどうでもいい。依頼に淡々と回答を書けばいい。
なんか必死でスレ埋めてたな 多分こっちにも被害くるぜ
新スレ立てるだろうし。わきまえて使えるかどうかで、それぞれの評価が決まるよ
◆QZaw55cn4cまだいたのかw
◆QZaw55cn4cを非難しているのは一人か二人だろうと本人が書いてたなw 幸せ回路全開だな んなわけねーだろ
>>834 そうだね
そうならないためにも◆QZaw55cn4cには消えてほしいね
QZさん人気者w
なんで最近またトリ付けてるの? 我慢できなくなっちゃった?
>>840 無能の癖に自己顕示欲とプライドだけは無用に高いからなあw
宿題スレ、二ついるようだね。お互い邪魔しないようにしてね
なんでID強制表示に賛成してくんないの?
そんなに嫌なら別スレでやれば?
◆QZaw55cn4cって「わたしの10倍速いコードなど、ありえないだろう…(キリッ」って偉そうにしてたら、 あっさり100倍速いコード書かれて涙目でフェードアウトした人のこと?
>>844 過疎りはしないと思うよ。単発が増えまくるだろうけど
ぶっちゃけ過疎って困る人がいるか?
面白半分の煽りが減るから、ユーザーには良いことだね
書き込みが減るのか。それは良い
煽り専門でム板にいる俺は困るな
たまにわく偽物とか居なくなるしね
通算で始めての投稿のIPにはIDを出さず,2回目以降は 都度異なるID(IPと時刻から決定される3桁英数字ハッシュコード) +積算投稿回数(10回未満:1 100回未満:2 1000回未満:3 ...) がいいと思います 荒らしと認定されたものが多いIPは赤で表示してもらうとか
>>855 ここの投票所はそれが使えないんですよ
何かいい投票所はないですか?
ちなみにコメント欄入力必須にしときましたので、
あまりいい加減なコメントばかりならこの投票所を消します
ちゃんと理由を記入してください
他所でやれ、ゴミども
でもこの投票所はつなぎ直してリモートホスト変えてクッキーも消せば自作自演し放題じゃん やっぱり消すわこれ
>>856 投票所じゃなくてスレにそういうIDがでればいいのにって話じゃね?
すぐ取り消すあたりQと似てるな
862 :
808 :2011/05/16(月) 20:18:24.88
>>812 ,813,816,818,820
友達が作ったプログラムを走らせてみると
こんな感じでした。
符号を入力してください(空入力で+とします):.
符号を入力してください(空入力で+とします):+
小数点以下0桁目を入力してください:3
3.000000000000000000
小数点以下1桁目を入力してください(空入力で終了):a
小数点以下1桁目を入力してください(空入力で終了):12
小数点以下1桁目を入力してください(空入力で終了):1
3.100000000000000089
小数点以下2桁目を入力してください(空入力で終了):4
3.140000000000000124
小数点以下3桁目を入力してください(空入力で終了):
exponent表現を使いますか<Y/N>?a
exponent表現を使いますか<Y/N>?y
符号を入力してください(空入力で+とします):-
exponent先頭1桁目を入力してください:1
0.314000000000000057
exponent先頭2桁目を入力してください(空入力で終了):
1.3140000000000001+1.0
でも、多分皆さんが作ってくださったコードが求めるものだと
思います。感謝致します。
小数点記法って正規表現で表せるのか?
表せるのだったらNP完全だが、表せないんだったら
>>862 みたいに自分で選ばせるしかないな
>>863 Cの規格書ではBNFを使った文法を与えられているが、
たぶん正規表現でも書けると思う
865 :
デフォルトの名無しさん :2011/05/16(月) 20:59:52.49
実はこの課題は 浮動小数点表現を題材に俺なんちゃって正規表現を実装して パターンマッチングせよって課題ってことか
>>864 ならexponent表現を使いますかって選択肢は不要なはずだね
問題文の解釈で理系か文系かが分かれるなw ガチガチの(ちょっと叩けば粉々に崩れる)プログラマ脳か、 頓知しか出来ない俺なんちゃって脳か
[1] プログラミング言語U [2] 画像を拡大せよ(128×128→256×256)、なお拡大方法は自由とする [3] windows/Visual C++ 2008 Express edition/C++ [4] 2011/05/18 [5] きれいに拡大できる線形補間法で拡大しようとしていますがなかなか上手くいきません。 なお、複雑なwindowsアプリケーションでなく簡単なコンソールアプリケーションで作成したいです。 よろしくお願いします。
GetPixel, SetPixelでfor文ぐるぐるで終わりだと思うが
>>868 画像形式は?
あとライブラリの使用はどの程度可能だ?VC2008についてる物なら何でも使っていいか
(もちろん画像処理そのものは別として)
JPEG
872 :
868 :2011/05/17(火) 01:00:43.17
問題を分割してみては (1)画素配列 int [128][128]をint [256][256]に滑らかに補完して返す関数 int *hokan(int *src) の作成 (2)指定されたファイルを探して画像ファイルかどうかを検出してint[128][128]配列に して返す関数の作成 int **resdFile(char *); (3)hokan,readFileを使ってコンソールからファイル名を読み取って256x256配列に 直してコンソールで指定されたファイルに書き込むint main(void)の作成 てな具合に それぞれ別の人が担当すりゃ空気良くならね?
>>872 bmp のヘッダとかフォーマットとか全く知らないのか?
その辺りがむちゃくちゃ
>>873 聞かなきゃなんともならん部分聞いてるだけじゃねーかwwww
分割してなにが解決するんだよ
>>875 失礼。このスレにも流れと空気があってその関係の話ですた。
GetPixel, SetPixelを使わないならそれに相当する関数を自分で作ることになるだけだが とりあえずfopenで直接バイナリを見てやるならBMPのフォーマットを調べることからやらないと
878 :
デフォルトの名無しさん :2011/05/17(火) 13:48:34.02
[1] 授業単元:プログラミング [2] 問題文(含コード&リンク): キーボードから入力した2つの文字列を連結する関数 void addstr(char str1[], char str2[], char ans[])を定義して、 この動作を確認するプログラムkadai5-1.cを作りなさい。 ただし、addstr()はstr1とstr2を連結したものをansに代入して終了するもの とする。また、2つの文字列は次のように入力されるものとする。 scanf("%s", str1); scanf("%s", str2); 答えは以下で出力されるものとする。 printf("answer = %s\n", answer); [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: ([2011年5月19日18:00まで] または [無期限] のいずれか)
#include <stdio.h> void addstr(char str1[], char str2[], char ans[]) { while(*str1) *ans++ = *str1++; while(*ans++ = *str2++); } int main(void) { char str1[128], str2[125], answer[256]; scanf("%s", str1); scanf("%s", str2); addstr(str1, str2, answer); printf("answer = %s\n", answer); return 0; }
880 :
デフォルトの名無しさん :2011/05/17(火) 15:24:21.34
もう1問おねがいします。 [1] 授業単元:プログラミング [2] 問題文(含コード&リンク): キーボードから入力した文字列を逆向きの文字列に変換する関数 void reverse(char str[], char answer[])を作り、その動作を確認する プログラムkadai5-2.cを作りなさい。 但し対象となる文字列はstr[]に。 答えはanswer []に代入されて返信されるものとする。 scanf("%s", str); 答えは以下で出力されるものとする。 printf("answer = %s\n", answer); [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: ([2011年5月19日18:00まで] または [無期限] のいずれか)
882 :
デフォルトの名無しさん :2011/05/17(火) 16:15:11.50
[1]授業単元:プログラミング [2]問題文 二次元配列に保存された10組の計測データ x 23 34 45 21 34 56 68 78 89 45 y 22 28 55 17 42 56 60 87 91 39 に対して最小二乗法により直線近似した場合 の傾きと定数項を求めるプログラミングを作成しなさい。 ※二つの変数の相関係数を求めて出力しなさい。
883 :
882の続きです。 :2011/05/17(火) 16:17:13.47
[3]環境 [3,1] OS:恐らくWindows7 [3,2] コンパイラ名とバージョン:すいません、わかりません。 [3,3] 言語:C [4]期限:2011年5月18日10時00分まで コマンドプロンプトと秀丸を使っています。 よろしくお願いします。
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
ttp://www.dotup.org/uploda/www.dotup.org1645289.txt (上記URL先)のプログラムを機能別に分けたプログラムを作成しなさい。
また、どの点に着目して改良したかを述べなさい。
[3] 環境
[3.1] OS: Windows7
[3.2] コンパイラ名とバージョン: Visual C++ 2008 Express edition
[3.3] 言語: C++
[4] 期限: 2011年5月18日(水)22:00
[5] その他の制限: 配列の章までの範囲でお願いします。
何が何と同時に実行されているのかを明確にして頂きたいのです。
また、部分ごとにどういうプログラムを実行しているか(人数の入力など)分けて頂けると嬉しいです。
886 :
885 :2011/05/17(火) 17:22:55.84
>>880 #include <stdio.h>
#include <string.h>
#define MAX_LENGTH 128
void reverse( char str[] , char answer[] ) {
int index ;
char *pBuff ;
pBuff = str + strlen(str) -1 ;
for( index = 0 ; index < strlen(str) ; index++ ) {
answer[index] = *pBuff ;
pBuff-- ;
}
}
int main(int argc , char** argv ) {
char str[MAX_LENGTH] = {'\0'} ;
char answer[MAX_LENGTH] = {'\0'} ;
printf("input string:") ;
scanf("%s" , str ) ;
reverse( str , answer ) ;
printf("answer = %s\n" , answer ) ;
return 0 ;
}
あたま悪いな
>>887 ガウスジョルダン消去法は最小二乗法なのか?
>>890 曲線近似する時は連立一次方程式を解かなければならないだろ
いまはそれがxで終わっているからこんなおおげさな事はしなくていいのだが
つるかめ算をするとかえってプログラムが読みにくくなる
クラメルの公式を使えばガウスジョルダン消去法は必要ない 元のプログラムはそうなっている
894 :
882,883です。 :2011/05/17(火) 20:00:25.71
>>882 >>883 です。
ホントにありがとうごさいます。
申し訳ないんですが、もう少し短くはなりませんか?
一応、学校で配られた二次元配列のプログラムを載せます。
895 :
894の続きです。 :2011/05/17(火) 20:08:10.64
問題がわかりませんが、 #include<stdio.h> #include < stdlib.h> int main(void) { int a[2][2], i, j ; a[0][0]=1 ; a[0][1]=2 ; a[1][0]=3 ; a[1][1]=4 ; for(i=0; i<2; i++){ for(j=0; j<2; j++;){ printf(" a[%d][%d]=%d", i, j, a[i][j]); } printf("¥n"); } return(0); }
897 :
895の続きです。 :2011/05/17(火) 21:11:53.66
こんな感じです。 また別の例に double型のデータを格納し、配列名をa、大きさを3×5とした場合 →double a[3][5] と書いてあります。ド素人で全然わかりませんが、 よろしくお願いいたします。
わけがわからないよ
900 :
デフォルトの名無しさん :2011/05/17(火) 22:54:37.33
[1] 授業単元: プログラミング [2] 問題文(含コード&リンク): aprioriを実装しなさい。 [3] 環境 [3.1] OS: Windows7 [3.2] Visual C++ 2010 Express edition [3.3] 言語: c [4] 期限: 2011年 5月22日 [5] その他の制限:配列まででできるのならそこまででお願いします。 部分ごとにどういう意味があるのかをコメントもできればお願いしたいです。
>>900 "apriori" がなにかよくわかりません。説明している URL とかありませんか?
コマンドを自作するにはどうすればいいですか? 例えばcatに似たmycatってコマンドを作りたい場合。
>903 何が疑問なのか今ひとつ不明だが、、、。 #include <stdio.h> #define LINE_SIZE (1024) int main(int argc, char **argv) { FILE *pIn; char buf[LINE_SIZE]; /* 引数チェック */ if (argc < 2) { /* 引数指定がなければとりあえずなにもしない */ return -1; } pIn = fopen(argv[1], "r"); if (pIn == NULL) { /* ファイルが開けなければ、とりあえずなにもしない */ return -1; } while (fgets(buf, LINE_SIZE, pIn) != NULL) { /* 無加工で出力 */ printf("%s", buf); } fclose(pIn); return 0; }
905 :
894 :2011/05/18(水) 01:50:24.77
ありがとうございました!
906 :
885 :2011/05/18(水) 05:14:24.50
907 :
749 :2011/05/18(水) 14:59:36.47
>>908 [3.2] コンパイラ名とバージョン: teraterm pro
まぁきっとgccだよね
オリジナリティか・・・
912 :
デフォルトの名無しさん :2011/05/18(水) 20:18:31.82
この場合のオリジナリティとは「同級生のコピペで無い事」 JK
914 :
908 :2011/05/18(水) 20:25:45.13
>>911 ありがとうございます
恐縮ですが処理の流れも教えていただけますでしょうか?
.
>>914 WindowsならVisual C++ Express Editionインストールして
デバッグモードで1行ずつ処理を追っていけばはかどるぞ
916 :
868 :2011/05/18(水) 22:52:00.43
>>885 遅れましたが、ありがとうございました。
918 :
917 :2011/05/19(木) 02:20:43.50
スレ違い誤爆デス
919 :
884 :2011/05/19(木) 08:53:22.38
すみません誰か
>>884 をお願いします。
追記。
List5-13のプログラムを機能別に完全に分けたプログラムを作成しなさい.
1 人数の入力
2 データの入力 tensu[]へのデータ入力
3 分布の計算 bunpu[11] の計算
4 分布の出力
多分だれにも解けないよ 理由は言わないでおくが
921 :
884 :2011/05/19(木) 11:59:47.20
うp先消えてた…orz
すみません改めてお願いします。
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
http://www.dotup.org/uploda/www.dotup.org1651097.txt (上記URL先)のプログラムを機能別に完全に分けたプログラムを作成しなさい。
1 人数の入力
2 データの入力 tensu[]へのデータ入力
3 分布の計算 bunpu[11] の計算
4 分布の出力
また、どの点に着目して改良したかを述べなさい。
[3] 環境
[3.1] OS: Windows7
[3.2] コンパイラ名とバージョン: Visual C++ 2008 Express edition
[3.3] 言語: C++
[4] 期限: 2011年5月19日(水)16:00
[5] その他の制限: 配列の章までの範囲でお願いします。
>>921 [5]がお前にしか分からないから無理だな
>>922 ああ、そうか…すみません
特に指定してません
完全に分けるって事は関数使用するって事でいいのかな? 関数ならった?
926 :
デフォルトの名無しさん :2011/05/19(木) 13:42:45.00
[1] 授業単元:プログラミング [2] 問題文(含コード&リンク):午前四時から正午までは Good Morning!、正午から午後八時まではGood Afternoon!、 午後八時から午前四時までは Good Evening!と表示するプログラムを書け。ただし、境界の時刻は前の時間帯に含まれる。 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc 3.4 [3.3] 言語: C [4] 期限:2011年5月22日24:00まで [5] その他の制限:特になし お願いします
928 :
926 :2011/05/19(木) 14:18:41.54
929 :
921 :2011/05/19(木) 15:18:04.98
どなたかやってくださってるんでしょうか…? 説明不足で分かんないことがあったら言ってください
頻繁な催促は自分の首をしめるだけだぞ すでに手遅れかもしれないが
931 :
921 :2011/05/19(木) 15:29:48.40
すみません…
933 :
921 :2011/05/19(木) 15:48:14.50
>>932 ありがとうございます。
「:」が消えるのは実行結果でのことでしょうか?自分のにはちゃんと表示されますけれども…。
オレのブラウザの問題かも。表示されてるなら気にスンナ。
935 :
デフォルトの名無しさん :2011/05/19(木) 17:15:23.50
[1] プログラミング実習 [2] 長さが32の0と1の列 se7e6e5…e1e0d1d2…d22d23 を入力してこのビット列の表す実数値(実数表現の仕方はIEEE規格754に従うものと仮定する) (-1)^s*(1+M)*2^E if-127<E<128 (-1)^s*M*2^(E+1) ifE=-127 Inf ifE=128,M=0 NaN ifE=128,M≠0 を出力するCプログラムを作成せよ。またこのプログラムの場合、使用した計算機の実数表現方式がIEEE規格754に従っているのなら、 計算結果として得られた実数値はコンピュータ内部では入力したビット列で表されているはずであるが、これをGDBのxコマンドを用いて調べてみよ。 [3] 環境 unix 言語 C [4] 2011 5.20 16:00
936 :
908 :2011/05/19(木) 17:44:50.12
http://codepad.org/M66nV3HP 自分なりにやってみたところ、リンク先のような形にまでは出来ましたが
関数を用いて平均を求めるのとファイルに出力するのがどうしてもわかりませんでした
リンク先のものに付け足す形で平均の関数とファイルへの出力をお願いします
>>935 http://codepad.org/p1VWkOGH > 計算結果として得られた実数値はコンピュータ内部では入力したビット列で表されているはずであるが、これをGDBのxコマンドを用いて調べてみよ。
(gdb) break 47
Breakpoint 1 at 0x400928: file 935.c, line 47.
(gdb) run
Starting program: /home/u/work/935
input binary data? 00000000010000000000000000000000 (1)
00000000010000000000000000000000 = 5.877472e-39
Breakpoint 1, ieee754_bin32 (b=4194304) at 935.c:47
(gdb) x/t &frac
0x7fffffffd99c: 00000000010000000000000000000000 (1)と一致
(gdb) c
Continuing.
input binary data? 00111111100000000000000000000000 (2)
00111111100000000000000000000000 = 1.000000e+00
Breakpoint 1, ieee754_bin32 (b=1065353216) at 935.c:47
(gdb) x/t &frac
0x7fffffffd99c: 00111111100000000000000000000000 (2)と一致
(gdb)
[1] 授業単元:プログラミング [2] 問題文(含コード&リンク): キーボードから入力された3つの整数を引数として受け取り、その中で最も小さい値を返す関数を定義し、以下の処理をするプログラムを作りなさい。 ただし、値の入出力はmain関数内で行うようにすること (↓から実行中の画面の一例。)キーボード入力は、整数1:〜整数3:まで。 3つの整数を入力してください。 整数1:67 整数2:34 整数3:45 最も小さい値は34です。 [3] 環境 [3.1] OS:windows7 [3.2] コンパイラ名とバージョン: VS2007 [3.3] 言語:Visual C++ 2008 Express edition [4] 期限: 2011年 5月20日 金曜日 午後1時まで [5] その他の制限 Vmain( ) {最小値を探す} return 結果 をmain へ? main関数内で行う。 全然分からなくて、お力を借りたいです。 よろしくお願いします。
[1] 授業単元:プログラミング [2] 問題文(含コード&リンク): キーボードから入力された配列の要素数と各要素を引数として受け取り、要素の順番を逆に並び替える関数を定義し、以下の処理をするプログラムを作りなさい。ただし、値の入出力はmain関数内で行うようにすること (↓から実行中の画面の一例。)キーボード入力は、要素数を入力してくださいからva[0]〜va[4]までの変換前の手前まで。 要素数を入力してください(10個まで):5 va[0]=32 va[1]=65 va[2]=34 va[3]=45 va[4]=12 変換前 va[0]=32 va[1]=65 va[2]=34 va[3]=45 va[4]=12 変換後 va[0]=12 va[1]=45 va[2]=34 va[3]=65 va[4]=32 整数1:67 整数2:34 整数3:45 最も小さい値は34です。 [5] その他の制限:入出力関数を用いて解答すること。ごめんなさい。全然わからず困ってます・・(´・ω・`)お願いします。
>939 [5]制限の意味がさっぱり分らないです。 エスパーすると、最小値を探す関数を作成して、mainではそれを呼ぶこと、みたいな感じかな。
関数を定義しろって問題文に書いてあるのが読めない人がいるようです
945 :
941 :2011/05/19(木) 22:09:18.83
>>939 Vmainは関数名?
#include <stdio.h>
int Vmain(int a, int b, int c)
{
if(a < b) {
if(a < c) return a;
return c;
}
if(b < c) return b;
return c;
}
int main(void)
{
int a, b, c;
printf("3つの整数を入力してください。\n");
printf("整数1:");
scanf("%d", &a);
printf("整数2:");
scanf("%d", &b);
printf("整数3:");
scanf("%d", &c);
printf("最も小さい値は%dです。\n", Vmain(a, b, c));
return 0;
}
[1] 授業単元: Cプログラミング演習 [2] 問題文:文字列ABCDを変数に代入し、ポインタを用いて次のように表示するプログラムを作成せよ ABCD BCD CD D [3] 環境 [3.1] OS:Windows7 [3.2] コンパイラ名とバージョン: Visual Studio2008 [3.3] 言語: C++ [4] 期限: 5月20日12:00まで [5] その他の制限:ありません
950 :
885 :2011/05/19(木) 22:42:49.95
951 :
939 :2011/05/19(木) 22:45:40.73
>>939 と
>>940 教えてくださった方、ありがとうございます
>>948 さんみたいなプログラムは構造とかscanfとかが授業内容的にもあってたので嬉しかったです(・ω・)
>>942 >>944 >>947 最後の整数1:とかの所は消し忘れミスです・・
制限の意味は、
↓整数1:67 }
main ↓整数2:34 }Vmain( ){最小値を探す}
↑ ↓整数3:45 }
↑
return 結果
の図があって、それを文章にしたものです。わかりにくくてごめんなさい・・
>>944 さんのプログラムをscanfに直せるかちょっとやってみます。
規制中で、代行の方にお願いしてるのでレス遅れちゃうかもです(´・ω・`)
>949 #include<stdio.h> int main(void) { char a[] = "ABCD"; char *p; for (p = a; *p != '\0'; p++) { printf("%s\n", p); } return 0; }
>>952 とってもありがとうございます。
言語のところも、テンプレート通りに作ったと思うのですが…。
956 :
952 :2011/05/19(木) 23:12:45.23
>>954 C と C++ はべつですよ。C で書きました。
最後に /* end */ と入れる癖は ◆QZaw55cn4c 特有の物だな C++も分からない癖に 「Cで書きました」じゃなくて「C++が分かりません」だろ
958 :
940 :2011/05/19(木) 23:26:11.18
教えていただいてとても嬉しいのですが、
>>944 さんのを実行したらエラーが出てしまいます。
>>940 の
整数1:67
整数2:34
整数3:45
を消した問題をもう一度教えて頂けないでしょうか(´・ω・`)
できれば
>>947 さんや
>>948 さんみたいな形式だと嬉しいです。
ごめんなさい。
959 :
940 :2011/05/19(木) 23:28:37.14
教えていただいてとても嬉しいのですが、
>>944 さんのを実行したらエラーが出てしまいます。
>>940 の
整数1:67
整数2:34
整数3:45
を消した問題をもう一度教えて頂けないでしょうか(´・ω・`)
できれば
>>947 さんや
>>948 さんみたいな形式だと嬉しいです。
ごめんなさい。
[3.1] OS:windows7
[3.2] コンパイラ名とバージョン: VS2007
[3.3] 言語:Visual C++ 2008 Express edition
[5] その他の制限
入出力関数を用いて解答すること。C++で。
ファイル→新規作成→Win32コンソールアプリケーション→Win32アプリケーションウィザード→空のプロジェクトをチェック→完了
ソリューションエクスプローラ内のソースファイルの上で右クリック→追加→新しい項目→c++ファイル
>>940 #include <stdio.h>
void rev(int *va, int n) {
int i, temp;
for(i = 0; i < --n; i++) {
temp = va[i];
va[i] = va[n];
va[n] = temp; }}
int main(void)
{
int i, n, va[10];
printf("要素数を入力してください(10個まで):");
scanf("%d", &n);
for(i = 0; i < n; i++) {
printf("va[%d] = ", i);
scanf("%d", va + i); }
printf("変換前\n");
for(i = 0; i < n; i++) printf("va[%d] = %d\n", i, va[i]);
rev(va, n);
printf("変換後\n");
for(i = 0; i < n; i++) printf("va[%d] = %d\n", i, va[i]);
return 0;
}
[1] 授業単元:プログラミング演習 [2] 問題文(含コード&リンク): while分を用いて、金利が1%の銀行に10000円を預金した場合、 預金額(deposit)が15000円になるのに何年(year)かかるかを表示するプログラムを作成せよ [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン:Visual C++ [3.3] 言語:C++ [4] 期限:2011/5/31 宜しくお願いします
すみませんもう1問お願いします; [1] 授業単元:プログラミング演習 [2] 問題文(含コード&リンク): for文の二重ループを用いて、下の実行結果のように0〜9までの数字を 0から1個ずつ増やしながら10行表示するプログラムを作成せよ 0 01 012 0123 01234 012345 0123456 01234567 012345678 0123456789 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン:Visual C++ [3.3] 言語:C++ [4] 期限:2011/5/31
>>961 Q先生でいらっしゃいますか?
C++でC配列って、おじさんどうなの
966 :
940 :2011/05/20(金) 00:34:19.43
>>964 #include <stdio.h>
int main(void)
{
int i, j;
for(i = 0; i < 10; i++) {
for(j = 0; j <= i; j++) printf("%d", j);
putchar('\n');
}
return 0;
}
C++ならvectorとalgotithmのreverseもしくはreverse_iterator位使おうな◆QZaw55cn4c あ、C++が分からない硬い頭では無理か
>要素数を入力してください(10個まで):5 これを見て配列の要素数を1024にするバカに何を言ってもムダだろう
それから >[5] その他の制限:入出力関数を用いて解答すること。 と書いてあるのですが、C++で入出力関数が使われてないように見えますけど
コンテナである必要がなければ配列でもいいんじゃない 要素数1024はどうかと思うけど
C++「らしい」プログラムを書こうよ それから return 0; はmain()では不要ですよ
>>972 1行目は分かるが
2行目はナンクセかと
>>974 Qか?悔しいのか?std::cinとstd::coutはクラスだからcin.operator<<() と cout..operator>>() を
使っているわけだから入出力関数は使っていると言えるが、出来たら別関数にしてみなw
出来るか?
vector使えよ
逆だ逆 cin.operator>>() と cout.operator<<() しかしこれはメンバ関数だから、題意は多分自分で入出力用関数を作れという事だと思う
>>962 #include <stdio.h>
int main(){
int money = 10000;
int counter = 0;
while (money <= 15000)
{
money *= 1.01;
counter++;
}
printf("year = %d\n", counter);
return 0;
}
>>975 ごめん、他人
int main() {return 0;}
を
int main() {}
とする事で得られるものを
名無しにも分かるように説明してみ
979 :
885 :2011/05/20(金) 01:04:05.08
>>980 C++でゴルフ(笑)って事なら分かるけどそれはないわ
テンプレや補完使ってないの?
>>981 確かにタイプ量は減少してると思うが?
>>978 に対して「得られるもの」をちゃんと答えたぞ
文句あんのか
>>983 そんな事は最初聞いてなかったろ
後出しジャンケンは無視する
× C++でゴルフ(笑)って事なら分かるけどそれはないわ
○ C++でゴルフ(笑)って事なら分かるけどそれはないわな
>>984 >> タイプ量の減少
> テンプレや補完使ってないの?
>> 確かにタイプ量は減少してると思うが?
> テンプレや補完使ってないの?
>> 後出しジャンケンは無視する
時系列が・・・
>>986 ホンマモノですか
なんだか、ごめんなさい
◆QZaw55cn4cは糞だよなぁ
>std::vector<int>(va->rbegin(), va->rend()).swap(*va); これが気に入った
992 :
936 :2011/05/20(金) 09:57:22.23
>>993 ごめん間違えました
これは忘れてください
うめ
うめ
うめ
産め
卯女
誰か次スレお願いシマウマ
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。