C言語なら俺に聞け(入門篇) Part 16
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2007/07/10(火) 02:53:45・C++言語はスレ違いです。
・分からない事をなるべく詳しく書いて下さい。
・ソースコードを晒すと答えやすくなるかもしれません。
・質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。
前スレ
C言語なら俺に聞け(入門篇) Part 15
http://pc11.2ch.net/test/read.cgi/tech/1182719692/
教えて欲しいのではなく丸投げしたいならこちらへ
C/C++の宿題を片付けます 92代目
http://pc11.2ch.net/test/read.cgi/tech/1183511364/
0002デフォルトの名無しさん
2007/07/10(火) 02:54:21Part 1 ttp://pc8.2ch.net/test/read.cgi/tech/1146700389/
Part 2 ttp://pc8.2ch.net/test/read.cgi/tech/1153818463/
Part 3 ttp://pc8.2ch.net/test/read.cgi/tech/1160682950/
Part 4 ttp://pc8.2ch.net/test/read.cgi/tech/1162999861/
Part 5 ttp://pc8.2ch.net/test/read.cgi/tech/1165022193/
Part 6 ttp://pc10.2ch.net/test/read.cgi/tech/1167325490/
Part 7 ttp://pc10.2ch.net/test/read.cgi/tech/1170064980/
Part 8 ttp://pc11.2ch.net/test/read.cgi/tech/1171946674/
Part 9 ttp://pc11.2ch.net/test/read.cgi/tech/1173284217/
Part 10 ttp://pc11.2ch.net/test/read.cgi/tech/1174290325/
Part 11 ttp://pc11.2ch.net/test/read.cgi/tech/1176800483/
Part 12 ttp://pc11.2ch.net/test/read.cgi/tech/1178620766/
Part 13 ttp://pc11.2ch.net/test/read.cgi/tech/1179301993/
Part 14 ttp://pc11.2ch.net/test/read.cgi/tech/1181735298/
0003デフォルトの名無しさん
2007/07/10(火) 03:00:02まあ要するに x と足して 1 0000 0000 になる数だ。
これを負の数と定義すると、オーバーフローを無視してしまえば、
x + (-x) = 0000 0000 になるため都合がいい。
そのため、2の補数表現が好まれている。
1 0000 0000 - x がなぜ ~x + 1 という形で求められるかだが、
これは 1 0000 0000 = 1111 1111 + 1 であるから、
1111 1111 - x = ~x となり、
1 0000 0000 - x = ~x + 1 となるのだ。
1111 1111 - x = ~x が分からなければ、
何か具体的な例を使って実際にやってみるといい。
すぐ分かる。
0004デフォルトの名無しさん
2007/07/10(火) 03:07:39※バブルソート法については、参考書やインターネット等を利用して調べること。
できません。。。
わかりますか?
0005デフォルトの名無しさん
2007/07/10(火) 03:09:34ひー難しい、頭がぱんくしそうです
0006デフォルトの名無しさん
2007/07/10(火) 03:15:38int BubSort(int x[ ], int n);
void main(void);
int BubSort(int x[ ], int n)
{
int i, j, temp;
for (i = 0; i < n - 1; i++)
{
for (j = n - 1; j > i; j--)
{
if (x[j - 1] > x[j])
{
temp = x[j];
x[j] = x[j - 1];
x[j - 1]= temp;
}
}
}
}
今の現状です。。。見るも無残な姿です。。。
0007デフォルトの名無しさん
2007/07/10(火) 03:19:08小学生でも分かると思うぜ・・・
落ち着いて読めば分かるはずだ。
0008デフォルトの名無しさん
2007/07/10(火) 03:35:010009デフォルトの名無しさん
2007/07/10(火) 03:37:420010デフォルトの名無しさん
2007/07/10(火) 03:42:2810こ数字を入力するプログラムを
これにどう繋げればいいかわからなくて。。。
0011デフォルトの名無しさん
2007/07/10(火) 03:43:550012デフォルトの名無しさん
2007/07/10(火) 03:47:21「数字を10個入力してください」
見たいな感じなやつが出てきて、そこに10個数字入力してenter押したら結果が出てくるみたいなプログラム作るんですけど。。。
0013デフォルトの名無しさん
2007/07/10(火) 03:48:59#include <stdio.h>
#define MAX 10
void BubSort(int x[], int n) {
int i, j, tmp;
for (i = 0; i < n - 1; i++) {
for (j = n - 1; j > i; j--) {
if (x[j - 1] > x[j]) {
tmp = x[j];
x[j] = x[j - 1];
x[j - 1]= tmp;
} } } }
int main(void) {
int a[MAX],i;
for(i=0; i<MAX; i++) {
printf("%d 番目の数値 > ",i+1);
scanf("%d",&a[i]);
}
for(i=0; i<MAX; i++) printf("%d ",a[i]);
printf("\n");
BubSort(a,sizeof(a)/sizeof(a[0]));
for(i=0; i<MAX; i++) printf("%d ",a[i]);
printf("\n");
return 0;
}
0014デフォルトの名無しさん
2007/07/10(火) 03:51:36何がなんだか。。。これって初歩的なんですかね?
自分には天才にしか見えないんですけど。。。
0015デフォルトの名無しさん
2007/07/10(火) 03:55:30BubSort(a,MAX); < ここはMAXで良いや。配列の要素の数を入れるんだが
0016デフォルトの名無しさん
2007/07/10(火) 04:16:44連続投稿ですか?5回みたいな規制がかかって書けません!
そこのプログラムは変えても実行時に変化はないんですか?
0017デフォルトの名無しさん
2007/07/10(火) 04:33:100018デフォルトの名無しさん
2007/07/10(火) 04:37:17ありがとうございました!
ちゃんと調べて自分なりのプログラムもちゃんと作ります!!!
0019デフォルトの名無しさん
2007/07/10(火) 07:56:16void BubSort(int x[10], int n)
{
int i, j, tmp;
for (i = 0; i < n - 1; i++)
{
for (j = n - 1; j > i; j--)
{
if (x[j - 1] > x[j])
{
tmp = x[j];
x[j] = x[j - 1];
x[j - 1]= tmp;
}
}
}
}
0020デフォルトの名無しさん
2007/07/10(火) 07:57:48{
int a[10],b,i;
printf("10個の数字を入力してね!");
printf("\n");
for(i=0; i<10; i++)
{
printf("%d個目",i+1);
scanf("%d",&a[i]);
}
BubSort(a,10);
for(i=0; i<10; i++)
printf("%d ",a[i]);
printf("\n");
return 0;
}
授業で習っていない文字を省いて自分なりに出来ました!
ありがとうございました!
0021デフォルトの名無しさん
2007/07/10(火) 11:07:270022デフォルトの名無しさん
2007/07/10(火) 14:06:28main()
{
srand( (unsigned)time( NULL ) );
for(j= 0; j < 6;j++){
if(p==711) printf( " %d ", num[rand()%43] );
0023デフォルトの名無しさん
2007/07/10(火) 14:07:56main()
{
srand( (unsigned)time( NULL ) );
for(i= 0; i < 6;i++){
printf( " %d ", num[rand()%4] );
}
これでrandで同じ数字をかぶらないようにするにはどううすればいいでしょうか?
0024デフォルトの名無しさん
2007/07/10(火) 14:12:00実行するたびに要素減らして乱数の最大も減らしてけば?
0025デフォルトの名無しさん
2007/07/10(火) 14:19:41#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define MAX 4
int main(void) {
int a[MAX],i,pos,swp;
for(i=0; i<MAX; i++) a[i]=i+1;
srand((unsigned)time(NULL));
for(i=0; i<MAX; i++) {
pos=rand()%MAX;
swp=a[pos];
a[pos]=a[i];
a[i]=swp;
}
for(i=0; i<MAX; i++) printf("%d ",a[i]);
printf("\n");
return 0;
}
0026デフォルトの名無しさん
2007/07/10(火) 14:25:30#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define MAX 4
int main(void){
int i, r, num[MAX];
srand(time(NULL));
for(i=0;i<MAX;i++) num[i]=i+1;
for(i=0;i<MAX;i++){
r=rand()%(MAX-i);
printf("%d\n", num[r]);
num[r]=num[MAX-i-1];
}
return 0;
}
0027デフォルトの名無しさん
2007/07/10(火) 15:36:04ありりん^^
数字は1度ではなく何回か欲しいんです
これだと1回目が同じ数値になってしまうんですが
どこが間違っているのでしょか?
int num[]={ 2,3,9,6,92,4,27,4,6,7,1,98,7,8,1,3,0,51,35,13…}
int main()
{
int i,j;
int p=1,o,t=1;
int x[10]={0},y,s,k=0;
srand( (unsigned)time( NULL ) );
for( i = 0; i < 10000;i++ ){
for(j= 0; j < 10;j++){
while(t==1) {
o=num[rand()%25];
for(s= j; s> 0; s--){
if(x[s]==o) k=1;
}
if(k!=1) { x[j]=o; t=0;}
k=0;
}
printf( " %d ", x[j] );
t=1;k=0;
}
printf("\n");
p++;t=0;
}
}
0028デフォルトの名無しさん
2007/07/10(火) 15:55:58#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int num[]={ 2,3,9,6,92,4,27,24,6,17,11,98,7,8,13,23,0,51,35,1};
int main()
{
int i,j;
int p=1,o,t=1;
int x[10]={0},y,s,k=0;
srand( (unsigned)time( NULL ) );
for( i = 0; i < 100;i++ ){
for(j= 0; j < 10;j++){
while(t==1) {
o=num[rand()%20];
for(s= j; s> 0; s--){
if(x[s]==o) k=1;
}
if(k!=1) { x[j]=o; t=0;}
k=0;
}
printf( " %d ", x[j] );
t=1;k=0;
}
printf("\n");
p++;t=0;
}
}
0029デフォルトの名無しさん
2007/07/10(火) 16:26:58#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define swap(type,x,y) { type tmp=x; x=y; y=tmp; }
int num[]={ 2,3,9,6,92,4,27,24,6,17,11,98,7,8,13,23,0,51,35,1};
int num_sz=sizeof(num)/sizeof(num[0]);
int a[sizeof(num)/sizeof(num[0])];
int main(void) {
int i,j,pos;
int x[10]={0};
srand( (unsigned)time( NULL ) );
for( i = 0; i < 10; i++ ){
for(j=0; j<num_sz; j++) a[j]=num[j];
for(j=0; j<num_sz; j++) {
pos=rand()%num_sz;
swap(int,a[pos],a[j])
}
for(j= 0; j < 10;j++) {
x[j]=a[j];
printf( " %d ", x[j] );
}
printf("\n");
}
return 0;
}
0030デフォルトの名無しさん
2007/07/10(火) 16:44:49すごい出来てる
ありがとございます
でもswapで一体何をしているのかが分からない(><;
0031デフォルトの名無しさん
2007/07/10(火) 16:53:530032デフォルトの名無しさん
2007/07/10(火) 17:02:43 に変換?
0033デフォルトの名無しさん
2007/07/10(火) 17:11:190034デフォルトの名無しさん
2007/07/10(火) 17:12:090035デフォルトの名無しさん
2007/07/10(火) 17:14:51<pre>
ソースコードざんす
</pre>
って出るか、もしくは単にpreタグなんてシラネと無視されるっしょ
IEのエンジン借りてる専ブラのなら問題ないっしょ
0036デフォルトの名無しさん
2007/07/10(火) 17:21:47でないとなんのための専ブラなんだか。
0037デフォルトの名無しさん
2007/07/10(火) 17:26:580038デフォルトの名無しさん
2007/07/10(火) 17:34:25よそのブラウザでも似たような機能はあるんじゃないの?
0039デフォルトの名無しさん
2007/07/10(火) 18:37:480040デフォルトの名無しさん
2007/07/10(火) 20:04:17> すいませんマージソートの非再帰的なプログラムってどうすればいいですか?
マージソートの再帰ってそんなに深くならないはずだよね?
非再帰にする必要あるのかな
0041デフォルトの名無しさん
2007/07/10(火) 20:28:030042デフォルトの名無しさん
2007/07/10(火) 20:34:12スタックもケチりたいくらいワークエリアが狭いとか?
0043デフォルトの名無しさん
2007/07/10(火) 20:47:05非再帰にしづらいわけでもないと思うし、
どっちでもいいんじゃね?
0044デフォルトの名無しさん
2007/07/10(火) 21:46:330045デフォルトの名無しさん
2007/07/10(火) 22:11:19�@( )USBは多様な周辺機器と接続できるが,転送速度が遅いのでマウスやキーボードなどには適しているが,高速を要する外付け固定ディスクなどとの接続には不適切である。
�A( )PCとキーボードやマウスはPS/2やUSBポートで接続する。
�B( )PS/2やUSBにはホットプラグイン機能があるので、キーボードやマウスをこれらのポート差し込んだ時点で使用可能となる。
�C( )マウスにはボール式、光学式、レーザ式などがあるが、光学式が最も精度が高い。
�D( )CUIの代表的な入力装置はマウス、GUIの代表的な入力装置はキーボードである。
�E( )キーボードのキー構造として、メンブレン方式とパンタグラフ方式があり、ノートPCではパンタグラフ方式の採用が多い。
�Bて1じゃね?
0046デフォルトの名無しさん
2007/07/10(火) 22:12:190047デフォルトの名無しさん
2007/07/10(火) 22:15:46>PS/2
PS/2にホットプラグイン機能はない
0048デフォルトの名無しさん
2007/07/10(火) 23:10:48でもそれ以外は1だよね
0049デフォルトの名無しさん
2007/07/10(火) 23:15:391)USBは・・・転送速度が遅いので・・・外付け固定ディスクなどとの接続には不適切→2
2)1
4)詳しくないが 精度低<ボール式、光学式、レーザ式>精度高→たぶん2
5)CUI−キーボード、GUI−マウス→2
6)しらない
0050デフォルトの名無しさん
2007/07/11(水) 00:26:29int vc[200]={1};
for(j=0;j<200;j++) {
vc[j]=vc[j]*i;
vc[j]=vc[j]+temp;
temp=vc[j]/10;
vc[j]=vc[j]%10;
}
j=0のときは分るのですが、1からってどうなるのでしょうか?
005150
2007/07/11(水) 00:29:37下のは階乗を配列を用いて表示するプログラムの一部分なのですが、
#include <stdio.h>
int main(void)
{
int i,j;
int temp=0;
int vc[200]={1};
for(i=2;i<=100;i++) {
temp=0;
for(j=0;j<200;j++) {
vc[j]=vc[j]*i;
vc[j]=vc[j]+temp;
temp=vc[j]/10;
vc[j]=vc[j]%10;
}
j=0のときは分るのですが、1からってどうなるのでしょうか?
0052プロセス
2007/07/11(水) 02:31:02プロセスを学んでいく中で、有名な「食事をする哲学者」の問題が出されたのですが、そこにpipeを使わなければいけないんです↓
まず問題はこうです。
・pipeを用いて「食事をする哲学者」を具現
・哲学者の状態変化(eating,hungry,thinking)はrandom numberを利用
・ある哲学者がフォークを得るためには左右哲学者にrequest messageを送る
・フォークの状態変化は使用可否に依存、ただし、ある哲学者から他哲学者にフォークが転送されるときにはきれいになること(clean)を仮定
・使われたフォークは汚くなる
・他の哲学者からフォークの要求が到着すると次のような法則
・きれいなフォークを持ったときは渡さない
・もう使ったフォークを持ったときは渡す
・フォークが転送中にはフォークが向く哲学者に優先権がある
・フォーク及びrequest messageの転送は必ずpipeを利用
・哲学者をあらわす5個のプロセスとは別に状態変化を観察することができるモニタープロセスを置き、状態が変わるとレポティングする。このときにもpipeを利用
・注意、deadlockが発生しないようにする
という問題なんですが・・・C言語でどう書けばいいのでしょう(泣)
助けてくださぃ!
0053デフォルトの名無しさん
2007/07/11(水) 02:33:150054デフォルトの名無しさん
2007/07/11(水) 02:58:55517,120,000バイト→0.52GB, または 517,120,000/10243=0.48GB
どうして、こうなるのか、ちんぷんかんぷんです。
0055デフォルトの名無しさん
2007/07/11(水) 08:43:49517,120,000/(1024*1024*1024)≒0.48
0056デフォルトの名無しさん
2007/07/11(水) 08:48:310057デフォルトの名無しさん
2007/07/11(水) 11:13:47と>>57が申しております
0058デフォルトの名無しさん
2007/07/11(水) 11:56:05とかじゃねーの?
0059デフォルトの名無しさん
2007/07/11(水) 11:59:32俺も思った。特に
「半端な数字だけど、下位桁は0が並ぶ」ってあたり。
(んな小さいディスクもイマドキないけどもさ)
0060デフォルトの名無しさん
2007/07/11(水) 14:10:33っていう問題なんですけど、“エラトステネスのふるい”がどんなのかはわかったのですが、
どういう式をたてれば作れるのかはいまいちわかりません。。。
わかる方おしえてくれませんか?
0061デフォルトの名無しさん
2007/07/11(水) 14:17:07#include <stdio.h>
#include <math.h>
#define MAX 1000
int main(void) {
int prime[MAX],LIMIT,i,j,c;
for(i=1; i<=MAX; i+=2) prime[i]=1;
for(i=4; i<=MAX; i+=2) prime[i]=0;
LIMIT=(int)sqrt(MAX);
for(i=3; i<=LIMIT; i+=2) {
if(prime[i]==1) {
for(j=2*i; j<=MAX; j+=i)
prime[j]=0; } }
printf("%d ",2);
for(c=1,i=3; i<=MAX; i+=2) {
if(prime[i]==1) {
printf("%d ",i);
c++;
if(c==10) {
printf("\n");
c=0;
} } }
return 0;
}
0062デフォルトの名無しさん
2007/07/11(水) 14:21:28>>1 読め間抜け。
>>60
ttp://ja.wikipedia.org/wiki/%E3%82%A8%E3%83%A9%E3%83%88%E3%82%B9%E3%83%86%E3%83%8D%E3%82%B9%E3%81%AE%E7%AF%A9
これでも判らなきゃ、
>どんなのかはわかったのですが、
は気のせい。
答えだけ知りたいなら宿題スレ池。
0063デフォルトの名無しさん
2007/07/11(水) 14:23:56間抜けどころかバカはお前じゃ、詩ねよカス。何偉そうにしてんだ、お前?
おまえ何?ここのスレの主?一番偉い人?じゃなきゃ黙って引っ込んでろや、知ったかのクズ。
弱い犬ほどよく吠えるとはよく言ったもんだw
0064デフォルトの名無しさん
2007/07/11(水) 14:25:43なんだこいつ?頭おかしいんじゃね?そんなこといったら過去ログを見たら
間抜けだらけじゃん。お前が間抜けだってことに気づけよ、井の中の蛙w
0065デフォルトの名無しさん
2007/07/11(水) 14:26:59> これでも判らなきゃ、
m9(^д^)プププッ、プギャーーー!これはエラトステネスについてであってC言語のソースじゃねーしwwwwwww
バカで間抜けはお前じゃ、ボケが。偉そうに自治厨ぶっている割にはお前が一番アホだろ >>62
0066デフォルトの名無しさん
2007/07/11(水) 14:32:27ttp://ja.wikipedia.org/wiki/%E3%82%A8%E3%83%A9%E3%83%88%E3%82%B9%E3%83%86%E3%83%8D%E3%82%B9%E3%81%AE%E7%AF%A9
どう考えても↑はC言語についてではありません、ありがとうございますた。
> 答えだけ知りたいなら宿題スレ池。
だからC言語のソースで答えて良いじゃん、なんだこいつ?頭おかしいんじゃね?
それに、宿題じゃなきゃ宿題スレってのも、ねぇ・・・本当にお前日本語理解できている?
質問 = 宿題か?とりあえずお前はもう来なくて良い。ここ、お前が主体のスレじゃないから。
0067デフォルトの名無しさん
2007/07/11(水) 14:32:51このLIMITっていうのはどんなときに使うやつなんですか?
0068デフォルトの名無しさん
2007/07/11(水) 14:47:01ん〜〜細かい説明は面倒くさい。16までの素数を求める場合、16の正の平方根4*nで16以下のものを
篩い落とせば良い。nが平方根以上になっても、結局nが平方根以下までにとった値と同じになるだけだから
やるだけ無駄。
0069デフォルトの名無しさん
2007/07/11(水) 14:49:412以上、16の正の平方根4以下 * nね。偶数はもう無視して奇数*nを落としているけど。
0070デフォルトの名無しさん
2007/07/11(水) 14:56:06なんとなくわかりました!!!
とにかく無駄を省くためにLIMITは使ってあるってことでいいのでしょうか?汗
0071デフォルトの名無しさん
2007/07/11(水) 15:06:250072デフォルトの名無しさん
2007/07/11(水) 15:08:45n は当然2以上ね。for(j=2*i; j<=MAX; j+=i) < この部分がそれに該当しているんだが・・・
0073デフォルトの名無しさん
2007/07/11(水) 15:43:47なるほど。。。。
0074デフォルトの名無しさん
2007/07/11(水) 16:19:050075デフォルトの名無しさん
2007/07/11(水) 16:20:29>質問 = 宿題か?
>>1
>教えて欲しいのではなく丸投げしたいならこちらへ
>>66
>本当にお前日本語理解できている?
0076デフォルトの名無しさん
2007/07/11(水) 16:38:14さすがにそれはお前の勘違いだ、痛すぎ。反論したつもりが自分の理解力の無さを露呈しただけ。
失せろ。ここはお前が主のスレじゃねーんだから。あぁうぜぇ。答えたくないならお前が答えるなよ。
0077デフォルトの名無しさん
2007/07/11(水) 16:40:10え?お前あれが ○投げ であって 質問 じゃないとでも思ってるわけ?痛すぎ・・・バカだこいつ。
アホ○出し。お前、ほんっと日本語を理解していないだろ?っつか、日本語じゃないな。
相手を理解する能力がないだけだろ。良く言われるだろ、お前は協調性に欠けるって。
そんなんだから社会に適合せず、こんなところでも自分の勘違いをしてスレになじめないでいるんだよ。
頼むからお前が気に食わないからっていちいち間抜けとか煽ってこないでくれ。お前が間抜けじゃ。
0078デフォルトの名無しさん
2007/07/11(水) 16:42:20> わかる方おしえてくれませんか?
って書いてあるじゃん。んで>>1って
> 教えて欲しいのではなく丸投げしたいならこちらへ
教えてくれませんかって書いてあって、宿題の丸投げか?まぁ、人それぞれ受け止め方が違うとは言え
さすがに決め付け過ぎだろ。落ち着けよ、間抜けな引きこもり >>62 m9(^д^)
0079デフォルトの名無しさん
2007/07/11(水) 16:44:00いや、お前の場合エラトステネスについてであってC言語でどうソースを記述するかじゃないから、↓これは。
ttp://ja.wikipedia.org/wiki/%E3%82%A8%E3%83%A9%E3%83%88%E3%82%B9%E3%83%86%E3%83%8D%E3%82%B9%E3%81%AE%E7%AF%A9
お前痛すぎ。やっぱ日本語理解してないわ、このガキ。相手にするだけむなしいから
これ以上お前にレスせずにスルーするから。頼むから間抜けなお前に間抜けなんていわれたくないんで
お前が気に食わないってだけで噛み付いてこないでくれない?きめぇ
0080デフォルトの名無しさん
2007/07/11(水) 16:45:290081デフォルトの名無しさん
2007/07/11(水) 16:47:54ってどういう意味があるんですかね?
0082デフォルトの名無しさん
2007/07/11(水) 16:52:20過去ログ読んだらほとんどの人が間抜けになるじゃんか。
だいたい、質問者を自分より劣るもんだと思って罵倒する奴はこのスレにはいらねーって。
頼むからそういう見下す奴や、自分ルールで他人を不快に思うくらいならこんなスレに来るなって。
そんなことで苛立っている自分が間抜けに思えないのか?>>62 お前が一番恥ずかしい。
0083デフォルトの名無しさん
2007/07/11(水) 16:54:08停止するなよとかいちゃもんつけてきそうな基地外だな。前方不注意はほぼ100%
追突した側の過失だから。お前みたいな他人を邪魔者扱いする奴はここに来なくて良いよ。
はい、バイバイ。巣にお帰り。
0084デフォルトの名無しさん
2007/07/11(水) 16:54:23sin()
cos()
tan()
asin()
acos()
atan()
sinh()
cosh()
tanh()
exp()
log()
log10()
pow() べき乗
sqrt() 平方根
fabs() 絶対値
fmod()
このへん使いたい時にインクルードする
0085デフォルトの名無しさん
2007/07/11(水) 16:55:21お前が >>1 読め間抜け。
0086デフォルトの名無しさん
2007/07/11(水) 16:55:330087デフォルトの名無しさん
2007/07/11(水) 16:57:34(`・ω・´)
U θ U >>1 読め間抜け。
/ ̄ ̄�T ̄ ̄\
|二二二二二二二|
| |
パシャ パシャ パシャ パシャ パシャ パシャ パシャ パシャ パシャ パシャ
パシャ パシャ パシャ パシャ パシャ パシャ パシャ パシャ パシャ パシャ
∧_∧ ∧_∧ ∧_∧ ∧_∧ ∧_∧ ∧_∧
( )】 ( )】 ( )】 【( ) 【( ) 【( )
/ /┘ . / /┘. / /┘ └\ \ └\ \ └\ \
ノ ̄ゝ ノ ̄ゝ ノ ̄ゝ ノ ̄ゝ ノ ̄ゝ ノ ̄ゝ
0088デフォルトの名無しさん
2007/07/11(水) 16:58:550089デフォルトの名無しさん
2007/07/11(水) 16:59:20sqrtをプログラムで使うには書く必要があったわけですね!
なんか初歩的なことばっかでごめんなさい。。。
0090デフォルトの名無しさん
2007/07/11(水) 17:02:10エラスネロトスの篩の場合、sqrtは使わなくてもできるけどね
0091デフォルトの名無しさん
2007/07/11(水) 17:05:16ttp://www.bohyoh.com/CandCPP/C/Library/hindex.html
0092デフォルトの名無しさん
2007/07/11(水) 17:07:57どうすればいいんですかね?
0093デフォルトの名無しさん
2007/07/11(水) 17:10:32for(i=3; i<=LIMIT; i+=2) {
for(i=3; i*i<=MAX; i+=2) {
0094デフォルトの名無しさん
2007/07/11(水) 17:14:380095デフォルトの名無しさん
2007/07/11(水) 17:16:212n+1を使って工夫したってやぁ
0096デフォルトの名無しさん
2007/07/11(水) 17:20:26まだ#include <math.h>とかsqrtとか習ってないんでちょっと分からなかったんですよね。。。
0097デフォルトの名無しさん
2007/07/11(水) 17:24:24いやいや、理屈からしてMAXの平方根を取らないなら、二乗した値がMAX以下ってことにすりゃ良い
0098デフォルトの名無しさん
2007/07/11(水) 17:37:120099デフォルトの名無しさん
2007/07/11(水) 18:30:31そこまでは自乗チェック必要ないだろ。
0100デフォルトの名無しさん
2007/07/11(水) 18:36:150101デフォルトの名無しさん
2007/07/11(水) 18:37:43> 前の最大値を保存
激 し く 意 味 わ か ん ね っ
0102デフォルトの名無しさん
2007/07/11(水) 18:49:37二乗とsqrtは単純に回数で比較できないって話が前になかったっけ?
0103デフォルトの名無しさん
2007/07/11(水) 18:52:41お前が書いた >>62 を読め間抜け
0104デフォルトの名無しさん
2007/07/11(水) 18:57:44俺は横レスだがなw
>>101
前の数でふるいに使った素数の最大値(正確にはそのインデックス)を保存しておくだろ?
次の数はそれより大きいんだから、少なくともそこまでの素数でチェックしないといけないってのは、
自乗してチェックすることなく分かる。
あとはその次の素数でふるう必要があるかどうかを調べればいいだけだから、
毎回1回の自乗チェックで済む。
0105デフォルトの名無しさん
2007/07/11(水) 18:58:58for(i=3; i*i<=MAX; i+=2) < この i が33になった時点でループは止まる。
3から始まって2ずつインクリメントして33まで、i*i の回数なんて大したもんじゃない。
まぁ、数が大きくなりゃそれも増えるが、MAXの正の平方根を取るやり方で良いだろ。
さぁ、そろそろこの話はお開きにしようぜ。>>62がまたファビョると困るから。
0106デフォルトの名無しさん
2007/07/11(水) 19:00:18横レス?モロに>>62だってバレてんすけど?あぁ痛々しい。自分で勝手に丸投げだと思って
>>1にある他のスレに誘導したくせに、>>61のソースに対する質問に答えてやんの。白々しいぜ、こいつ。
0107デフォルトの名無しさん
2007/07/11(水) 19:02:09いや、お前の理論はソースで形にして説明してくれ。多分お前の勘違い。
っつーかあのソースの仕組みが分かってないみたいだし。
0108デフォルトの名無しさん
2007/07/11(水) 19:11:40素数を順番に生成していく形のプログラムにしてるのかと思ったら、
表から斜線で消していくような形のプログラムにしてたんだな。
それなら俺のやり方は無理だな。
0109デフォルトの名無しさん
2007/07/11(水) 19:13:450110デフォルトの名無しさん
2007/07/11(水) 19:32:08011154
2007/07/11(水) 20:23:35>>55
わかりましたが
517,120,000バイト→0.52GB, どうして、こうなるのでしょうか?
011254
2007/07/11(水) 20:25:12"0243は1024の3乗のことか。
517,120,000/(1024*1024*1024)≒0.48" は、
どうやって逆算と言うか求めたのでしょうか?
>>56
休憩欄に書いてありました・・・
0113デフォルトの名無しさん
2007/07/11(水) 20:41:391,073,741,824(= 1,024の3乗)バイトとする場合もある。
それだけの話だ。
0114デフォルトの名無しさん
2007/07/11(水) 22:43:03ヒントだけでももらえないでしょうか。
次のプログラムに正の整数の引数p,q(0<p≦q)を与えた時、
無限ループに入らず必ずプログラムが終了することを示しなさい
#include<stdio.h>
void calc(int m,int n){
int a;
printf("%d/%d = ",m,n);
while(n % m !=0){
a = 1 + n/m;
printf("1/%d + ",a);
m= m * a - n;
n= n * a;
}
printf("1/%d\n",n/m);
}
int main(){
int p,q;
scanf("%d %d",&p,&q);
calc(p,q);
return 0;
}
0115デフォルトの名無しさん
2007/07/11(水) 22:50:080116デフォルトの名無しさん
2007/07/11(水) 23:20:52ループ内においてm * a - n は、常にmより小さくなるので、
最終的にはn % mは必ず0になりループを抜ける。
0117デフォルトの名無しさん
2007/07/12(木) 00:17:08せいぜい算術程度かなと
>>116
恐らくmが最終的に1になるんだろうと思ってたんですけど詰まって間違いかな〜と
とか考えて解き直したら解けました。
ループ後のmの値は
m'=(m-n)+m|n/m| (1)=m((1-n/m) + |n/m|)
=m(1 + |n/m| - n/m)
n>mより
0<n/m-|n/m|<1(| |はガウスの記号)
試験では(1)で詰まって後はn>mより自明って事で済ましてました。
点がもらえるか微妙・・・
ありがとうございました
0118デフォルトの名無しさん
2007/07/12(木) 00:49:33でn % m != 0 のとき 0< n % m < m だから途中で割り切れなくても最終的には1になる。
0119デフォルトの名無しさん
2007/07/12(木) 14:45:120120デフォルトの名無しさん
2007/07/12(木) 14:55:42Javaもreturnはあるだろ?
0121デフォルトの名無しさん
2007/07/12(木) 14:56:14Javaの「return 0;」と同じ。
0122デフォルトの名無しさん
2007/07/12(木) 15:10:550123デフォルトの名無しさん
2007/07/12(木) 18:53:39数字と文字がたくさん書かれているんだけど
そのファイルから数字だけを取り出すプログラムを作りたいんだけど
0124デフォルトの名無しさん
2007/07/12(木) 18:58:160125デフォルトの名無しさん
2007/07/12(木) 18:58:360126デフォルトの名無しさん
2007/07/12(木) 21:17:44AAAA BBBBBB CCCCCCCC
11111111 2222222222 3333333
を作って読み込んで
AAAA
BBBBBB
CCCCCCCC
11111111
2222222222
3333333
となるプログラムを作成せよ。
0127デフォルトの名無しさん
2007/07/12(木) 21:26:370128デフォルトの名無しさん
2007/07/12(木) 21:34:200129デフォルトの名無しさん
2007/07/12(木) 21:44:320130デフォルトの名無しさん
2007/07/12(木) 22:50:51口のききかたら偉そうだから教えてあげない。
0131デフォルトの名無しさん
2007/07/12(木) 22:55:39あまりに簡単な問題だから聞くのが恥ずかしかったんです・・・
明日までに解決したかったんですが、あきらめます。
すみませんでした。
0132デフォルトの名無しさん
2007/07/13(金) 02:18:03#include <math.h>
#define MAX 1000
int main(void) {
int prime[MAX],LIMIT,i,j,c;
for(i=1; i<=MAX; i+=2) prime[i]=1;
for(i=4; i<=MAX; i+=2) prime[i]=0;
LIMIT=(int)sqrt(MAX);
for(i=3; i<=LIMIT; i+=2) {
if(prime[i]==1) {
for(j=2*i; j<=MAX; j+=i)
prime[j]=0; } }
printf("%d ",2);
for(c=1,i=3; i<=MAX; i+=2) {
if(prime[i]==1) {
printf("%d ",i);
c++;
if(c==10) {
printf("\n");
c=0;
} } }
return 0;
}
上にあるこのプログラムの
for(i=3; i<=LIMIT; i+=2) {
if(prime[i]==1) {
for(j=2*i; j<=MAX; j+=i)
prime[j]=0; } }
を詳しく解説してくれる方いたらお願いします。
0133デフォルトの名無しさん
2007/07/13(金) 02:26:010134デフォルトの名無しさん
2007/07/13(金) 02:29:130135デフォルトの名無しさん
2007/07/13(金) 02:29:52c言語あまり詳しくないので
for(j=2*i; j<=MAX; j+=i)
がどういう計算をしているのかわかんないんです。。。
0136デフォルトの名無しさん
2007/07/13(金) 02:30:330137デフォルトの名無しさん
2007/07/13(金) 02:35:47次に 3*2 3*3 3*4.....て計算して
次に 5*2 5*3 5*4.....見たいな感じで計算してるんですか?
0138デフォルトの名無しさん
2007/07/13(金) 02:39:030139デフォルトの名無しさん
2007/07/13(金) 02:41:15for(j=2*i; j<=MAX; j+=i) の式で
なんでこういう計算が出来るのかが分からないんです(泣)
0140デフォルトの名無しさん
2007/07/13(金) 02:44:08ヘッダファイルをincludeするというのは分かりますが
ヘッダには宣言しか書かれていませんよね。
定義はどこにあるんですか?
定義について何も書いてないのに
何故勝手に読み込んで組み込んでいるのかが分かりません
0141デフォルトの名無しさん
2007/07/13(金) 02:50:23おおざっぱでもちろん構わないので教えていただけないでしょうか?
もしlinux等スレ違いでしたらご指摘ください。
コマンドソースは以下のものです
ttp://sourcejam.com/jp/fileutils-4.1/rm_8c-source.html
宜しくお願いします。
0142デフォルトの名無しさん
2007/07/13(金) 03:24:25定義はすでにコンパイル済みのバイナリの中にある(.lib形式とか)。
リンク時にこいつを一緒にリンクしてる。
.dllの場合は実行時にリンクっぽいことをする。
>>141
mainの最初のwhileでオプションのパース、
次のifで引数の個数の確認っぽいこと、
最後のforで指定された各ファイルの消去、といった感じかな
0143デフォルトの名無しさん
2007/07/13(金) 03:49:18勉強になりました!
ありがとうございましたm(__m
0144141=143
2007/07/13(金) 03:50:30解決の有無を明確にしたほうがよいかと思いまして。
ありがとうございました!
0145デフォルトの名無しさん
2007/07/13(金) 16:32:41こういう略してある語の元の単語が載ってるサイトってないですかね?
探してもこの2つしかわからなくて
0146デフォルトの名無しさん
2007/07/13(金) 16:51:07マルチかよ糞が。
0147147
2007/07/13(金) 17:17:32型を工夫するだけで解決可能ですか?それとも他の方法が必要ですか?
0148デフォルトの名無しさん
2007/07/13(金) 17:18:39たとえば
1234567890
のように入力すると
1,234,567,890
のように表示して
小数の場合は整数部分のみ
12345.6789
12,345.6789
このように編集する感じです。アルゴリズムをおしえてほしいです
0149デフォルトの名無しさん
2007/07/13(金) 17:25:19ANSI C言語辞典買えよ
いろいろ乗ってる
0150デフォルトの名無しさん
2007/07/13(金) 17:44:19forループで3文字毎にカンマぶち込むだけだろ。
小数点以下は好きなようにやれ。
0151デフォルトの名無しさん
2007/07/13(金) 17:46:342回目でコピーしながらカンマを入れてみては
0152デフォルトの名無しさん
2007/07/13(金) 17:51:15unsignedにすればlongでもオーバーフローしないだろ?
もったいない使い方だが
0153デフォルトの名無しさん
2007/07/13(金) 17:53:510154デフォルトの名無しさん
2007/07/13(金) 18:04:14配列の要素数を十分に確保しとけばいいだけだよな
0155デフォルトの名無しさん
2007/07/13(金) 18:08:46いや%nじゃないだろw
0156デフォルトの名無しさん
2007/07/13(金) 18:10:020157147
2007/07/13(金) 19:01:250158デフォルトの名無しさん
2007/07/13(金) 19:07:11なんで5桁の10進数でそんなことになるんだ
0159デフォルトの名無しさん
2007/07/13(金) 19:10:480160デフォルトの名無しさん
2007/07/13(金) 19:26:46char配列がいいんじゃない?
0161デフォルトの名無しさん
2007/07/13(金) 19:58:00どうか調べるプログラムを作成したいんですけどアルゴリズムを教えてほしいです。
プログラムを実行すると,まず,ファイル名を2つ入力する.入力したファイ
ル名のファイルの始めから終わりまでを読み出したものを比較して同じであっ
たら"same",違っていた場合は"not same"と表示してプログラムを終了する.
ファイルが開けない場合は、"cannot open file"と表示して終了すること
0162デフォルトの名無しさん
2007/07/13(金) 20:01:090163デフォルトの名無しさん
2007/07/13(金) 20:05:080164161
2007/07/13(金) 20:16:43思ったんですけどうまくいきません。もしよければアドバイスお願いします
#include <stdio.h>
int main(void){
FILE *fin,*fout;
char sfn1[80],sfn2[80];
char c1,c2;
scanf("%s",sfn1);
scanf("%s",sfn2);
if((fin=fopen(sfn1,"r"))==NULL || (fout=fopen(sfn2,"r"))==NULL){
printf("cannot open file\n");
return -1;}
while((c1=fgetc(fin))!=EOF && (c2=fgetc(fout))!=EOF){
if(c1!=c2){
printf("ちがう\n");
break;}
if((c1=fgetc(fin))==EOF && (c2=fgetc(fout))==EOF){
printf("おなじ\n");
break;}}
fclose(fin);
fclose(fout);
return 0;}
0165デフォルトの名無しさん
2007/07/13(金) 20:27:59文字が一致しなかったらフラグでも立ててbreak、その後フラグを見て表示を変えればいいだけだろ
初心者ならフローチャートでも書いてからプログラム作れよ。
勘で作るからそんな意味不明なプログラムができるんだよ
0166161
2007/07/13(金) 20:29:290167デフォルトの名無しさん
2007/07/13(金) 20:37:45やれやれ、説教するだけでまともに答えられない初心者か。お前みたいなのがうざいんだよ。
ほれ >>62 とかぁ〜w
0168デフォルトの名無しさん
2007/07/13(金) 20:41:42君が答えてもいいんだよ
0169デフォルトの名無しさん
2007/07/13(金) 20:45:56#include <stdio.h>
#define BUF_MAX 256
int main(void){
FILE *fin,*fout;
char sfn1[80],sfn2[80];
unsigned char c1[BUF_MAX],c2[BUF_MAX];
int nc1,nc2,i,flg=1;
scanf("%s",sfn1);
scanf("%s",sfn2);
if((fin=fopen(sfn1,"rb"))==NULL || (fout=fopen(sfn2,"rb"))==NULL){
printf("cannot open file\n");
return -1;}
while( ((nc1=fread(c1,sizeof(char),BUF_MAX,fin))>0) && ((nc2=fread(c2,sizeof(char),BUF_MAX,fout))>0) ){
if(nc1==nc2) {
for(i=0; i<nc1 ; i++)
if(c1[i]!=c2[i]){
flg=0; break;} }
else { flg=0; break; } }
if(flg) printf("おなに\n");
else printf("ちがう\n");
fclose(fin);
fclose(fout);
return 0;}
0170デフォルトの名無しさん
2007/07/13(金) 20:52:480171デフォルトの名無しさん
2007/07/13(金) 20:56:17while( ((nc1=fread(c1,sizeof(char),BUF_MAX,fin))>0) && ((nc2=fread(c2,sizeof(char),BUF_MAX,fout))>0) ){
while( ((nc1=fread(c1,sizeof(char),BUF_MAX,fin))>0) || ((nc2=fread(c2,sizeof(char),BUF_MAX,fout))>0) ){
0172デフォルトの名無しさん
2007/07/13(金) 20:56:22最低最悪な変数名の例だな。
0173デフォルトの名無しさん
2007/07/13(金) 20:59:330174デフォルトの名無しさん
2007/07/13(金) 21:01:06>>171をやったらやっぱ駄目だったっけ。っつか面倒だから>>169で。
0175デフォルトの名無しさん
2007/07/13(金) 21:09:07whileループの中でEOFの判定なんかしちゃだめだろ。
0176デフォルトの名無しさん
2007/07/13(金) 21:17:59#include <stdio.h>
int main(void){
FILE *fp1,*fp2;
char sfn1[80],sfn2[80];
char c1,c2;
int nc1,nc2,flg=1;
scanf("%s",sfn1);
scanf("%s",sfn2);
if((fp1=fopen(sfn1,"rb"))==NULL || (fp2=fopen(sfn2,"rb"))==NULL){
printf("cannot open file\n");
return -1;}
do {
nc1=fread(&c1,1,1,fp1);
nc2=fread(&c2,1,1,fp2);
if(c1!=c2){ flg=0; break;}
}while( !(nc1==0 || nc2==0) );
if(flg) printf("おなに\n");
else printf("ちがう\n");
fclose(fp1);
fclose(fp2);
return 0;}
0177デフォルトの名無しさん
2007/07/13(金) 23:31:01fgetc()の戻り値はcharではなく、intでないとだめです。というのも
charとかunsigned charでは0xFFとEOFが区別できないからです。
あとwhile()でEOF判定をしているので、ループの外では
if (c1 == EOF && c2 == EOF)
printf("same¥n");
else
printf("not same¥n");
0178デフォルトの名無しさん
2007/07/14(土) 01:27:340179デフォルトの名無しさん
2007/07/14(土) 01:30:020180デフォルトの名無しさん
2007/07/14(土) 01:30:23i = 5;
printf("%d\n", i++); // 出力:5
printf("%d\n", i); // 出力:6
i = 5;
printf("%d\n", ++i); // 出力:6
printf("%d\n", i); // 出力:6
0181デフォルトの名無しさん
2007/07/14(土) 01:31:40int i = 0,j = 0,n;
n = 1;
i = ++n;
n = 1;
j = n++;
printf("i = %d\n",i);
printf("j = %d\n",j);
とりあえずこんな感じで動作を比べて見るとわかりやすいと思う
0182デフォルトの名無しさん
2007/07/14(土) 01:32:02式の結果としては、前置だとインクリメント後の値になり、
後置だとインクリメント前の値になる。
#include <stdio.h>
int main(void)
{
int i = 0; j = 0;
printf("%d %d\n", i, j);
printf("%d %d\n", ++i, j++);
printf("%d %d\n", i, j);
return 0;
}
0183デフォルトの名無しさん
2007/07/14(土) 01:33:51やってみました。
1
2 #include <stdio.h>
3
4 int
5 main(void)
6 {
7 int i,j;
8 i=0;
9 j=0;
10 printf("i :%d\n",i);
11 i++;
12 printf("i++:%d\n",i);
13 printf("j :%d\n",j);
14 ++j;
15 printf("++j:%d\n",j);
16 return 0;
17 }
i :0
i++:1
j :0
++j:1
うう、、どうしてでしょう。。
0184デフォルトの名無しさん
2007/07/14(土) 01:38:32レス早すぎ\(^0^)/
0185デフォルトの名無しさん
2007/07/14(土) 01:38:58もしかしたら内部的に違いがでるかもしれないが、気にしなくていいレベル
0186デフォルトの名無しさん
2007/07/14(土) 01:39:21その位置でインクリメントしても差は出るわけないだろ。
0187デフォルトの名無しさん
2007/07/14(土) 01:40:450188デフォルトの名無しさん
2007/07/14(土) 01:40:48printf()の外でi++とかやっても…
i = 1;
n = i; // nに1が入る
i = 1;
n = i++; // nに1が入って、iは2になる
i = 1;
n = ++i; // nに2が入って、iは2になる
0189デフォルトの名無しさん
2007/07/14(土) 01:42:17i++;
i = 1;
++i;
この場合(単独で使った場合)は、iが2になるだけで、どちらも差がない。
0190デフォルトの名無しさん
2007/07/14(土) 02:13:37(__)
\(__)/ ウンコー!
( ・∀・ )
 ̄ ̄ ̄
0191デフォルトの名無しさん
2007/07/14(土) 05:16:48C言語が得意な方にお聞きしたいのですが、どのような学習方法が効果的なのでしょうか。
ちなみに当方の頭の中身は基本情報処理の午前だけでも
8〜9割程度はとれるかどうかのトホホレベルです。。。
0192名無し
2007/07/14(土) 05:36:39ここの「ファイル入出力」ってやつわかりません
助けてください お願いします
0193デフォルトの名無しさん
2007/07/14(土) 07:53:20ちなみにここは「こども110番の家」じゃないので悪しからず
0194デフォルトの名無しさん
2007/07/14(土) 08:48:10#include <stdio.h>
int main(void) {
FILE *fp1,*fp2;
char sfn1[80],sfn2[80],c1,c2,flg=1;
scanf("%s",sfn1); scanf("%s",sfn2);
if((fp1=fopen(sfn1,"rb"))==NULL || (fp2=fopen(sfn2,"rb"))==NULL){
printf("cannot open file\n"); fclose(fp1); fclose(fp2);
return -1;}
while( (c1=fgetc(fp1))!=EOF && (c2=fgetc(fp2))!=EOF ) {
if(c1!=c2){ flg=0; break;} }
if(flg) printf("オナジー\n");
else printf("ちがう\n");
fclose(fp1); fclose(fp2);
return 0;}
0195デフォルトの名無しさん
2007/07/14(土) 10:42:21[2] 問題文(含コード&リンク):次のプログラムは、式を入力すると計算結果を表示するプログラムであるが、
誤っている点があります。現在の内容を理解し、誤りを訂正してコメントをつけてください。
#include <stdio.h> #include <stdlib.h> #include <ctype.h>
char *p; char c[100]; int expression(void); int term(void);
int number(void); main(){ int ans; while(1){
printf("Enter expression : "); fgets(c,90,stdin); p=&c;
if(*p == '\n') break; ans = expression();
printf("Answer:%d\n", ans); } } int expression(){ int ans;
ans = term(); while(1){ if(*p == '+'){
ans = ans + term(); }else if(*p == '-'){
ans = ans - term(); }else break; }
return(ans); } int term(){
int ans,x; ans = number();
while(1){ if(*p == '*'){
ans = ans * number(); }else if(*p == '/'){
x = number(); if(x == 0){
printf("Division by 0\n"); exit(1); }
ans = ans / x; }else break; }
return(ans); } int number(){
int i=0; while (isdigit(*p)){
i=i*10+(*p++)-48;} return(i); }
[3] 環境
[3.1] OS: Windows [3.2] gcc 3.4 [3.3] 言語: C言語
[4] 期限: 2007/7/17 改行が多すぎて、乗せられなかったためこんな形になりますた。すみません。宜しくお願いします。
0196デフォルトの名無しさん
2007/07/14(土) 10:50:500197デフォルトの名無しさん
2007/07/14(土) 10:51:28誤爆だよね?うpロダ使って出直して下さい
0198デフォルトの名無しさん
2007/07/14(土) 11:13:36str[i++] = 'a';
↓
str[i] = 'a';
i += 1;
str[++i] = 'a';
↓
i += 1;
str[i] = 'a';
前に足されるか後に足されるかの違い
0199デフォルトの名無しさん
2007/07/14(土) 15:10:070200デフォルトの名無しさん
2007/07/14(土) 15:14:110201デフォルトの名無しさん
2007/07/14(土) 15:14:140202デフォルトの名無しさん
2007/07/14(土) 15:17:110203デフォルトの名無しさん
2007/07/14(土) 17:53:202, char str[] = "memory"; *p = "memory" ; におけるstrとpの本質的な
違いを教えてください
お願いします。
0204デフォルトの名無しさん
2007/07/14(土) 17:59:28#include <stdio.h>
int main(void) {
char str[] = "memory", *p = "memory";
printf("%d %d \n",sizeof("z"),sizeof('z'));
printf("%d %d \n",sizeof(str),sizeof(p));
return 0;
}
0205デフォルトの名無しさん
2007/07/14(土) 18:57:50int i.j;
処理;
free(&i);
free(&j);
}
二次元配列に操作をする関数で、関数の終わりに不要になった
制御変数i,jをfreeしたいと思ってこのように書いたら、エラーになりました。
なぜエラーになるのか教えてほしいです。
ちなみにfreeが1つならエラーにはなりませんでした。
私のイメージでは単に&iでiのポインタを渡したらそこの分だけfreeしてくれる
と思ってたのですが、もしかするといっぺんにfreeしてしまうのでしょうか。
あともしかして、再帰的でなければこのようなfreeは不要ですか?
よろしくお願いします。
0206デフォルトの名無しさん
2007/07/14(土) 19:01:37ローカル変数のポインタなんて渡しちゃダメ。
この場合はfreeなんて必要ない。
0207デフォルトの名無しさん
2007/07/14(土) 19:12:05これは新しい。
0208デフォルトの名無しさん
2007/07/14(土) 19:18:27さすがに変数に使うメモリ空間は自動的に管理してくれるよ^^;
0209デフォルトの名無しさん
2007/07/14(土) 22:09:54ありがとうございました。
0210デフォルトの名無しさん
2007/07/15(日) 01:06:41ありがとうございます。
もし、
void abc(引数){
int i.j;
処理;
abc(引数);
後続処理;
}
のような場合で、後続処理にi,jが不要で再起前に開放したいと思ったら
i,jをmallocで確保するしかないということでしょうか?
またローカル変数のポインタを渡してはならないとありますが、
int iにおける&iをローカル変数のポインタとすると、
int *iにおけるiは、なんという名称になるのでしょうか?
>>208
ありがとうございます。
変数に使うメモリ空間は自動的に管理してくれるとありますが、
ということはfreeは変数以外に用いるということでしょうか?
よろしくお願いします。
0211デフォルトの名無しさん
2007/07/15(日) 01:10:390212デフォルトの名無しさん
2007/07/15(日) 01:17:300213デフォルトの名無しさん
2007/07/15(日) 01:40:07int *iにおけるiはローカル変数かつint型のポインタ変数
ポインタとポインタ変数を混同しているな。
アドレスとポインタ変数に言い換えた方がわかりやすいかもな。
あとヒープとスタックについて調べてみな。
0214デフォルトの名無しさん
2007/07/15(日) 02:09:04>>210
i, jが関数の途中で不要になるから解放したいなんてことは
C言語の常識ではやらないし、考える必要もないよ。
関数終了時に勝手に消えてくれるんだから。
解放を考える必要があるのはmallocつかったときだけ。
0215デフォルトの名無しさん
2007/07/15(日) 02:13:20mallocで確保してfreeするのもありかも知れないが、
i,jがint程度ならそんなことを心配するのは無駄だよ。
0216デフォルトの名無しさん
2007/07/15(日) 02:23:110217デフォルトの名無しさん
2007/07/15(日) 02:23:390218デフォルトの名無しさん
2007/07/15(日) 02:28:480219デフォルトの名無しさん
2007/07/15(日) 03:07:100220デフォルトの名無しさん
2007/07/15(日) 09:37:50自分はvalgrindでプログラム終了時のmallocとfreeの数を一致させようといつも非常に苦労するのですが
皆さんはこれどうしてますか?リークを0にするための工夫とかコツとかあったら是非ご教示下さい。
0221デフォルトの名無しさん
2007/07/15(日) 10:04:220222デフォルトの名無しさん
2007/07/15(日) 10:07:390223デフォルトの名無しさん
2007/07/15(日) 10:07:490224デフォルトの名無しさん
2007/07/15(日) 10:08:330225デフォルトの名無しさん
2007/07/15(日) 10:12:15メモリの確保/開放が必要な処理は必ず部品化しておく。
0226デフォルトの名無しさん
2007/07/15(日) 10:15:45基本的にmallocを呼び出した関数でfreeする
それが出来ない場合には、malloc、freeをラップした関数を作って
新たに作成したそれぞれの関数を同じ関数内で呼び出すようにする
※但し、あくまで原則。ソースコードがややこしくならない範囲で。
0227デフォルトの名無しさん
2007/07/15(日) 10:17:24こんな奴のプログラムはまともに動かないと相場が決まってる
0228デフォルトの名無しさん
2007/07/15(日) 10:18:54こいつはひでぇ。こいつの作ったプログラムだけは使いたくない
0229デフォルトの名無しさん
2007/07/15(日) 10:28:32exit前のfree論争とその本質すら知らないコドモばっか
0230デフォルトの名無しさん
2007/07/15(日) 10:30:150231デフォルトの名無しさん
2007/07/15(日) 10:30:150232デフォルトの名無しさん
2007/07/15(日) 10:30:53newとdeleteと回数が一致しない、「メモリプール」というやり方について書かれているよ。
読んだことがない人ばかりみたいだけど。
0233本日の最高のお馬鹿さん
2007/07/15(日) 10:33:25プログラム終了時は全確保メモリが開放されるのに、何をこだわってるの?
0234デフォルトの名無しさん
2007/07/15(日) 10:38:33それは、言わば応用。
確保して解放するという
基本をないがしろにしてよいものではない。
0235デフォルトの名無しさん
2007/07/15(日) 10:39:180236デフォルトの名無しさん
2007/07/15(日) 10:41:240237デフォルトの名無しさん
2007/07/15(日) 10:42:25どの書き込みを書いたのが誰なのか、とか
自分の意見と違う書き込みをするのは一人に違いない、とか。
0238なんかこいつ妄想はじめたみたいだぞ?
2007/07/15(日) 10:46:10なんか、他人には見えないものが見えている人がいるみたい。
どの書き込みを書いたのが誰なのか、とか
自分の意見と違う書き込みをするのは一人に違いない、とか。
0239220
2007/07/15(日) 10:46:43私も>>226みたいにやりたいのですがそうも出来ないことも多いですよね。
OSSでもvalgrindした結果(malloc - free)が0にならないものが非常に多いので少し疑問になりましたので
聞いてみました。これからもできるかぎり拘っていきたいと思います。
0240デフォルトの名無しさん
2007/07/15(日) 10:46:45自分は新参だから見たことない
その論争見たい
0241デフォルトの名無しさん
2007/07/15(日) 10:48:20誰もわかる人が居ないから参考になるレスが無くてすまんね
0242デフォルトの名無しさん
2007/07/15(日) 10:48:57日ごろ自分が来ていないのを理由に、自分が理解されないことを
周りが子供だとか言い出すアホは放置しとけ。>>221で最高にアホだと判明してんだからw
0243デフォルトの名無しさん
2007/07/15(日) 10:55:01mallocのラッパの中からはポインタの位置と確保したサイズをまとめてリストに足していき、
freeのラッパの中からはそのリストから直前にfreeしたエントリを削除していく、
んで最後にはmallocされてfreeされてないエントリだけが残るから
そのエントリが持ってるポインタ位置を片っ端からprintfみたいな表示関数にかけると
どんなデータをmallocしたのがfreeされてないかわかるから良いかな
みたいなことを考えたのですがreallocとかあるとちょっとメンドイしな。。。
0244デフォルトの名無しさん
2007/07/15(日) 10:59:05Javaとかで使われるGCのアルゴリズムを勉強すればいいかもしらん
いや自分は知らないけどなんとなくそう思った
0245デフォルトの名無しさん
2007/07/15(日) 11:14:050246デフォルトの名無しさん
2007/07/15(日) 11:15:430247デフォルトの名無しさん
2007/07/15(日) 11:18:11こんな感じで作れるよ
#ifdef MEMDEBUG
#define malloc(size) memdebug_malloc(__FILE__, __FUNCTION__, __LINE__, size)
#define calloc(size) memdebug_calloc(__FILE__, __FUNCTION__, __LINE__, size)
#define realloc(ptr, size) memdebug_realloc(__FILE__, __FUNCTION__, __LINE__, ptr, size)
#define strdup(ptr) memdebug_strdup(__FILE__, __FUNCTION__, __LINE__, ptr)
#define free(ptr) memdebug_free(__FILE__, __FUNCTION__, __LINE__, ptr)
#define malloc_chk() memdebug_check()
#else
#define malloc_chk()
#endif
0248デフォルトの名無しさん
2007/07/15(日) 11:22:390249デフォルトの名無しさん
2007/07/15(日) 11:35:27ありがとうございます。
__FUNCTION__とか__LINE__はあると助かりますね。
0250デフォルトの名無しさん
2007/07/15(日) 11:36:24ttp://sanabo.com/words/archives/2004/09/post_791.html
0251デフォルトの名無しさん
2007/07/15(日) 11:42:53今までmalloc-free論争の話は出てないようだった。
freeした後のポインタは必ずNULLすべきだ って話は
9スレ目にあって、ちょっと面白かったけど。
>>250
ttp://sanabo.com/words/archives/2004/09/post_791.html
0252デフォルトの名無しさん
2007/07/15(日) 11:47:140253デフォルトの名無しさん
2007/07/15(日) 11:47:460254デフォルトの名無しさん
2007/07/15(日) 11:49:090255デフォルトの名無しさん
2007/07/15(日) 11:50:51ソースを
0256デフォルトの名無しさん
2007/07/15(日) 12:00:56#define myfree(p) do {free((p)); (p) = NULL;} while(0)
freeの後のNULLの件に関しては皆さんこんなことしてます?
0257デフォルトの名無しさん
2007/07/15(日) 12:01:17「site:2ch.net free malloc 必要」でググってみるとか。
0258デフォルトの名無しさん
2007/07/15(日) 12:01:26malloc-free論争とやらが出た瞬間にコジコジを消沈させるような
完璧な答えのテンプレを作ってくれよ
0259デフォルトの名無しさん
2007/07/15(日) 12:02:560260デフォルトの名無しさん
2007/07/15(日) 12:03:34NULLじゃなくて、0xcc…とか入れたほうがいいよ。
0261デフォルトの名無しさん
2007/07/15(日) 12:04:21早く俺を黙らせてくれよ
0262デフォルトの名無しさん
2007/07/15(日) 12:04:290263デフォルトの名無しさん
2007/07/15(日) 12:04:56って書くなら根拠も書いてよいじわるー!
0264デフォルトの名無しさん
2007/07/15(日) 12:05:28基本的にはみんなmallocしたものはfreeしなければダメと思ってるんじゃない?
Java儲/スクリプト儲には縁のない、面倒臭いけどC厨のこだわりどころだよな。
0265デフォルトの名無しさん
2007/07/15(日) 12:08:17苦労するくらいならとっととこの世から去った方が良いよ 理由:どうせいつかは死ぬんだし
0266デフォルトの名無しさん
2007/07/15(日) 12:08:210267デフォルトの名無しさん
2007/07/15(日) 12:09:140268デフォルトの名無しさん
2007/07/15(日) 12:10:13※役人の考え方ってこうなのかな?
0269デフォルトの名無しさん
2007/07/15(日) 12:14:32まぁ、その辺は個人的なスタイルにもなってくるんで、主観でどうこう話が進むと
結局インデントせんでもソースはコンパイルされるからとか泥沼な議論になるんだよね・・・
それについては見易さを考慮したら、した方が良いとは俺は思うけどね。
まぁ、インデントはエディタ任せだがw
0270デフォルトの名無しさん
2007/07/15(日) 12:16:270271デフォルトの名無しさん
2007/07/15(日) 12:18:440272デフォルトの名無しさん
2007/07/15(日) 12:21:42そうでなきゃダメだという理由が思い浮かばないだろ?人生経験の浅い人間の
洗脳された教育による思い込み程、当てにならない意見はない。
もっと物事の本質を理解する頭を持って、これはこうしなきゃダメという先入観は捨てな。
答え方としては、した方が良い程度。それは人間がパッと見て見やすいかどうかって
話にもなるが、俺はそんなのみやすいとは思わないという屁理屈野郎が来たら
主観的な意見同士のぶつかりあいにしかならないんだよ。
0273デフォルトの名無しさん
2007/07/15(日) 12:23:34まったくの情報量ゼロ
むしろ雑音でしかない
0274デフォルトの名無しさん
2007/07/15(日) 12:23:470275デフォルトの名無しさん
2007/07/15(日) 12:25:08いちいち、なんでインデントが必要かとかって質問にまじめに答える必要ないよ。
みんな知ってるし。
0276デフォルトの名無しさん
2007/07/15(日) 12:30:330277デフォルトの名無しさん
2007/07/15(日) 12:57:01C信者ならLimboだな
0278デフォルトの名無しさん
2007/07/15(日) 13:01:02「これは宗教論争、どっちでもいい」みたいに持っていくやついるだろ。
そういうのに付き合いたくないってのもあるな > いちいち理由を言わない
0279デフォルトの名無しさん
2007/07/15(日) 13:07:510280デフォルトの名無しさん
2007/07/15(日) 13:09:290281デフォルトの名無しさん
2007/07/15(日) 13:09:54「お前のインデントは汚い」とかを一番文句言う
0282デフォルトの名無しさん
2007/07/15(日) 13:33:06だったら普通は言わないだろ。インデントをするしないを好きにするのか、どういうインデントをするのか
で話が食い違っているならまだしも、好きにしろって言うくらいなら好きにやれってことでしょ。
0283デフォルトの名無しさん
2007/07/15(日) 13:44:48全部消して、最低限必要な改行(プリプロセッサコマンドとか)、ホワイトスペースとかコメント
全部消して来る人とかいそうですよね。
そのためのスクリプトとかも用意してたり。最初のinclude、defineの連続の後は全部一行とか。
0284デフォルトの名無しさん
2007/07/15(日) 13:46:35int (main) void {
int x;
char buf[32];
printf("");
return 1;
}
こんなことしてたらやめろって言われるだろ。
0285デフォルトの名無しさん
2007/07/15(日) 13:49:19C言語でI/Oを操作するにはどのようにしたらいいですか?
0286デフォルトの名無しさん
2007/07/15(日) 13:49:34int (main) void {int x;char buf[32];printf("");return 1;}
0287デフォルトの名無しさん
2007/07/15(日) 13:50:31アセンブラで"OUT"を行う関数を書いてその関数をCから呼ぶ。
0288デフォルトの名無しさん
2007/07/15(日) 13:51:24この1行はどういう単純な処理をするのかとはっきり分るならね。
0289285
2007/07/15(日) 14:19:09すばやい回答ありがとうございます。
アセンブラで関数を書くというのが想像できないんですが、
それは純粋なC言語だけでできるんですか?
それとも独自の拡張が必要なんですか?
例えばポインタを使えばメモリの操作は可能ですが、
非メモリマップドI/Oの操作はC言語ではできないんですか?
0290デフォルトの名無しさん
2007/07/15(日) 14:26:21アセンブラで、とういうのはアセンブリ言語で、って意味ね。
C言語だけではできない。I/OはC言語の仕様に入っていないから。
アセンブリ言語で書いたソースを作ってアセンブル、リンクすればいい。
でもインラインアセンブラを使ってできるコンパイラもある。
gccならば、http://www.mars.sannet.ne.jp/sci10/on_gcc_asm.html
このへん読めば分かるんじゃね?
0291デフォルトの名無しさん
2007/07/15(日) 14:27:53つうかIO操作用のAPIが(たぶんC言語から呼び出せる)提供されてるだろ普通
0292デフォルトの名無しさん
2007/07/15(日) 14:38:21アセンブラかC言語かどっちかにしろ
ライブラリとして部分的に作成したものを呼び出すのは可
たとえばprintfなどだ
これはC言語だけの機能では作れない
0293デフォルトの名無しさん
2007/07/15(日) 14:38:480294デフォルトの名無しさん
2007/07/15(日) 14:39:27俺はてっきりコンパイラの機能の一部だと思ってたが。
0295デフォルトの名無しさん
2007/07/15(日) 14:40:11コンパイラの機能の一部だよ。
0296デフォルトの名無しさん
2007/07/15(日) 14:54:17#define n 5
int min_of(const int vc[], int no)
{
int i;
int min = vc[0];
for (i = 1; i< no; i++)
if (vc[i] < min)
min = vc[i];
return (min);
}
int main(void)
{
int i;
int min;
int vc[n];
printf("%d個の要素を入力してください:\n",n);
for (i = 0; i < n; i++)
scanf("%d",&vc[i]);
min = min_of(vc,n);
printf("最小値=%d\n",min);
return 0;
}
一応完成したと思うのですが、これは配列をうまく使えてますか?
配列というのがよくわからないんです。
配列で最初に何個か決めて書くのと、普通にscanfで入力していく違いがわかりません。
もう自分が何を言いたいのかもよくわかりません
0297デフォルトの名無しさん
2007/07/15(日) 15:08:020298デフォルトの名無しさん
2007/07/15(日) 15:09:100299デフォルトの名無しさん
2007/07/15(日) 15:10:56関数のプロトタイプを書いたほうが良い
0300デフォルトの名無しさん
2007/07/15(日) 15:12:28printf("%d個の要素を入力してください:\n",n);
for (i = 0; i < n; i++)
scanf("%d",&vc[i]);
min = min_of(vc,n);
このnの部分を5に変えれば済みますよね?
0301デフォルトの名無しさん
2007/07/15(日) 15:13:510302デフォルトの名無しさん
2007/07/15(日) 15:19:55defineだと要素を何個にするか実行した人に選ばせることはできませんよね。
0303デフォルトの名無しさん
2007/07/15(日) 15:34:290304デフォルトの名無しさん
2007/07/15(日) 15:35:26それに対処する方法は勉強を続けていればその内出てくる。
新しい概念が必要なのですぐには出てこないかもしれないけど。
0305デフォルトの名無しさん
2007/07/15(日) 15:58:48ありがとうございました
0306デフォルトの名無しさん
2007/07/15(日) 16:27:11void rev_intary(int vc[],int no)
{
int i;
for (i = no; i > 0; i--)
return vc[i];
}
int main(void)
{
int i;
int vc[5];
int rev;
printf("数字を入力してください\n");
for (i = 0; i < 5; i++)
scanf("%d",vc[i]);
rev = rev_intary(vc[i],5);
for (i = 0; i < 5; i++)
printf("%d",rev);
return 0;
}
並びを逆順にするプログラムです。なんかいろいろ違います。
0307デフォルトの名無しさん
2007/07/15(日) 16:32:42お願いします
0308デフォルトの名無しさん
2007/07/15(日) 16:46:380309デフォルトの名無しさん
2007/07/15(日) 16:50:10これが欲しいの?
#include <stdio.h>
int main(void)
{
int i,vc[5];
printf("数字を入力してください\n");
for (i = 0; i < 5; i++)
scanf("%d",&vc[i]);
for (i = 0; i < 5; i++)
printf("%d",vc[4-i]);
return 0;
}
0310デフォルトの名無しさん
2007/07/15(日) 16:52:37さっきのはもうなんかいいです。忘れてください。
0311デフォルトの名無しさん
2007/07/15(日) 16:56:00{
int i;
for(i=0; i< no / 2; i++) {
int temp = vc[i];
vc[i] = vc[no-1-i];
vc[no-1-i] = temp;
}
}
0312デフォルトの名無しさん
2007/07/15(日) 16:57:17たぶんそんなに複雑じゃないと思います。
それが複雑なのかどうかすらわかりませんけど…。
0313デフォルトの名無しさん
2007/07/15(日) 17:00:38配列覚えなおした方がいいと思う。
はっきり言ってこれ基礎の中の基礎。
0314デフォルトの名無しさん
2007/07/15(日) 17:01:30じゃあまず関数を作らず、main()内だけでやってみな
0315デフォルトの名無しさん
2007/07/15(日) 17:06:02それはできるんです。
0316デフォルトの名無しさん
2007/07/15(日) 17:07:57>>311の通りなわけだけど。
0317デフォルトの名無しさん
2007/07/15(日) 17:07:58配列の中身の入れ替えをmain内でやってみなってことだろ
0318デフォルトの名無しさん
2007/07/15(日) 17:13:30プログラムをコンパイル>実行するツールの設定でつまずいています。
ツールはLSI C-86 Ver.3.30c試食版です。
_LCC,ユーザ環境変数の変更とコマンドプロンプト上でのディレクトリの移動
まではやったのですが、lccと入力すると
C:\sample>lcc sample1
C:\sample>
というようになってうまく設定できていません、マニュアルも読んでみたのですが
どこがおかしいのか理解できませんでした、どなたか解決法わかる方いましたら
お願いします
0319デフォルトの名無しさん
2007/07/15(日) 18:04:03初心者はBCC developerつかっとけ
0320デフォルトの名無しさん
2007/07/15(日) 18:09:07カンだけど何も表示が無いってことはエラー報告がない=成功、なんじゃないの。
同じフォルダにバイナリ出てないか確かめた?
0321デフォルトの名無しさん
2007/07/15(日) 18:21:02俺も初めlcc入れたんだけどうまくいかないからbccにしたよ
0322デフォルトの名無しさん
2007/07/15(日) 18:23:24作成されてません、ユーザ環境変数のところも同じ設定でやってみて実行してみたところ
lccには反応するようになったのですが、ファイルが見つかりませんみたいな表示がでてます。
とりあえずC言語の実行確認できるツールさえあればいいのでBCC developerを調べてみます
0323デフォルトの名無しさん
2007/07/15(日) 18:24:41BCC developerが初心者最強
まずコンパイルが軽い、統合環境がマイクロソフトより断然軽い
LCCと違いメモリ制限などの標準でない制限やエラーが少ない
0324デフォルトの名無しさん
2007/07/15(日) 18:26:090325デフォルトの名無しさん
2007/07/15(日) 18:29:44勉強するまでの敷居が低い
0326デフォルトの名無しさん
2007/07/15(日) 18:38:230327デフォルトの名無しさん
2007/07/15(日) 19:06:07#include <stdio.h>
void mat_add(const int ma[2][3],const int mb[2][3],int mc[2][3]){
int i,j;
for(i=0; i<2; i++){
for(j=0; j<3; j++){
mc[i][j] = ma[i][j] + mb[i][j];
}
}
}
int main(void){
int i,j;
int ma[2][3] = {
{{1,2,3},{4,5,6}}
};
int mb[2][3] = {
{{7,8,9},{10,11,12}}
};
int mc[2][3] = { 0 };
mat_add(ma,mb,mc);
for(i=0; i<2; i++){
for(j=0; j<3; j++){
printf("%3d",mc[i][j]);
}
puts("");
}
}
0328デフォルトの名無しさん
2007/07/15(日) 19:09:36にもその結果が反映されています。なんで???
0329デフォルトの名無しさん
2007/07/15(日) 19:10:550330デフォルトの名無しさん
2007/07/15(日) 19:13:09多分環境変数を入力し間違えてるだけだと思うけど
0331デフォルトの名無しさん
2007/07/15(日) 19:15:55それってコンパイルできた?
中括弧がやたら多いような気がするんだが
0332デフォルトの名無しさん
2007/07/15(日) 19:16:54人のソースでもパクったのか?
じゃなきゃそんな疑問でないと思うが
0333デフォルトの名無しさん
2007/07/15(日) 19:26:32int x[3]; // int型が3つの配列
int *x[3]; // int型へのポインタが3つの配列
int (*x)[3]; // ??
int *(*x)[3]; // ??
0334328
2007/07/15(日) 19:30:02mcのスコープ離れて、mat_addで値を引数として渡して計算させています。
mat_addにreturn文がないのにmainの方のmcの参照で計算結果が反映されています。
それが疑問なんです。
0335デフォルトの名無しさん
2007/07/15(日) 19:31:38○アドレスを引数として渡して
0336デフォルトの名無しさん
2007/07/15(日) 19:45:13こんな事いったら規格厨からメチャクチャ文句言われそうだけど
配列とポインタは一緒。関数に渡してるのは値ではなくポインタ。
0337デフォルトの名無しさん
2007/07/15(日) 19:46:25BCC Developerを設定してみたんですが
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow )
{
if( DxLib_Init() == -1 )
{
return -1 ;
}
DrawPixel( 320 , 240 , 0xffff ) ;
WaitKey() ;
DxLib_End() ;
return 0 ;
}
を実行する部分で
エラー E2209 C:\Documents and Settings\****\My Documents\test\DrawPixel.cpp 1: インクルードファイル 'DxLib.h' をオープンできない
エラー E2141 C:\Documents and Settings\****\My Documents\test\DrawPixel.cpp 2: 宣言の構文エラー
というエラーがでてコンパイルできません。
DXライブラリはインストールして作成したTESTフォルダに「プロジェクトに追加すべきファイル_BCC用」
もコピーしました、このエラーを直すにはどうしたらいいでしょうか。
後自分はC言語はポインタ、クイックソート理解できる程度なんですが
このツールを使って#include<stdio.h>などのヘッダファイルは使えるのでしょうか
大学で使っている秀丸と同じ環境でやりたいと思うので、そこのあたりも詳しい方がいらしたら
よろしくお願いします。
0338デフォルトの名無しさん
2007/07/15(日) 19:48:46int (*x)[3]; // int [3]へのポインタ
int *(*x)[3]; // int *[3]へのポインタ
int (*x)[3];
int *(*x2)[3];
int arr[3] = {1, 2, 3};
int *arr2[3] = {&arr[0], &arr[1], &arr[2]};
x = &arr;
x2 = &arr2;
って感じ。
つか、こんなの使ったことないし、コードを理解し難いだけじゃね?
0339デフォルトの名無しさん
2007/07/15(日) 19:51:360340333
2007/07/15(日) 19:52:36int x[3]; // int型が3つの配列 (sizeof(x) == sizeof(int)*3)
int *x[3]; // int型へのポインタが3つの配列 (sizeof(x) == sizeof(void*)*3)
int (*x)[3]; // int型が3つの配列へのポインタ (sizeof(x) == sizeof(void*))
int *(*x)[3]; // int型へのポインタが3つの配列へのポインタ (sizeof(x) == sizeof(void*))
0341328
2007/07/15(日) 19:53:45とりあえずこの疑問は留めておいてポインタとやらが出るところまでCを進めてみようと思います。
0343デフォルトの名無しさん
2007/07/15(日) 19:55:440344デフォルトの名無しさん
2007/07/15(日) 19:55:59これが動くかやってみてください 拡張子は.cppにした方がいいです
#include<stdio.h>
main(){
printf("\n\nHello world.\n\n");
}
0345デフォルトの名無しさん
2007/07/15(日) 19:57:24あと作業領域は、C:\bccとか空白が入らないところにしてください
0346デフォルトの名無しさん
2007/07/15(日) 19:57:34違いはポインタに対して演算ができること
0347デフォルトの名無しさん
2007/07/15(日) 20:02:180348デフォルトの名無しさん
2007/07/15(日) 20:02:25エラー E2268 C:\Documents and Settings\****\My Documents\test\DrawPixel.cpp 3: 未定義の関数 'printf' を呼び出した(関数 main() )
と出ました。
拡張子はどこのものを変えればいいでしょうか
0349デフォルトの名無しさん
2007/07/15(日) 20:09:03ここの
http://www.cmagazine.jp/setbcc.html
http://www.cmagazine.jp/download/setbcc15b.exe
を使って再インストールしてみてください
まずは、だうんろーどして設定して動くか試してみてください
あと C:\Documents and Settingsといった空白が入ったところに作業領域をおかないようにしてください
0350デフォルトの名無しさん
2007/07/15(日) 20:10:30ファイル新規作成、プロジェクトを選ぶときに、新規に作業ディレクトリを作成して
そこを選ぶといいです
0351350
2007/07/15(日) 20:11:380352デフォルトの名無しさん
2007/07/15(日) 20:28:27MAKE Version 5.2 Copyright (c) 1987, 2000 Borland
bcc32 -W -3 -Od -w- -AT -pc -H- -k -b -v -y -DDEBUG -nDebug -c C:\TEST\DrawPixel.cpp
Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
C:\TEST\DrawPixel.cpp:
bcc32 -W -3 -Od -w- -AT -pc -H- -k -b -v -y -DDEBUG -eDebug\TEST.exe Debug\DrawPixel.obj
Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland
Error: 外部シンボル 'WinMain' が未解決(C:\BORLAND\BCC55\LIB\C0W32.OBJ が参照)
と出ました、ディレクトリを変更してc:\の中にしました。
インストールするときにメモ帳で作る設定ファイルを作成しているようだったので
ファイル>新規作成からの設定を行って実行しました。
実行プログラムは先ほどの#include<stdio.h>を使用しています。
エラーの時に出力されているC0W32.OBJ を見てみましたが文字化けしていてよく分かりません
0353デフォルトの名無しさん
2007/07/15(日) 20:33:050354デフォルトの名無しさん
2007/07/15(日) 20:34:28'WinMain' が未解決というエラーはプロジェクト設定で
windowsアプリケーション(-W)を選ぶと動くかもしれないです
0355デフォルトの名無しさん
2007/07/15(日) 20:35:090356デフォルトの名無しさん
2007/07/15(日) 20:48:26DebugのみWindowsアプリケーション(-w)にチェックを入れています。
実行ファイル名:TEST.exe
名句ファイル名:TEST.mak
です、チェックを初期のコンソールアプリケーション(-wc)と入れ替えて4通り試してみましたが
同様のエラーがでました。
344のプログラムを実行すると
Error: 外部シンボル 'WinMain' が未解決(C:\BORLAND\BCC55\LIB\C0W32.OBJ が参照)
というようなエラーがでてコンパイルできません。
入力ミスなどないように何回かは見直しているのでマニュアルどうりにはできていると思います。
なるべく状況報告するのでよろしくお願いします
0357デフォルトの名無しさん
2007/07/15(日) 20:55:57あと
#include<stdio.h>
main(){
printf("\n\nHello world.\n\n");
}
以外には画面に書き込まず、
コンソールアプリケーションでコンパイル出来ますか??
0358デフォルトの名無しさん
2007/07/15(日) 20:58:150359デフォルトの名無しさん
2007/07/15(日) 20:58:26除いたら実行できるようになりました、このファイルはヘッダファイルなどの設定が
書いてあるものと認識していたのですが、使わなくてもC言語の実行は問題なく行えるでしょうか?
0360デフォルトの名無しさん
2007/07/15(日) 21:05:38それはいりません
特殊なプログラム(3D画像など)を容易にするために必要なものです
0361デフォルトの名無しさん
2007/07/15(日) 21:12:44・・・
}
このときの繰り返し条件Nってどういう意味になりますか?
for(i=0;i<10; i++){
・・・
}
こういうときは、iが10になったらループを抜けるのは分かるんですけど・・・
物凄く初心者レベルの質問ですみません。どなたか回答お願いします。
0362デフォルトの名無しさん
2007/07/15(日) 21:12:56作業など遅かったのに親切な説明ありがとうございました。
とても助かりました。
0363デフォルトの名無しさん
2007/07/15(日) 21:17:14Nが0以外だったら常に真
0364デフォルトの名無しさん
2007/07/15(日) 21:19:55もしくはNが変数なら中の処理でNの値を書き換えるようになってるはず
0365363
2007/07/15(日) 21:20:36ダメだ.回答になってないか
・Nが定数で
Nが0だったら一度も実行されない
Nが0以外だったら無限ループ
break; 文で抜けるなどする
・Nが変数で
Nが0以外である間ループは実行され続ける
Nが0に変更されたら終了
0366328
2007/07/15(日) 21:25:07そのN < 10(つまりはnが10)(cでいう>>363)になったら繰り返し終了
0367デフォルトの名無しさん
2007/07/15(日) 21:29:01いやいや、N<10 じゃないから
N だけだから条件は
0368328
2007/07/15(日) 21:30:590369デフォルトの名無しさん
2007/07/15(日) 21:35:38ありがとうございます。ここで詰まってたんで助かりました
0370デフォルトの名無しさん
2007/07/15(日) 22:35:58for (i = 1; i <= 100; i++) a[i] = i;
よくわかりません。また初期化と初期化ルーチンの違いを教えてくれませんか。
お願いします
0371デフォルトの名無しさん
2007/07/15(日) 22:37:22int i, a[100];
for (i = 1; i <= 100; i++) a[i] = i;
よくわかりません。また初期化と初期化ルーチンの違いを教えてくれませんか。
お願いします
0372デフォルトの名無しさん
2007/07/15(日) 22:37:280から99までだ
for (i = 0; i < 100; i++) にしろ
0373デフォルトの名無しさん
2007/07/15(日) 22:43:46「ルーチン」でググれば分かるだろ。
0374デフォルトの名無しさん
2007/07/15(日) 22:47:04for (i = 1; i <= 100; i++) a[i] = i; ←初期化ルーチン
0375デフォルトの名無しさん
2007/07/15(日) 22:54:12わかりました。ありがとうございます。
>>373,374
つまり初期化ルーチンとは一連の流れで初期化を行うことですか。
0376デフォルトの名無しさん
2007/07/15(日) 22:58:14まぁそんな感じで
0377210
2007/07/15(日) 23:13:51ポインタ変数で宣言しないと領域を開放できないのは不便ですね。
0378デフォルトの名無しさん
2007/07/15(日) 23:17:400379デフォルトの名無しさん
2007/07/15(日) 23:18:33ひとつの関数の中で、開放が必要なほどたくさんローカル変数を使うことって普通はないからね。
0380デフォルトの名無しさん
2007/07/15(日) 23:25:37>ポインタ変数で宣言しないと領域を開放できないのは不便ですね。
ローカル変数はスコープを抜けると勝手に開放される。
自分で開放いちいちしなければならないほうが不便だ。
いずれC#とかJavaを使ってみればわかるだろう。
0381デフォルトの名無しさん
2007/07/16(月) 00:13:04{
int i;
for(i=0; N; i++)
N /= n;
return i;
}
すみません。さきほども質問したものですが、これはユーザ定義関数の一部なんですが、
N=1000、n=5とするとreturn i でのiの戻り値はいくらになりますか?
0382デフォルトの名無しさん
2007/07/16(月) 00:21:05int型の変数に入れてるんじゃ整数で0〜199
0383デフォルトの名無しさん
2007/07/16(月) 00:22:000384285
2007/07/16(月) 00:22:140385デフォルトの名無しさん
2007/07/16(月) 00:36:34200ですか?1000を5で割り続けると思ったんですけど。
0386デフォルトの名無しさん
2007/07/16(月) 00:44:10うんにゃ、5だった。なんか勘違いしとった。
0387デフォルトの名無しさん
2007/07/16(月) 00:44:560
0388デフォルトの名無しさん
2007/07/16(月) 00:45:26int main( void )
{
int a=0,b=0,c=0;
for( a=1;a<=100; a++)
{
for( b=1; b<=100; b++)
{
for( c=1; c<=100; c++)
{
if(a*a+b*b==c*c)
if(a>=b)
{
printf("(%d,%d,%d)だよん\n",a,b,c);
}
}
}
}
printf("\n");
return 0;
}
これはabcの組み合わせを表示するプログラムなんですが、
これに組み合わせの総数を表示するプログラムを付け加えたいのですが
どうやればいいのか分かりません。
わかる方居たら教えてください。
0389デフォルトの名無しさん
2007/07/16(月) 00:46:15for(i=0; N; i++){
N /= n;
return i;
}
なら0じゃないの?
for(i=0; N; i++){
N /= n;
}
return i;
なら4かな?
0 1000
1 200
2 40
3 8
4 1
0390デフォルトの名無しさん
2007/07/16(月) 00:47:13#include <stdio.h>
int func(int N, int n)
{
int i;
for(i=0; N; i++)
N /= n;
}
return i;
}
int main(void) {
printf("%d ",func(1000,5));
return 0;
}
0391デフォルトの名無しさん
2007/07/16(月) 00:47:58N /= n;
} <これ消して
0392デフォルトの名無しさん
2007/07/16(月) 00:53:53すみません。
for(i=0; N; i++){
N /= n;
}
return i;
でした。4ですか。4か5で迷ったんですけど、5回割ると0になるんで、5かと思ってました
0393デフォルトの名無しさん
2007/07/16(月) 00:59:32#include <stdio.h>
int func(int N, int n) {
int i;
for(i=0; N; i++)
N /= n;
return i;
}
int main(void) {
printf("%d ",func(1000,5));
return 0;
}
0394デフォルトの名無しさん
2007/07/16(月) 01:02:00すいません。家だと実行できない環境だったんで。
学校の課題を家で考えていたんで。
みなさん丁寧に教えてくれてありがとう!凄い助かりました。
0395デフォルトの名無しさん
2007/07/16(月) 01:06:040396デフォルトの名無しさん
2007/07/16(月) 01:14:00ためしに同じようにかいたら
1001が返ってきた
Dim N As Integer = 1000
Dim nn As Integer = 5
Dim i As Integer = 0
Dim ret As Integer = 0
For i = 0 To N
N /= nn
Next
ret = i
0397デフォルトの名無しさん
2007/07/16(月) 01:18:140から1000までの1001回ループするんじゃないよ
Nが0でない間ループする
0398デフォルトの名無しさん
2007/07/16(月) 03:04:57#include <math.h>
#define MAX 1000
int main(void) {
int prime[MAX],LIMIT,i,j,c;
for(i=1; i<=MAX; i+=2) prime[i]=1;
for(i=4; i<=MAX; i+=2) prime[i]=0;
LIMIT=(int)sqrt(MAX);
for(i=3; i<=LIMIT; i+=2) {
if(prime[i]==1) {
for(j=2*i; j<=MAX; j+=i)
prime[j]=0; } }
printf("%d ",2);
for(c=1,i=3; i<=MAX; i+=2) {
if(prime[i]==1) {
printf("%d ",i);
c++;
if(c==10) {
printf("\n");
c=0;
} } }
return 0;
}
0399デフォルトの名無しさん
2007/07/16(月) 03:05:58for(i=3; i<=LIMIT; i+=2) {
if(prime[i]==1) {
for(j=2*i; j<=MAX; j+=i)
prime[j]=0; } }
の
for(j=2*i; j<=MAX; j+=i)
は、初めは2*2 2*3 2*4.....て計算して
次に 3*2 3*3 3*4.....て計算して
次に 5*2 5*3 5*4.....見たいな感じで計算してるんですよね?
for(j=2*i; j<=MAX; j+=i) の式で
なんでこういう計算が出来るのかが分からないんです。
j=2*iの2の部分は一度計算すると3になるんですか?
j+=iって言うのはjがiずつ増えるって意味ですよね?
それはどういうことなんですか?
何度も同じ質問ごめんなさい。
0400デフォルトの名無しさん
2007/07/16(月) 03:08:490401399
2007/07/16(月) 03:10:54理解すれば何でこんなことわかんないんだろっって感じなんでしょうけど。。。
頭が混乱しちゃってww
0402デフォルトの名無しさん
2007/07/16(月) 03:14:28j = 3*2
j = 3*2 + 3 = 3*3
j = 3*3 + 3 = 3*4
j = 3*4 + 3 = 3*5
というように増えてく。
0403399
2007/07/16(月) 03:18:53が5のとき
j = 5*2
j = 5*2 + 5 = 5*3
j = 5*3 + 5 = 5*4
ってことか!!!
足し算をすることで掛け算してるように見せてるんですね!!!
頭いい。。。。。
j = 3*4 + 3 = 3*5
というように増えてく。
0404399
2007/07/16(月) 03:20:55cって10行いったら改行するためにあるプログラムですよね?
0405デフォルトの名無しさん
2007/07/16(月) 03:22:18解くプログラムがわからないorz
a=1b=1c=1を入れるのだが
#include<stdio.h>
int main(void)
{
int a=1,b=1,c=1,d,x,y;
scanf("a=%f",&a);
scanf("b=%f",&b);
scanf("c=%f",&c);
d=b^2-4*a*c;
if(d>0)
x=(-b+sqr(d))/a;
y=(-b-sqr(d))/a;
printf("x=%d,%d\n",x,y);
elxe
printf("解なし\n");
return 0;
}
ではダメみたいなんよ
もうよくわからない、たすけておくれ
0406デフォルトの名無しさん
2007/07/16(月) 03:25:550407デフォルトの名無しさん
2007/07/16(月) 03:26:20これ判別式?
d = b * b - 4 * a * c;
0408デフォルトの名無しさん
2007/07/16(月) 03:28:23sqr -> sqrt
elxe -> else
0409デフォルトの名無しさん
2007/07/16(月) 03:29:04なんでコンパイルしてみようとしないの?
0410399
2007/07/16(月) 03:32:26cは他に存在価値があるんですか?
0411デフォルトの名無しさん
2007/07/16(月) 03:36:46日本語でおk
0412デフォルトの名無しさん
2007/07/16(月) 03:39:59俺は実行できたって答えればいいのか?
何をしたら何がどうなったかくらい言ってくれよ
プログラム以前の問題として。
0413399
2007/07/16(月) 03:41:37#include <stdio.h>
#include <math.h>
int main(void)
{
int prime[1000],LIMIT,i,j;
for(i=1; i<=1000; i+=2) prime[i]=1;
for(i=4; i<=1000; i+=2) prime[i]=0;
LIMIT=(int)sqrt(1000);
for(i=3; i<=LIMIT; i+=2)
{
if(prime[i]==1)
{
for(j=2*i; j<=1000; j+=i)
prime[j]=0;
} }
printf("%d ",2);
for(i=3; i<=1000; i+=2)
{
if(prime[i]==1)
{
printf("%d ",i);
} }
return 0;
}
こんな感じにcをなくすと実行しても何も映らないのは何ででしょうか?
0414399
2007/07/16(月) 03:42:17ごめんなさい。
0415405
2007/07/16(月) 03:48:05しましたが通らないorz
0416デフォルトの名無しさん
2007/07/16(月) 03:58:31パッと見気づいたところを指摘しただけだからね
なんで通らないとだけしか言わないかな
コンパイルエラー出てるんでしょ
君が情報を減らすフィルターになってどうする
0417399
2007/07/16(月) 04:21:120418デフォルトの名無しさん
2007/07/16(月) 08:15:495行目を
int i,j,prime[1000],LIMIT;
に変えてみそ。
0419デフォルトの名無しさん
2007/07/16(月) 10:35:19for(j=2*i; j<=MAX; j+=i) < これを
int k; を追加して for(k=i*2,j=k; j<=MAX; j+=k) にしチャイナと。
そうすると、例えば i=3 が素数で、k=3*2=6, j=3+6=9 から 6 ずつ加算したものが
ふるい落とされる。6,12,18 は偶数なんで、当然やる意味なし。
まぁ、これをやっても、やらなかったときと比べて大して処理速度は速くならないけど
無駄は省いているから。
0420デフォルトの名無しさん
2007/07/16(月) 10:36:11for(k=i*2,j=k; j<=MAX; j+=k)
for(k=i*2,j=i+k; j<=MAX; j+=k) < j=i+k
0421デフォルトの名無しさん
2007/07/16(月) 14:01:060422デフォルトの名無しさん
2007/07/16(月) 14:52:29#include <stdio.h>
#include <math.h>
#define LIMIT 1000
int main(void)
{
int prime[LIMIT]={0,0,1},limit,i,j;
for(i=3; i<LIMIT; i+=2) prime[i]=1;
for(i=4; i<LIMIT; i+=2) prime[i]=0;
limit=sqrt(LIMIT);
for(i=3; i<limit; i+=2)
{
if(prime[i])
{
for(j=i*i; j<LIMIT; j+=i*2)
prime[j]=0;
} }
for(i=0; i<LIMIT; i++)
{
if(prime[i]!=0)
{
printf("%5d",i);
} }printf("\n");
return 0;
}
0423377
2007/07/16(月) 15:53:36自動で開放されるのは当然として、手動で開放できないのがという意味です。
0424デフォルトの名無しさん
2007/07/16(月) 16:01:31どこが不便なの?
シビアな組み込み環境とかじゃないかぎり
メモリの効率とか最適化とか気にする必要はないし
free関数だって呼んですぐに開放されるわけではない
0425デフォルトの名無しさん
2007/07/16(月) 16:08:08{
int i;
int v3[no] = {0};
for (i=0;i<no;i++)
v3[i] = v2[i];
for (i=0;i<no/2;i++) {
int temp = v3[i];
v3[i] = v3[no-1-i];
v3[no-1-i] = temp;
}
for (i=0;i<no;i++)
v1[i] = v3[i];
}
をコンパイルすると定数式が必要ですってでるんですけど、どこがいけないか分りません。
だれか教えてください
0426デフォルトの名無しさん
2007/07/16(月) 16:12:11これ。
静的に宣言した配列のサイズはコンパイル時に決定できなきゃいけない。
これは引数 no によってそのサイズが変わることを意味しているから
C/C++では使えない。
malloc/free 使うか、十分大きなサイズを取るか、どっちかだね。
0427デフォルトの名無しさん
2007/07/16(月) 17:08:07C99 ならできる
gcc なら次のオプションを追加してみては?
-std=c99
例
gcc -std=c99 a.c
0428デフォルトの名無しさん
2007/07/16(月) 17:17:091M(メガ)=10^6=1,000,000(100万)
1G(ギガ)=10^9=1,000,000,000(10億)
1K(キロ)=10^9=1,000,000,000(10億)
1M(メガ)=10^6=1,000,000(100万)
1G(ギガ)=10^3=1,000(千)
0429デフォルトの名無しさん
2007/07/16(月) 17:29:160430428
2007/07/16(月) 17:30:330431デフォルトの名無しさん
2007/07/16(月) 17:50:43それのどこがCの話だ?
0432デフォルトの名無しさん
2007/07/16(月) 17:50:540433デフォルトの名無しさん
2007/07/16(月) 17:51:522*2*2*2*2*2*2・・・・・・
どうやったら1000になるのでしょう?
一度計算してみてはw
0434デフォルトの名無しさん
2007/07/16(月) 17:58:35上の三つは定義です。
下の三つは誤りです。
定義は「こういうことにしましょう」という決まり事なので、
「どうして?」
という疑問に対しては「そういう風に決められているから」としか
答えられません。
0435デフォルトの名無しさん
2007/07/16(月) 18:15:50#include <stdio.h>
int main(void)
{
int i,j;
int tensu[5][3];
puts("5人の学生の3教科(国語・数学・英語)の点数を入力してください。");
for (i=0;i<5;i++) {
printf("[%d]\n",i+1);
for (j=0;j<3;j++) {
printf("国語:");
scanf("%d",tensu[i][j++]);
printf("数学:");
scanf("%d",tensu[i][j++]);
printf("英語:");
scanf("%d",tensu[i][j++]);
}
}
return(0);
}
コンパイルして実行してみると、[1]の数学のとこを入力した後に止まってしまうんですけど、何がいけないのでしょうか?
0436デフォルトの名無しさん
2007/07/16(月) 18:19:58scanfはループで使うと無限ループを起こす可能性がある
バグが秘められている(scanfがクソだといわれるゆえん)。
気軽に入力で数字取りたいならfgetsとatoi使いなさい。
0437デフォルトの名無しさん
2007/07/16(月) 18:21:55& が無い
0438デフォルトの名無しさん
2007/07/16(月) 18:22:28jのforループはいらなくない?
0439デフォルトの名無しさん
2007/07/16(月) 20:13:100440デフォルトの名無しさん
2007/07/16(月) 20:20:41http://c-au.2ch.net/test/-/soc/1152718893/i
0441デフォルトの名無しさん
2007/07/16(月) 20:25:530442デフォルトの名無しさん
2007/07/16(月) 21:07:33そこで、Cを使って100マス計算を作ろうと思いました。
しかし、どういうわけかソースは200行は書いてと言われる始末。
普通に作ったら200行になりますか?
0443デフォルトの名無しさん
2007/07/16(月) 21:07:340444デフォルトの名無しさん
2007/07/16(月) 21:14:37お前が理解できてないだろ。
iの倍数のうちi*2〜i*(i-1)は、iより前に除外されてるんだよ。
0446デフォルトの名無しさん
2007/07/16(月) 21:33:150447デフォルトの名無しさん
2007/07/16(月) 21:33:47421 名前:デフォルトの名無しさん 投稿日:2007/07/16(月) 14:01:06
ムダ省くんならj=i*iにでもすれば?
^^^^^^
j? i*i?もはやソースの意味を理解していないバカ二人?もしかして同一人物?
が痛すぎ。黙ってろ、理解できていないカス >>421 >>444
そこまで言うならお前が言う形にソースを書き直して結果を出してみろやw
0448うわっ、マジで分ってないバカが何か言ってるよwwww
2007/07/16(月) 21:34:38やべえマジでわかってねえ
444 名前:デフォルトの名無しさん 投稿日:2007/07/16(月) 21:14:37
>441
お前が理解できてないだろ。
お前が理解できてないだろ。
お前が理解できてないだろ。
お前が理解できてないだろ。
iの倍数のうちi*2〜i*(i-1)は、iより前に除外されてるんだよ。
iの倍数のうちi*2〜i*(i-1)は、iより前に除外されてるんだよ。
iより前に除外されてるんだよ。 iより前に除外されてるんだよ。 iより前に除外されてるんだよ。
iより前に除外されてるんだよ。 iより前に除外されてるんだよ。 iより前に除外されてるんだよ。
iより前に除外されてるんだよ。 iより前に除外されてるんだよ。 iより前に除外されてるんだよ。
↑はぁ?
0449デフォルトの名無しさん
2007/07/16(月) 21:37:14分りやすく具体的にいくか。
i=7のとき 14から42までは7より前に既に除外されてるからj=49からやればいいってこと。
0450デフォルトの名無しさん
2007/07/16(月) 21:38:432、3つの定数 0, \0, NULLのそれぞれの意味と用途を説明せよ
テストの過去問でありました。どのように答えたら良いか教えてください。
0451デフォルトの名無しさん
2007/07/16(月) 21:38:52>441
お前が理解できてないだろ。
iの倍数のうちi*2〜i*(i-1)は、iより前に除外されてるんだよ。
やべぇ、こいつアホだwwww腹痛ぇwwwwwww
0452デフォルトの名無しさん
2007/07/16(月) 21:39:56うはここまでバカだと思わなかった。
ぶっwwwwwwww自分がバカだと気づいていないバカがここまでバカだとは思わなかったwww
だからお前の理論をソースに記述して実行結果を見ろ、ボケw
0453デフォルトの名無しさん
2007/07/16(月) 21:41:220454デフォルトの名無しさん
2007/07/16(月) 21:47:11教えたがり屋さん必死だなw まぁ、そんなの当然知ってるわい。わざとやると
ここまで釣れるから面白いぜw
0455デフォルトの名無しさん
2007/07/16(月) 21:47:550456デフォルトの名無しさん
2007/07/16(月) 21:48:21バカとキチガイの会話ってステキ
0457デフォルトの名無しさん
2007/07/16(月) 21:49:21完全に言い負かされると釣りってことにしたいらしい。
釣ってる方のレスが釣られてる方のレスより多い釣りなんてないんだけどね。
0458デフォルトの名無しさん
2007/07/16(月) 21:51:140459デフォルトの名無しさん
2007/07/16(月) 21:55:52strは文字配列。*pはポインタで、"memory"という定数があるアドレスの先頭のアドレスが*pに入る。
0はそのまんま数値の0。\0は空文字を示すエスケープシーケンス、NULLは単純に空という意味でゼロとは区別して使う。
0460デフォルトの名無しさん
2007/07/16(月) 21:57:43> 完全に言い負かされると
残念だが今回ばかりは負かされたと判断できんだろ。むしろ釣られて顔を真っ赤にして
ファビョってなんでお前わからんねーんだ、バカ!ってなっていた方が笑えるw
だいたい、既に言っているようにソースコードに記して実行すりゃ分ること。
そんな単純なことなのに、わからずや(を演じている釣り師)にムキになっちゃってw
0461デフォルトの名無しさん
2007/07/16(月) 22:04:210462デフォルトの名無しさん
2007/07/16(月) 22:05:380463デフォルトの名無しさん
2007/07/16(月) 22:21:030464デフォルトの名無しさん
2007/07/16(月) 22:21:130465デフォルトの名無しさん
2007/07/16(月) 22:28:53結構同じ人が見てる?
0466デフォルトの名無しさん
2007/07/16(月) 22:29:552の用途について書いてなかったか。用途って言われてもなぁ・・・
0は数値だから、演算とか?\0は空文字なんで文字データとして、特に文字列の終端を意味するときに使われる。
NULLは・・・まぁ、よく言われる ぬるぽ とか。文字列の終端を意味する '\0' の変わりにNULLを
代入して代用することも出来る。例えば char a[10]; a[0]='a'; a[1]='b'; a[2]='\0'; または a[2]=NULL; とか。
0467デフォルトの名無しさん
2007/07/16(月) 22:38:200468デフォルトの名無しさん
2007/07/16(月) 22:39:24やらないよ、いつものあれは俺はやらないよ。ウホッになりたくもないし、やらないぞ。
0469デフォルトの名無しさん
2007/07/16(月) 22:44:22NULLも#define定義で0のはず
0470デフォルトの名無しさん
2007/07/16(月) 22:44:55大半は両方見てるんじゃないかな
レスはしなくとも
0471こんばんわ
2007/07/16(月) 22:47:37多分岐型
整数型の変数a・b と、文字型の変数e を用意し、
キーボードから2つの数値と1つの演算子を入力し
、その計算結果cを出力するプログラムを作成しなさい。
実行される計算は和・差・積・商・剰余の5種類とし、
演算子はそれぞれ’+’、’-’、’*’、’/’、’%’で
表現されるものとする。
演算子にそれ以外の記号が入力された場合は
エラーメッセージを表示する。
また0による除算の回避も含める。
0472こんばんわ
2007/07/16(月) 22:49:01やっぱりいいです。
0473デフォルトの名無しさん
2007/07/16(月) 22:51:11いや、荒れてるあたりが宿題スレでよく見る光景だなぁと思って
回答者は全員一緒だったりして
0474デフォルトの名無しさん
2007/07/16(月) 22:55:42そのへんは同じ人でしょ
回答者すべてが同じかは別として
0475デフォルトの名無しさん
2007/07/16(月) 22:58:36>>466
>>469
ありがとうございました。あとは自分でやってみます。
0476デフォルトの名無しさん
2007/07/16(月) 23:02:172get失敗し続けたあげく
「これからは>2のことくそ太郎って呼んでやろうぜ!」
ってレスしたらそれが2getだったとかの高等テクもある。
2ちゃんねる初心者諸君は頑張りたまえ。
0477399
2007/07/16(月) 23:12:12#include <stdio.h>
int main(void)
{
int i,j,a[1000];
for(i=1; i<=1000; i+=2) a[i]=1;
for(i=4; i<=1000; i+=2) a[i]=0;
for(i=3; i<=31; i+=2)
{
if(a[i]==1)
{
for(j=2*i; j<=1000; j+=i)
a[j]=0;
} }
printf("%d ",2);
for(i=3; i<=1000; i+=2)
{
if(a[i]==1)
{
printf("%d ",i);
} }
return 0;
}
そしてこれはとにかく習ってないやつを省いてみたやつです。
これが無駄がたくさんあるけど1番簡単なプログラムだと思うのですが、実行しても何も映りません。どうすればよいと思いますか?
0478デフォルトの名無しさん
2007/07/16(月) 23:22:590479デフォルトの名無しさん
2007/07/16(月) 23:34:28散々 j は i*i に i*2 を足した値以降だと・・・まぁ、良いけど。
0480デフォルトの名無しさん
2007/07/17(火) 00:06:50>for(i=4; i<=1000; i+=2) a[i]=0;
で a[1000] にアクセスしちゃってるじゃん
0481399
2007/07/17(火) 00:37:560482デフォルトの名無しさん
2007/07/17(火) 00:44:170483デフォルトの名無しさん
2007/07/17(火) 02:08:56いや486DX + Vistaだから超もっさりで数分後にCPUの熱暴走してソニー製のバッテリーに引火しPCが爆発すると予想
0484デフォルトの名無しさん
2007/07/17(火) 02:34:07自分が書いた発言への返答くらい見直してください。
>>418で答えてみたので是非是非試してみてください。
0486デフォルトの名無しさん
2007/07/17(火) 07:00:57それだと正しく篩にかけられてないよ
表示の方でイカサマしてるから気付かないと思うけど
0488デフォルトの名無しさん
2007/07/17(火) 13:50:45なりません
0489デフォルトの名無しさん
2007/07/17(火) 13:54:14それは問題を作成するだけ?それとも自動解答込み?
0490デフォルトの名無しさん
2007/07/17(火) 13:58:370491デフォルトの名無しさん
2007/07/17(火) 14:53:42って言って配列を全部動的に確保するようにするんだ
もちろん別関数に掃き出す、ポインタの受け渡しは構造体使う、
これで何も考えずに20行ぐらいは水増しできる
0492デフォルトの名無しさん
2007/07/17(火) 15:02:410493デフォルトの名無しさん
2007/07/17(火) 15:04:03http://www.crdc.gifu-u.ac.jp/edsoftdb/100masu.html
0494デフォルトの名無しさん
2007/07/17(火) 16:10:27しかも就職してはじめてのプロジェクト
0495デフォルトの名無しさん
2007/07/17(火) 16:16:54随分長い名前
0496デフォルトの名無しさん
2007/07/17(火) 17:56:05学生時代よくやったわw
それでレポートの提出期限に間に合わなくて
遅れて出して成績が良いのつかなかったw
0497デフォルトの名無しさん
2007/07/17(火) 18:39:33void rev_intary(int vc[],int no)
{
int i,temp;
for (i = 0; i < (no/2); i++){
temp = vc[i];
vc[i] = vc[no - i -1];
vc[no - i - 1] = temp;
temp = vc[i];
}
}
int main(void)
{
int i,a;
int va[100];
printf("100以下の要素数を入力してください:");
scanf("%d",&a);
printf("要素を入力してください\n");
for (i = 0; i < a; i++)
scanf("%d",&va[i]);
printf("逆並びにすると\n");
rev_intary(va,a);
for (i = 0; i < a; i++)
printf("%d\n",va[i]);
printf("です\n");
return 0;
}
このプログラムで配列vcの中自体が逆になってますか?
実行して表示されるのはvcからですか?tempからですか?
0498デフォルトの名無しさん
2007/07/17(火) 21:59:30という課題が出たのですが ConHEX()についていろいろ調べたのですが見つかりませんでした。。
どなたか教えて頂けないでしょうか。
0499デフォルトの名無しさん
2007/07/17(火) 22:05:00先生にもう一度課題を聞いたほうがいいよ
多分ConHEXという関数を作れって課題だと思うけど。
0500デフォルトの名無しさん
2007/07/17(火) 22:06:57もしかして「再帰呼び出しを行い10進数を16進数に変換する関数」を
ConHEX() という名前で書け、という課題なんじゃないのかい?
0501デフォルトの名無しさん
2007/07/17(火) 22:07:010502デフォルトの名無しさん
2007/07/17(火) 22:08:030503デフォルトの名無しさん
2007/07/17(火) 22:13:05やっぱりConHEXは無いのですか。
ありがとうございました。
自作することにします。
0504デフォルトの名無しさん
2007/07/17(火) 22:18:460505デフォルトの名無しさん
2007/07/17(火) 22:21:210506デフォルトの名無しさん
2007/07/17(火) 22:24:470507442
2007/07/17(火) 22:26:46>>493 そうです。
他に別なもの考えてみます。結局100マスの予感がしますが・・
ありがとうございます。
0508デフォルトの名無しさん
2007/07/18(水) 00:07:04#include <stdlib.h>
double sqr(double a)
{
return(a*a);
}
int main(void)
{
int i;
int in = 0;
double x,y;
int seed;
printf("乱数の種(自然数)を入れてください:");
scanf("%d",&seed);
srand((unsigned int)seed);
for(i=0;i<1000;i++){
x = rand()/32767.0;
y = rand()/32767.0;
if (sqr(x) + sqr(y) =<1.0)
in += 1;
}
printf("π = %f\n",in/seed*4.0);
return(0);
}
コンパイルするとx,yに代入した値が使われてないと返されるんですけど、何がいけないのでしょうか?お願いします
0509デフォルトの名無しさん
2007/07/18(水) 00:09:59そもそもそれでコンパイルできるの?
=<
↓
<=
0510デフォルトの名無しさん
2007/07/18(水) 00:24:07#define number 5
int ave(int va[],int no)
{ int i;
int vb[number];
for (i = 0; i < no; i++)
vb[i] = va[i]/3;
return vb[i]; }
int main(void) {
int i,ave;
int eng[number];
int mat[number];
int jap[number];
int wa[number];
puts("5人の点数を入力してください");
for (i = 0; i < number; i++) {
printf("[%d] 英語:",i+1); scanf("%d",&eng[i]);
printf("[%d] 数学:",i+1); scanf("%d",&mat[i]);
printf("[%d] 国語:",i+1); scanf("%d",&jap[i]);
}
for (i = 0; i < number; i++)
wa[i] = eng[i] + mat[i] + jap[i];
ave = ave(wa,number);
for (i = 0; i < number; i++)
printf("[%d]の平均点は%d点です\n",i + 1,ave);
return 0; }
いろいろおかしい自信はありますが何がおかしいのか…。エラーは ave = …のところで出てます。
でも他にもいろいろおかしいと思います。どう直せばいいのか…お願いします。
0511デフォルトの名無しさん
2007/07/18(水) 00:33:14変数の名前を変えるか、関数の名前を変えるかして
ave という名前が被らないようにしてみては?
0512デフォルトの名無しさん
2007/07/18(水) 00:37:14一応コンパイラは通るようになりましたが、依然おかしいです。
#include <stdio.h>
#define number 5
void ave_p(int va[],int no)
{
int i;
int average;
for (i = 0; i < no; i++)
average = (va[i]/3);
}
int main(void)
{
int i;
int eng[number];
int mat[number];
int jap[number];
int wa[number];
puts("5人の点数を入力してください");
for (i = 0; i < number; i++) {
printf("[%d] 英語:",i+1); scanf("%d",&eng[i]);
printf(" 数学:",i+1); scanf("%d",&mat[i]);
printf(" 国語:",i+1); scanf("%d",&jap[i]);
}
for (i = 0; i < number; i++)
wa[i] = eng[i] + mat[i] + jap[i];
ave_p(wa,number);
for (i = 0; i < number; i++)
printf("[%d]の平均点は%d点です\n",i + 1,wa);
return 0;
}
0513デフォルトの名無しさん
2007/07/18(水) 00:43:480514デフォルトの名無しさん
2007/07/18(水) 00:45:20むしろコイツを使いたいのですが・・・。
0515デフォルトの名無しさん
2007/07/18(水) 00:49:280516デフォルトの名無しさん
2007/07/18(水) 00:49:450517デフォルトの名無しさん
2007/07/18(水) 00:53:05>>516 上で作った関数がvoidなのでなんかよくわからないですけど無理っぽいです。
0518デフォルトの名無しさん
2007/07/18(水) 00:54:080519デフォルトの名無しさん
2007/07/18(水) 00:56:000520デフォルトの名無しさん
2007/07/18(水) 00:56:13かえろよw
0521デフォルトの名無しさん
2007/07/18(水) 01:01:13#include <stdio.h>
#define number 5
int ave_p(int va[],int no)
{
int i;
int average;
for (i = 0; i < no; i++)
average = (va[i]/3);
return average;
}
int main(void)
{
int i;
int eng[number];
int mat[number];
int jap[number];
int wa[number];
puts("5人の点数を入力してください");
for (i = 0; i < number; i++) {
printf("[%d] 英語:",i+1); scanf("%d",&eng[i]);
printf(" 数学:",i+1); scanf("%d",&mat[i]);
printf(" 国語:",i+1); scanf("%d",&jap[i]);
}
for (i = 0; i < number; i++)
wa[i] = eng[i] + mat[i] + jap[i];
ave_p(wa,number);
for (i = 0; i < number; i++)
printf("[%d]の平均点は%d点です\n",i + 1,wa);
return 0;
}
0522デフォルトの名無しさん
2007/07/18(水) 01:06:09void ave_p(int va[],int no)
{
int i;
for (i = 0; i < no; i++)
va[i] = (va[i]/3);
}
printf("[%d]の平均点は%d点です\n",i + 1,wa[i]);
0523デフォルトの名無しさん
2007/07/18(水) 01:09:23どうして今までのだとダメだったんでしょう?
0524デフォルトの名無しさん
2007/07/18(水) 01:12:42average を使わずに wa を表示してもダメじゃないわけないじゃん
図でも書いてみて1行1行追っていけばいいよ、どこに何が入ってるのか
0525デフォルトの名無しさん
2007/07/18(水) 01:14:11それはどうしてですか?
0526デフォルトの名無しさん
2007/07/18(水) 01:16:12思いつくままにコーディングしてるから訳わかんなくなるんですよ。
0527デフォルトの名無しさん
2007/07/18(水) 01:21:10とりあえずアドバイスをいただきながらもこうやって作ってみたんですが、
これを2次元配列を用いて処理させるようにいじるのは簡単ですか?
プログラムの実行する内容としては全く同じです
0528デフォルトの名無しさん
2007/07/18(水) 01:29:05void ave_p(int ave[],int va[],int no)
{
int i;
for (i = 0; i < no; i++)
ave[i] = (va[i]/3);
}
int average [number];
ave_p(average,wa,number);
0529デフォルトの名無しさん
2007/07/18(水) 01:41:240530デフォルトの名無しさん
2007/07/18(水) 01:42:35void ave_p(int ave[],int sc[][3],int no)
{
int i;
int average;
for (i = 0; i < no; i++)
ave[i] = ((sc[i][0] + sc[i][1] + sc[i][2])/3);
}
int main(void)
{
int i;
int sc[number][3];
int average [number];
puts("5人の点数を入力してください");
for (i = 0; i < number; i++) {
printf("[%d] 英語:",i+1); scanf("%d",&sc[i][0]);
printf(" 数学:",i+1); scanf("%d",&sc[i][1]);
printf(" 国語:",i+1); scanf("%d",&sc[i][2]);
}
ave_p(average ,sc,number);
for (i = 0; i < number; i++)
printf("[%d]の平均点は%d点です\n",i + 1,average [i]);
return 0;
}
0531デフォルトの名無しさん
2007/07/18(水) 01:52:15>素人すぎて細かいことはよくわからないんです。
よくわからないのに、
>これを2次元配列を用いて処理させるようにいじるのは簡単ですか?
次のステップに行こうとしてるのか?
素人だって言うんならおとなしく基礎から勉強しようぜ
0532デフォルトの名無しさん
2007/07/18(水) 03:23:27image = (unsigned char *)malloc(sizeof(char)*800*600);
の宣言をして
例えば、配列でimage[y][x] というのは
*(image+800*y+x) で合っていると思うのですが
image[y][x+1]を*(image+800*y+(x+1))とすると実行した場合にエラーはでないんですが
プログラムが終了してしまい、デバッガがこの指定に問題があると指していました
おそらく添字が間違っているのですがどう直せばいいのかわからない状態です
よろしくお願いします
0533デフォルトの名無しさん
2007/07/18(水) 03:48:300534デフォルトの名無しさん
2007/07/18(水) 04:16:11で確保してるからimageの型はunsigned char *なんだよな?
yは0〜599、x+1は0〜799に収まってるかい?
0535デフォルトの名無しさん
2007/07/18(水) 05:05:20image[800][600] で宣言した場合は、image[y][x] と *(image+600*y+x)となるであってると思うのですが
うーん、もう1度ちょっと見直してみます。すみません。
0536デフォルトの名無しさん
2007/07/18(水) 05:31:29256階調モノクロ?
0537デフォルトの名無しさん
2007/07/18(水) 05:53:18更にそれを255と0で2値化したものを使っています。
ttp://www.silphix.com/kaiba/image/7/
ここにあるtrace()という関数で配列をポインタに置き換えています。
トレースしてみると最初の判定部分、関数内のswich文のcase5で止まります。
0538デフォルトの名無しさん
2007/07/18(水) 06:43:13imageはNULLになってない?
0539デフォルトの名無しさん
2007/07/18(水) 07:52:221つ目のファイル(main関数がある)で定義したグローバル変数nおよび構造体aを、
2つ目のファイル(自分で作った普通の関数がある)で使っていて、それを一つ目のファイルにヘッダファイルを作ってインクルードしたら、
2つ目のファイルからエラーが出て、nとaは定義されてないと出たのですが、
この場合2つ目のファイルでnとaをそのまま使うにはどのようにしたらいいのでしょうか?
0540デフォルトの名無しさん
2007/07/18(水) 07:59:39すみません。自己解決しそうです。
0541デフォルトの名無しさん
2007/07/18(水) 09:37:030542デフォルトの名無しさん
2007/07/18(水) 09:51:05適当にやってコンパイルエラー消しても
根本的な問題の解決にならんだろ。また起こるぞ。
externでぐぐれ
0543デフォルトの名無しさん
2007/07/18(水) 12:11:350544デフォルトの名無しさん
2007/07/18(水) 17:00:080545デフォルトの名無しさん
2007/07/18(水) 17:04:300546デフォルトの名無しさん
2007/07/18(水) 17:05:31要素数が偶数なら添え字の平均値のintで小数点以下を落としてその次の添え字の要素を引っ張り出して
要素数が奇数ならど真ん中の添え字の要素を引っ張りだせばいいんだよ(´・ω・`)
0547544
2007/07/18(水) 18:49:09申し訳ないのですが、その文の意味もわかりません。専門用語抜きで概略を教えて頂ければありがたいです。
0548デフォルトの名無しさん
2007/07/18(水) 19:12:265つの整数値を小さい順にならべ変え、真ん中(最小を1番目、最大を5番目とすると3番目)にある値が中央値
0549デフォルトの名無しさん
2007/07/18(水) 19:17:20「整数値」ってのは「整数」の「値」って意味だからね。
小さい順ってのは判るよね。
あーそれから、大きい順に並べても大丈夫だから。
0550デフォルトの名無しさん
2007/07/18(水) 19:21:26ソースも載せてください。
0551デフォルトの名無しさん
2007/07/18(水) 19:31:31#include <stdlib.h>
int compareInt(const void * l, const void * r)
{
const int * il = (const int *) l;
const int * ir = (const int *) r;
if (* il < * ir) return -1;
if (* il > * ir) return 1;
return 0;
}
int main()
{
int array[5];
for (int ic = 0; ic < sizeof(array) / sizeof(* array); ++ic) {
if (scanf("%d", & array[ic]) < 1) return 1;
}
qsort(array, sizeof(array) / sizeof(* array), sizeof(* array), compareInt);
printf("median:%d\n", array[sizeof(array) / sizeof(* array) / 2]);
return 0;
}
0553デフォルトの名無しさん
2007/07/18(水) 20:02:110555デフォルトの名無しさん
2007/07/18(水) 20:22:44gcc: installation problem, cannot exec `as': No such file or directory
と出てきてコンパイラされないそうです。
もしよかったら解決方法を教えてくれませんか
ちなみにOSはVistaと聞きました。
0556デフォルトの名無しさん
2007/07/18(水) 22:36:06その友人は普段MinGWでコンパイルしてるわけじゃないんでしょ。
じゃなきゃそんな基本的なエラー出ないからな。
自分でMinGWインストールしたの?
じゃあ、この辺を参考にして再インストールしてみ
ttp://www2.atwiki.jp/ccw/pages/6.html
0557デフォルトの名無しさん
2007/07/18(水) 22:55:31int main(void){
int s[10];
int i;
for(i=0;i<10;i++){
scanf("%d",&s[i]);
}
return 0;
}
これでchar s[10];としてscanfの%dを%cにかえると
文字が5個しか入力できないんですけどどうしてでしょうか?
0558デフォルトの名無しさん
2007/07/18(水) 23:00:04きみの環境が一文字ニバイトだからと予想
0から9まで一バイトずつヘキサで表示してみなよ
0559デフォルトの名無しさん
2007/07/18(水) 23:03:56なあみんな、そのレベルの出題でソートが要求されてるのだろうか?
中央値は最大値と最小値の真ん中のことじゃないのか。
0560デフォルトの名無しさん
2007/07/18(水) 23:09:480561デフォルトの名無しさん
2007/07/18(水) 23:14:10何この曖昧な書き方
0562デフォルトの名無しさん
2007/07/18(水) 23:23:58ヘキサとはなんですか??なんか初心者なのでいまいちわからないです…
0563デフォルトの名無しさん
2007/07/18(水) 23:29:44最小値と最大値を足して2で割った値とでも言いたいのだろうが、
中央値といえばソートして中央に位置する値のことだと統計の世界で決まっている。
http://ja.wikipedia.org/wiki/%E4%B8%AD%E5%A4%AE%E5%80%A4
0564デフォルトの名無しさん
2007/07/18(水) 23:30:05改行文字を読み込んでんだろ
scanf(" %c", s+i);
にして改行文字読み飛ばせばいい
0565デフォルトの名無しさん
2007/07/18(水) 23:30:140566デフォルトの名無しさん
2007/07/18(水) 23:32:09一文字ごとにEnter叩いているだろ。そいつが次のscanf()で食われているんじゃね?
0567デフォルトの名無しさん
2007/07/18(水) 23:38:15デシマル=10進法
ヘキサ=6
0568デフォルトの名無しさん
2007/07/19(木) 00:08:19なるほど改行文字が原因だったんですね…。勉強になりました
0569デフォルトの名無しさん
2007/07/19(木) 00:52:33っていうくらい素人な奴のために
C言語のいい本を教えてくれないか
0570デフォルトの名無しさん
2007/07/19(木) 01:04:01試食版でぐぐれ
ごめんちょっと言ってみたかっただけ
0571デフォルトの名無しさん
2007/07/19(木) 01:16:450572デフォルトの名無しさん
2007/07/19(木) 01:41:200573・∀・)っ-○◎●
2007/07/19(木) 01:46:380574デフォルトの名無しさん
2007/07/19(木) 01:46:400575デフォルトの名無しさん
2007/07/19(木) 01:57:57本屋で挫折してもいいし、できそうだと思ったら1冊買って、それから挫折してもいい
0576デフォルトの名無しさん
2007/07/19(木) 04:18:52「初めてのアデノシン三リン酸」とか
「猫でもわかるカロタイプ」とか
「明解マロン派」とか
「1週間で分かるロッドマン・フィルブリック」とか
「ヨハネ・パウロ2世完全攻略」とか
大多数が何?誰?って言うような奴にも入門書があったりするんかな
0577デフォルトの名無しさん
2007/07/19(木) 04:44:30801本のタイトルにしか見えん。
化学系の院生やってたけど、ある程度マニアックな題材になると
それを学ぶこと自体が「入門」ではあり得なくなるので
そういう本は必然的に「専門書」と呼ばれることになるんだと思う。
学部生が読むような量子化学の初歩を書いた入門書はあるけど、
化学とは関係ない人が見たらそんなの専門書以外の何物でもないし。
0578デフォルトの名無しさん
2007/07/19(木) 18:18:57良い対策知りませんか?
0579デフォルトの名無しさん
2007/07/19(木) 18:20:330580579
2007/07/19(木) 18:25:560581デフォルトの名無しさん
2007/07/19(木) 18:30:55問題の起こる最小のコードを晒してくれないか?
下は *おそらく* うまくいく例
#include<stdio.h>
int main(void){
char mojiretu[100];
printf("文字列を入力して下さい : ");
fgets(mojiretu, sizeof(mojiretu), stdin);
printf("%s", mojiretu);
return 0;
}
0582579
2007/07/19(木) 18:37:36int j;
for(j=0; j<i; j++){
putchar(hoge[i]);
sleep(1);
}
}
ってな感じで1秒毎に1文字ずつ表示する関数を作ったんです。
0583デフォルトの名無しさん
2007/07/19(木) 18:39:380584デフォルトの名無しさん
2007/07/19(木) 18:40:01hoge[i] じゃなくて hoge[j] じゃなかろうか?
0585579
2007/07/19(木) 18:40:130586デフォルトの名無しさん
2007/07/19(木) 18:42:310587デフォルトの名無しさん
2007/07/19(木) 19:08:26printf(); scanf("%d",&hoge);ってやると最初のprintf()が表示されないので、
printf(); fflush(stdout); scanf("%d",&hoge)ってやらないと駄目なんですよね。
こういうのって人それぞれですか?
0588デフォルトの名無しさん
2007/07/19(木) 19:32:320589デフォルトの名無しさん
2007/07/19(木) 19:42:540590デフォルトの名無しさん
2007/07/19(木) 19:53:580591デフォルトの名無しさん
2007/07/19(木) 19:59:580592デフォルトの名無しさん
2007/07/19(木) 20:01:170593デフォルトの名無しさん
2007/07/19(木) 20:22:45レスさんくす。
C言語の入門書も関係ない人が見たら専門書にしか見えないのかな。
そうすると、C言語?おいしいの?って奴は大変だな。1冊読破する前に挫折しそうだ。
>801本のタイトルにしか見えん。
すまん。
アマゾンにあったC言語の書籍名に、テキトーにググって見つかったよく知らない単語を入れ替えただけで、全く何も考えてなかった。
つーかヨハネ・パウロ2世って前ローマ教皇か。有名人じゃん、駄目だな俺。
0594デフォルトの名無しさん
2007/07/19(木) 20:33:520595デフォルトの名無しさん
2007/07/19(木) 20:37:19今でもみるとゾッとするw
0596デフォルトの名無しさん
2007/07/19(木) 21:33:54というか思いつきません
どなたかヒントorアドバイスください
0597デフォルトの名無しさん
2007/07/19(木) 21:36:270598デフォルトの名無しさん
2007/07/19(木) 22:30:33len = strlen(word); n = len/2;
for (i = 0; i < n; i++) if (word[i] != word[len-i-1]) break;
if (i < n) {
/*回文である*/
} else {
/*回文でない*/
}
0599デフォルトの名無しさん
2007/07/19(木) 22:32:30いかないなかい
0600デフォルトの名無しさん
2007/07/20(金) 00:37:16つエキスパートCプログラミング
0601デフォルトの名無しさん
2007/07/20(金) 00:44:250602デフォルトの名無しさん
2007/07/20(金) 00:46:52その本を書ける人は、売れないことが分かっている本を書かない
0604デフォルトの名無しさん
2007/07/20(金) 01:18:570605・∀・)っ-○◎●
2007/07/20(金) 01:22:08C++のくだりは不要だったな。
回文判定は、環境依存だけど、strrevしてstrcmpが簡単。
0606デフォルトの名無しさん
2007/07/20(金) 01:37:29int i, j, len;
len = strlen(str);
for(i = 0, j = len - 1; i < j; i++, j--) {
if(str[i] != str[j]) return 0;
}
return 1;
}
0607デフォルトの名無しさん
2007/07/20(金) 01:49:06所詮お前は○産大未満
0608・∀・)っ-○◎●
2007/07/20(金) 02:09:160609デフォルトの名無しさん
2007/07/20(金) 02:10:370610・∀・)っ-○◎●
2007/07/20(金) 02:14:52コーディングの手間の問題なのか実効効率の問題なのかだわな。
数MHzの石で動かすの?
突き詰めれば0終端文字列にstrlen使うくらいなら、PASCAL文字列使ったほうが
効率がいいとか、そーいう次元の話になっちゃうよ。
0611・∀・)っ-○◎●
2007/07/20(金) 02:17:45MacのAPIは文字列はどっちでも受けられるようになってる。
0612デフォルトの名無しさん
2007/07/20(金) 02:20:42所詮○産大未満
0613デフォルトの名無しさん
2007/07/20(金) 02:23:490614デフォルトの名無しさん
2007/07/20(金) 02:27:21qsort()の後bsearch() して最初にヒットするものを表示させようとしても
一番先頭をさしてくれません。
0615・∀・)っ-○◎●
2007/07/20(金) 02:29:55stable sort(ライブラリにあるかどうかはやっぱり環境依存)かバブルソートを使いましょう。
0617デフォルトの名無しさん
2007/07/20(金) 02:34:070618・∀・)っ-○◎●
2007/07/20(金) 02:35:360619デフォルトの名無しさん
2007/07/20(金) 02:36:500620デフォルトの名無しさん
2007/07/20(金) 02:38:42と少し擁護してみるが、まぁ他人の将来なんか知ったこっちゃ無い
0621デフォルトの名無しさん
2007/07/20(金) 02:50:15バブルソートなんか使うくらいなら、
元のインデックスを含めて qsort しろよ
0622デフォルトの名無しさん
2007/07/20(金) 03:06:22人間に過ぎないんだ。お互いに生きているこの時間を有意義に使おうや。
どうせいつかは死ぬんだ、楽しく生きた方がマシだろ?あんたの顔は(ryだが。
さびしがりやってのは、すぐに自分を誇示して自分を慰め始めるから困るぜ。
0623・∀・)っ-○◎●
2007/07/20(金) 03:08:58関数呼び出しのオーバーヘッドとか考えると微妙だよ。
むろん、自身のスタック再帰よりもコールバックの比較関数がね。
まあquicksort程度なら俺は暗記してるけどさ。
バブルソートはシンプルだし近い要素同士の比較だからキャッシュのヒット率は上げやすい。
まあ、要素数がそんなに無い場合だが。
C++のソートならコンパレータをインライン展開できるから速い。
ちなみに俺はよく使うのはstd::vectorコンテナとstable_sortだな。
アレって実現方法は大概、ヒープソートやマージソートあたりだな。
0624デフォルトの名無しさん
2007/07/20(金) 03:12:470625デフォルトの名無しさん
2007/07/20(金) 03:14:130626・∀・)っ-○◎●
2007/07/20(金) 03:18:01実測してみ?数値型の比較ならファンクタを作る必要すらない。
まあCスレで言うのもなんだが。
0627・∀・)っ-○◎●
2007/07/20(金) 03:20:24http://0xcc.net/blog/archives/000052.html
個人ブログだけどこの辺で納得ヨロ
0628デフォルトの名無しさん
2007/07/20(金) 03:23:32実行効率とコーディング効率がすべてじゃない環境もあるんです
察してください
0629・∀・)っ-○◎●
2007/07/20(金) 03:31:47それは俺も同じだ。
0630デフォルトの名無しさん
2007/07/20(金) 03:34:000631デフォルトの名無しさん
2007/07/20(金) 03:35:130632・∀・)っ-○◎●
2007/07/20(金) 04:10:13ようはCとC++の逆転現象がおきるくらい、qsortではコールバックのオーバーヘッドが大きいってこと。
>>621の方法だと、配列の添字を保存する領域を別途確保したうえで
qsortの呼び出しの度に添字をセットする羽目になるね。
まあ、ヒープソートでもオーダ安定させるには似たようなことする必要があるけど。
それでいてbsearchはどうしようもない。
まあ、ヒープソートのツリー構造のままダイレクトに二分探索かけるのが妥当じゃねーの。
http://ja.wikipedia.org/wiki/%E3%83%92%E3%83%BC%E3%83%97%E3%82%BD%E3%83%BC%E3%83%88
0633デフォルトの名無しさん
2007/07/20(金) 09:39:230634デフォルトの名無しさん
2007/07/20(金) 11:25:01自分から難しくしていって失敗するタイプだな。
0635デフォルトの名無しさん
2007/07/20(金) 11:43:320636匿名
2007/07/20(金) 14:01:580637デフォルトの名無しさん
2007/07/20(金) 14:02:340638匿名
2007/07/20(金) 14:03:320639デフォルトの名無しさん
2007/07/20(金) 14:06:160640デフォルトの名無しさん
2007/07/20(金) 14:06:42東京ガスですか?
0641デフォルトの名無しさん
2007/07/20(金) 14:09:40料金形態を詳しく
0642デフォルトの名無しさん
2007/07/20(金) 14:10:13うぜえ消えろ
0643お願いします!
2007/07/20(金) 14:11:13この問題です!よろしくお願いします!
0644デフォルトの名無しさん
2007/07/20(金) 14:12:16ほれ
#include <stdlib.h>
#include <stdio.h>
int main() {
int a,b;
a = rand() % 6 + 1
printf("a = %d\n", a);
b = rand() % 6 + 1;
printf("b = %d\n", b);
printf("%d", a + b);
return 0;
}
0645デフォルトの名無しさん
2007/07/20(金) 14:13:50#include <stdlib.h>
#include <stdio.h>
int main() {
printf("%d", rand() % 10 + 2);
return 0;
}
0646デフォルトの名無しさん
2007/07/20(金) 14:21:09コンパイルしてないでしょ
0647デフォルトの名無しさん
2007/07/20(金) 14:46:04変なサイコロ使ってるんだな
0648デフォルトの名無しさん
2007/07/20(金) 14:46:310649デフォルトの名無しさん
2007/07/20(金) 14:57:500650デフォルトの名無しさん
2007/07/20(金) 15:16:44普通のサイコロなら出目の確率はこうなるはずだろってこと
2 1/36
3 2/36
4 3/36
5 4/36
6 5/36
7 6/36
8 5/36
9 4/36
10 3/36
11 2/36
12 1/36
0651デフォルトの名無しさん
2007/07/20(金) 15:18:570652デフォルトの名無しさん
2007/07/20(金) 15:24:37C/C++の宿題を片付けます 92代目
http://pc11.2ch.net/test/read.cgi/tech/1183511364/
0653デフォルトの名無しさん
2007/07/20(金) 15:26:12C/C++の宿題を片付けます 93代目
http://pc11.2ch.net/test/read.cgi/tech/1184506311/
0654デフォルトの名無しさん
2007/07/20(金) 22:47:28str[][2][40] = {
{"dog", "Hun"}
{"no", "nein"}
};
って一体どういう風に格納されてるの?
0655デフォルトの名無しさん
2007/07/20(金) 22:50:34dog\0の後ろは0x00で埋まる。今回の場合なら36個の0で。
int i[100] = { 0 };が全て0で初期化されるのと同じ理由。
0656デフォルトの名無しさん
2007/07/20(金) 22:56:52str[]はchar *の配列(char **)が格納され {"dog", "Hun"}, {"no", "nein"}
str[][2]はcharの配列(char *)が格納され "dog", "Hun"とか"no", "nein"
str[][2][40]はcharが格納される 'd', 'o', 'g', '\0'など
0657デフォルトの名無しさん
2007/07/20(金) 23:01:450658デフォルトの名無しさん
2007/07/20(金) 23:10:39こんな感じだろうか
ttp://cgi2.coara.or.jp/~negichan/imgloda/src/img1231.gif
0659654,658
2007/07/20(金) 23:14:28頭が物故割れそうだ
0660デフォルトの名無しさん
2007/07/20(金) 23:37:580661デフォルトの名無しさん
2007/07/20(金) 23:38:570663デフォルトの名無しさん
2007/07/20(金) 23:43:04紙は平面なのだから、まず3次元配列から疑問に思えよ。
その3次元char配列なら、(1次元配列である)文字列を
縦横2次元に並べるという形で表現できる。
それ以上の次元の配列も同様に、数次元毎に1つのグループとして、
それを縦横に並べるようにすれば、平面で何次元でも表現できる。
それが見やすいかどうかは別問題だが。
0664デフォルトの名無しさん
2007/07/21(土) 00:40:30テキストの例題なぞ今更だ。すらすら解ける。
だが、仕事で使うのはWIN32−APIぐらいなもんだ。
普通にプログラムしたって二次元配列すら滅多に使わないよ。
画像扱っていないからな。
0665664
2007/07/21(土) 00:42:28○画像扱っていないからかな。
0666デフォルトの名無しさん
2007/07/21(土) 01:03:53#include<stdio.h>
#include<string.h>
int error;
struct id_pass{
char id[15],pass[15];
};
int idpa(struct id_pass part1){
int i,p;
printf("Welcom to Hack plan\n");
error=2;
while(error!=0){
error=2;
printf("ID:");
fgets(part1.id,sizeof(part1.id),stdin);
part1.id[strlen(part1.id)-1]='\0';
--error;/*error=1*/
0667デフォルトの名無しさん
2007/07/21(土) 01:08:03if(i<=3 || i>=13){
++error;/*もしエラーならばerror=2*/
}
printf("PASS:");
fgets(part1.pass,sizeof(part1.pass),stdin);
part1.pass[strlen(part1.pass)-1]='\0';
p=strlen(part1.pass);/*pにPASSの長さを代入*/
if(p<=3 || p>=13){
++error;/*エラーならerror=3*/
}
--error;/*正常ならerror=0でループ脱出*/
if(error>=1)
printf("Error:Please 4-12 length for ID or PASS\n");
}
return ;
}
0668デフォルトの名無しさん
2007/07/21(土) 01:09:14struct id_pass formal_id;
idpa(formal_id);
printf("正式ID:%s\n",formal_id.id);
printf("正式PASS:%s\n",formal_id.pass);
return 0;
}
0669デフォルトの名無しさん
2007/07/21(土) 01:11:240670654
2007/07/21(土) 01:13:31str[0][1][40] = いい男…
ry)
str[x][y][z] = しーましェーん!
っていうふうになること考えれば少しわかったようなわからないような
でもなんで>>654の初期化で2単語しか入れないのに2次元目が[2]なんだ?
ただ余裕とってるだけ?
0671デフォルトの名無しさん
2007/07/21(土) 01:14:43というか改行多すぎる言われて面倒だ
0672デフォルトの名無しさん
2007/07/21(土) 01:16:46i[0]=1;//OK
i[1]=2;//OK
i[2]=3;//NG
0673654
2007/07/21(土) 01:22:48いろいろ助かった
みんなありがとう
0674デフォルトの名無しさん
2007/07/21(土) 01:22:51ポインタで指定したらmain関数にすら帰ってこなくなったw
自分自身何度かポインタなり色々変えてみたりもしたつもりだ、まぁ1時30分で寝るけどな
0675デフォルトの名無しさん
2007/07/21(土) 01:27:23だめだ、ポインタにしたら(null)が戻ってくるようになった。じゃあ寝るな
おやすみ
0676デフォルトの名無しさん
2007/07/21(土) 01:27:35こんな感じでイメージすればいいんじゃないかな。
ttp://vista.jeez.jp/img/vi8494882248.png
0677デフォルトの名無しさん
2007/07/21(土) 01:28:57ま、いっか。
0678デフォルトの名無しさん
2007/07/21(土) 01:29:32str[0] b
str[1] a
str[2] k
str[3] a
str[4] \0
最初は5個分って意味で、0〜4で5個分になる
0679デフォルトの名無しさん
2007/07/21(土) 01:32:20完全な理解には遠いがだいぶスッキリしてきた
早速課題プログラム作ってくる
0680デフォルトの名無しさん
2007/07/21(土) 01:42:400, 1, 2, 3, 4,
};
とする場合、int を 5 個並べる形になる。
int array[2][5] = {
{ 0, 1, 2, 3, 4 },
{ 5, 6, 7, 8, 9 },
};
とする場合、int[5] を 2 個並べる形になる。
int array[3][2][5] = {
{
{ 0, 1, 2, 3, 4 },
{ 5, 6, 7, 8, 9 },
},
{
{ 10, 11, 12, 13, 14 },
{ 15, 16, 17, 18, 19 },
},
{
{ 20, 21, 22, 23, 24 },
{ 25, 26, 27, 28, 29 },
},
};
とする場合、int[2][5] を 3 個並べる形になる。
一般的に言えば、int array[X][Y]...[Z]; の場合、int[Y]...[Z] を X 個並べる形になる。
0681デフォルトの名無しさん
2007/07/21(土) 17:04:24/* 5章総合理解度チェック5 隠し文字列の長さをハイフンで表示する
ハングマンゲーム ユーザーはいろいろな文字を当てはめてその単語を推測する
入力された文字が単語に含まれていたらその部分を表示
完成するまでに入力した文字数を数え、15回以下ならプレイヤーの勝利とする。"concatenation" */
#include <stdio.h>
#include <string.h>
#include <conio.h>
int main(void)
{
char magic_word[40] = "contatenation" ,
correct_word[40];
char ch;
int i, count=0; /* 文字列用カウンタ, 入力回数カウンタ */
int len; /* magic_word[]の長さ */
printf("ハングマンゲームを開始します。\n");
len = strlen(magic_word);
for(i=0; i<len; i++)
correct_word[i] = '-'; /* correct_wordにハイフンを格納 */
printf(correct_word);
0682デフォルトの名無しさん
2007/07/21(土) 17:09:10do{
printf("\n予想した文字を入力してください。: ");
ch = getche();
printf("\n");
for(i=0; i<len; i++)
if(ch == magic_word[i])
correct_word[i] = magic_word[i];
printf(correct_word);
count++;
} while(strcmp(magic_word , correct_word));
printf("\n%d 回で完成しました。" , count);
if(count<=15) printf("\nプレイヤーの勝利です。");
else printf("\nプレイヤーの負けです。");
return 0;
}
このコードで一応要求された動きはできるんだが、
magic_word[]を"contatenetion"から"yaranaika"に変えると表示が
---------ー@
になってしまう(要求された動作は文字数分ハイフン表示)
どこでおかしくなってるんだろう
コンパイラはbcc
0683デフォルトの名無しさん
2007/07/21(土) 17:14:40要求された動作(ハングマンゲーム)
ある単語(この場合contatenation)をマジックワードとして設定、文字数分ハイフンを表示
プレイヤーは文字数から単語を推測、一文字ずつ文字を入力
その文字が単語に含まれていたら該当する部分を表示する
(例)------------- → a入力 → ----a---a----
wikipedia
ttp://ja.wikipedia.org/wiki/%E3%83%8F%E3%83%B3%E3%82%B0%E3%83%9E%E3%83%B3_(%E3%82%B2%E3%83%BC%E3%83%A0)
0684デフォルトの名無しさん
2007/07/21(土) 17:24:25contatenatio →正常
computer →正常
civirization →末尾に || という記号がつく
マジックワードを任意に指定できるようにした
>>681の部分を置き換える
ごちゃごちゃですいません
/* ここから */
#include <stdio.h>
#include <string.h>
#include <conio.h>
int main(void)
{
char magic_word[40],
correct_word[40];
char ch;
int i, count=0; /* 文字列用カウンタ, 入力回数カウンタ */
int len; /* magic_word[]の長さ */
printf("ハングマンゲームを開始します。\n");
printf("マジックワードを設定してください。: ");
gets(magic_word);
len = strlen(magic_word);
for(i=0; i<len; i++)
correct_word[i] = '-'; /* correct_wordにハイフンを格納 */
printf(correct_word);
0685デフォルトの名無しさん
2007/07/21(土) 17:36:580686デフォルトの名無しさん
2007/07/21(土) 17:50:24コンパイラが自動で付加するというのを読んでほとんど気にしてなかった…
どこをどうすればいいんでしょう
0687デフォルトの名無しさん
2007/07/21(土) 17:56:510688デフォルトの名無しさん
2007/07/21(土) 18:01:46変数も時々初期化忘れてとんでもない数値になったりするし大切なんだね…
危ない穴持ったまま突き進むとこだった
本当にありがとう
0689デフォルトの名無しさん
2007/07/21(土) 18:23:59曲面z=x^2y^2と平面x=0,y=0,z=0,x=a,y=bで囲まれた体積Vを計算せよ。
V=∬f(x,y)dxdy
領域{0<=x<=a, 0<=y<=b}でf(x,y)=x^2y^2
ただしa=10,b=20として分割数n,mは適当に決めよ。
--区分求積法による体積の求め方--
V=∬f(x,y)dxdy≒(i=0〜n-1)(j=0〜m-1)f(xi,yj)ΔxΔy(Δx=(b-a)/n, Δy=(d-c)/mでn,mは分割数)
解析解はV=888888.9なんですがV=0となってしまいます。
どこが間違ってるのかわかりません。お願いします。
0690689続き
2007/07/21(土) 18:25:41double a = 10;
double b = 20;
double f(double x, double y);
int main(void)
{
double V, x[1000], y[1000], dx, dy;
int i, j, n, m;
printf("分割数を設定してください。\n");
printf("n = "); scanf("%lf", &n);
printf("m = "); scanf("%lf", &m);
0691デフォルトの名無しさん
2007/07/21(土) 18:25:53>correct_word[40] = {0}として0で初期化する。
0で初期化したら'\0'は必要ないんですか?
0692689続き
2007/07/21(土) 18:26:51dy = (b - 0) / m;
V = 0;
for (i=0; i <= n-1; i++) {
for (j=0; j <= m-1; j++) {
x[i] = i * dx;
y[j] = j * dy;
V += f(x[i], y[j]) * dx * dy;
}
}
printf("V = %f\n", V);
return 0;
}
double f(double x, double y) {
return x * x * y * y;
}
0693デフォルトの名無しさん
2007/07/21(土) 18:32:15\0と0が同じだから
0694デフォルトの名無しさん
2007/07/21(土) 18:37:110695デフォルトの名無しさん
2007/07/21(土) 18:47:01ちゃんと動きました
0696デフォルトの名無しさん
2007/07/21(土) 18:50:34分割数1000くらいまでは動作するんですが、分割数を10000とかにするとセグメントエラーがでるんです。
なんでですか?
0697デフォルトの名無しさん
2007/07/21(土) 18:53:290698デフォルトの名無しさん
2007/07/21(土) 18:54:03>scanf("%lf", &n);
>scanf("%lf", &m);
がおかしい
scanf("%d", &n);
scanf("%d", &m);
に汁
0699デフォルトの名無しさん
2007/07/21(土) 18:54:440700デフォルトの名無しさん
2007/07/21(土) 18:55:55セグメントエラーはメモリでアクセスしちゃだめなところにアクセスしてる
>>697が原因だろうね
0701デフォルトの名無しさん
2007/07/21(土) 18:57:05スタックオーバーフロー
コンパイラオプションでスタック領域を拡張するか
ヒープメモリーを使え
0702デフォルトの名無しさん
2007/07/21(土) 19:10:08配列のサイズ大きくしたら動作しました
ありがとうございました
0703デフォルトの名無しさん
2007/07/21(土) 19:14:33malloc()とfree()覚えなよ
0704デフォルトの名無しさん
2007/07/21(土) 19:26:34malloc()とfree()ですか…
勉強してみます
0705デフォルトの名無しさん
2007/07/21(土) 19:33:590706デフォルトの名無しさん
2007/07/21(土) 19:44:45ユーザの入力した分割数によって必要な分のメモリ領域をmallocで確保して配列代わりに使ってみて
使い終わったらfreeで領域解放
0707デフォルトの名無しさん
2007/07/21(土) 20:07:05先輩方どこがおかしいのか教えてください。あと最終的にcsvファイルにするのでこんな書き方してます。数式ライブラリも一応習いました。
#include <stdio.h>
int main(void)
{
int i;
float a,b,X[5],Y[5],c,d,e,f,x,y;
for(i=1; i<6; i++)
{
printf("#X[%d]: ", i);
scanf("%f", &X[i]);
}
for(i=1; i<6; i++)
{
printf("#Y[%d]: ", i);
scanf("%f", &Y[i]);
}
c=X[1]+X[2]+X[3]+X[4]+X[5];
d=Y[1]+Y[2]+Y[3]+Y[4]+Y[5];
e=X[1]*X[1]+X[2]*X[2]+X[3]*X[3]+X[4]*X[4]+X[5]*X[5];
f=X[1]*Y[1]+X[2]*Y[2]+X[3]*Y[3]+X[4]*Y[4]+X[5]*Y[5];
0708つづき
2007/07/21(土) 20:08:09a=(5*f-c*d)/(5*e-c*c);
b=(e*d-f*c)/(5*e-c*c);
printf("#a is %f\n", a);
printf("#b is %f\n", b);
printf("#c is %f\n", c);
printf("#d is %f\n", d);
printf("#e is %f\n", e);
printf("#f is %f\n", f);
for(x=0;x<100;x++)
{
y=a*x+b;
printf("%f,%f\n",x,y);
}
return 0;
}
以上です
0709デフォルトの名無しさん
2007/07/21(土) 20:15:270710デフォルトの名無しさん
2007/07/21(土) 20:20:55X[5],Y[5]って宣言したんだから、0〜4を使わないと駄目だよーww
0711デフォルトの名無しさん
2007/07/21(土) 20:32:02ワロタwww
0712707
2007/07/21(土) 21:11:130713デフォルトの名無しさん
2007/07/21(土) 21:14:330714デフォルトの名無しさん
2007/07/21(土) 21:17:310715デフォルトの名無しさん
2007/07/21(土) 22:13:52*p = toupper(*p);
p++;
}
を、
while (*p)
*p++ = toupper(*p);
にできるのはなんでなんだぜ?
0716デフォルトの名無しさん
2007/07/21(土) 22:16:12逆に++?だと、インクリメント後に演算って感じかな
とc初心者の私が答えてみる
0717デフォルトの名無しさん
2007/07/21(土) 22:16:150718デフォルトの名無しさん
2007/07/21(土) 22:16:500719715
2007/07/21(土) 22:21:29頭が固いと苦労するな…(´・ω・)
0720399
2007/07/21(土) 23:09:26またエラトステネスで1000までの素数を表示するプログラムなんですが、
#include <stdio.h>
int main(void)
{
int a,n[1000];
a=n%2
if(a!=0)
a=n%3
if(a!=0)
a=n%5
if(a!=0)
a=n%7
if(a!=0)
a=n%11
if(a!=0)
a=n%13
if(a!=0)
a=n%17
if(a!=0)
a=n%19
0721399
2007/07/21(土) 23:10:21a=n%23
if(a!=0)
a=n%29
if(a!=0)
a=n%31
if(a!=0)
printf("%d",n);
return 0;
}
っていう考え方もあると思うのですが理解してもらえますかね???
でもこれじゃあエラーがでちゃうんです。。。
どこがプログラム的におかしいか教えてもらえませんか?
0722デフォルトの名無しさん
2007/07/21(土) 23:11:54エラーの内容くらいコピペしてくらはい。
ifのネストが大きすぎるのでは?とESPしてみる。
0723デフォルトの名無しさん
2007/07/21(土) 23:12:51ネストなんてしてねぇ・・・OTL
配列であるnの使い方がおかしいよ。
0724デフォルトの名無しさん
2007/07/21(土) 23:12:56エラトステネスの篩はどういうものかわかる?
あと、セミコロンを出し惜しんじゃダメよ
0725デフォルトの名無しさん
2007/07/21(土) 23:13:060726デフォルトの名無しさん
2007/07/21(土) 23:13:12どこがエラトステネスの篩なのかさっぱり分らんだろ
0727399
2007/07/21(土) 23:14:01MAKE Version 5.2 Copyright (c) 1987, 2000 Borland
bcc32 -WC -3 -Od -w- -AT -pc -H- -k -b -v -y -DDEBUG -nDebug -c C:\borland\bcc55\Bin\report\report7.c
Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
c:\borland\bcc55\bin\report\report7.c:
エラー E2087 c:\borland\bcc55\bin\report\report7.c 8: ポインタの不正な使用(関数 main )
エラー E2379 c:\borland\bcc55\bin\report\report7.c 9: ステートメントにセミコロン(;)がない(関数 main )
*** 2 errors in Compile ***
** error 1 ** deleting Debug\report7.obj
Compile End !! (Elapsed time 0:00.100)
って書いてありました。おねがいします。。。
0728デフォルトの名無しさん
2007/07/21(土) 23:18:02基本が全然できてないんすけど・・・
C言語を勉強するのかエラトステネスのアルゴリズムを理解したいのか・・・
0729399
2007/07/21(土) 23:18:22だから別に作ってみたんです。
0730デフォルトの名無しさん
2007/07/21(土) 23:18:54どこの学校だ?そんな講師がいる学校、辞めろ
0732デフォルトの名無しさん
2007/07/21(土) 23:24:43生かすも何も、それ自体がエラトステネスの篩の手順を無視しているし
どうやってそれで素数を求めるんだ?
0733デフォルトの名無しさん
2007/07/21(土) 23:25:53http://ja.wikipedia.org/wiki/%E3%82%A8%E3%83%A9%E3%83%88%E3%82%B9%E3%83%86%E3%83%8D%E3%82%B9%E3%81%AE%E7%AF%A9
0734デフォルトの名無しさん
2007/07/21(土) 23:27:09表示のところの
for(c=1,i=3; i<=MAX; i+=2) {
を
for(c=1,i=0; i<=MAX; i++) {
にすると。。
0735399
2007/07/21(土) 23:28:52次に3の倍数じゃないnを求めて
次に5の倍数じゃないnを求めて
・
・
・
最後に31の倍数じゃないnを求めて
残ったnを表示する
見たいな感じで作ろうとしたんですけど。。。
0736デフォルトの名無しさん
2007/07/21(土) 23:29:49int a,n[1000];
a=n%2
nの使い方もおかしい
0737デフォルトの名無しさん
2007/07/21(土) 23:31:12それじゃまるで素数は1個しか残らないみたいじゃない
0738デフォルトの名無しさん
2007/07/21(土) 23:34:060740399
2007/07/21(土) 23:35:480741デフォルトの名無しさん
2007/07/21(土) 23:37:370742デフォルトの名無しさん
2007/07/21(土) 23:40:36#include <stdio.h>
#define MAX 1001
int main(void) {
int prime[MAX]={0},i,j;
prime[2]=1;
for(i=0; i<MAX; i++) prime[i]=1;
for(i=2; i*i<MAX; i++) {
if(prime[i]==1) {
for(j=i*2; j<MAX; j+=i)
prime[j]=0;
}
}
for(i=2,c=0; i<MAX; i++) {
if(prime[i])
printf("%d ",i);
}
return 0;
}
0743デフォルトの名無しさん
2007/07/21(土) 23:41:19エラトステネスの篩ではないので見せないでいいか
0744デフォルトの名無しさん
2007/07/21(土) 23:41:40> for(i=2,c=0; i<MAX; i++) {
ここの ,c=0 は要らんかった
0745デフォルトの名無しさん
2007/07/21(土) 23:45:55prime[2]=1; < これ要らんかったw
for(i=0; i<MAX; i++) prime[i]=1; < i=2; からやった。なんか無駄を省かないでやるのまんどっち
0747デフォルトの名無しさん
2007/07/21(土) 23:48:07これはどういう意味でしょうか
0748デフォルトの名無しさん
2007/07/21(土) 23:49:030749デフォルトの名無しさん
2007/07/21(土) 23:49:04aの中のnotを評価して0ならスルー、それ以外ならそのif以下の処理をする
0750デフォルトの名無しさん
2007/07/21(土) 23:49:250751デフォルトの名無しさん
2007/07/21(土) 23:51:11if(a!=0)処理
これと同じってことですか?
NULLでもいいんですか?
0752デフォルトの名無しさん
2007/07/21(土) 23:51:37値渡しだから返ってこなくて正解
0753デフォルトの名無しさん
2007/07/21(土) 23:54:01いっそ、>>0721で。
0754デフォルトの名無しさん
2007/07/21(土) 23:54:20if(a==0) 処理 と同じじゃないか?
a==0 のとき !a が非ゼロ
a!=0 のとき !a がゼロだから
0755デフォルトの名無しさん
2007/07/21(土) 23:56:06ん〜〜、まぁそういうことにもなる。a=0 の場合、!a は1に、それ以外は!a は 0 に。
#include <stdio.h>
int main(void) {
int a;
a=0;
printf("a:%d !a:%d \n",a,!a);
a=1;
printf("a:%d !a:%d \n",a,!a);
a=5;
printf("a:%d !a:%d \n",a,!a);
return 0;
}
0756720
2007/07/21(土) 23:56:58このプログラムのソースのアルゴリズムを理解しないと
点貰えないのでがんばって理解してみます!
ありがとうございました!!!!!
0757デフォルトの名無しさん
2007/07/21(土) 23:58:21a=0のとき、!aはの評価が1になってif分以下の処理がされる
0以外だと !a の評価は 0 になるんでスルー。
0758デフォルトの名無しさん
2007/07/22(日) 00:01:312から素数が見つかるごとに、その2倍以上の 素数xn (nは2以上の整数)
になるものは当然素数じゃないんで、順番に篩い落とすわけだが
既に提示されているソースは、既に篩い落とされていると分っている部分は
敢えて if(prime[i]==1) ってのを省略しているから、それが引っかかったんじゃないか?
0759デフォルトの名無しさん
2007/07/22(日) 00:08:27aがint型じゃないと違う結果だけどねw
#include <stdio.h>
int main(void) {
float a;
a=0.0;
printf("a:%g !a:%g \n",a,!a);
a=0.1;
printf("a:%g !a:%g \n",a,!a);
a=5.0;
printf("a:%g !a:%g \n",a,!a);
return 0;
}
0760デフォルトの名無しさん
2007/07/22(日) 00:11:03!a の型は整数型でしょ
0761デフォルトの名無しさん
2007/07/22(日) 00:11:17>>755
>>757
すみません混乱してきましたw
レスありがとうございます。
考え直してみます
>>759
すみませんintです><
0762デフォルトの名無しさん
2007/07/22(日) 00:16:48でしょって、そういうことじゃなくてint型でなければ結果は違うよって話だよ
0763デフォルトの名無しさん
2007/07/22(日) 00:19:050764デフォルトの名無しさん
2007/07/22(日) 00:20:41既存の関数を自作しろって問題が一発で解けたりするとうれしいな
お前ら愛してる
ありがとう
0765デフォルトの名無しさん
2007/07/22(日) 00:37:39#include <stdio.h>
int main(void) {
float a;
a=0.0;
printf("a:%g !a:%d \n",a,!a);
a=0.1;
printf("a:%g !a:%d \n",a,!a);
a=5.0;
printf("a:%g !a:%d \n",a,!a);
return 0;
}
の実行結果は下のようになったんだけど、>>762 の環境では整数の時と同じにようにならない?
実行結果
a:0 !a:1
a:0.1 !a:0
a:5 !a:0
0766デフォルトの名無しさん
2007/07/22(日) 00:39:160767デフォルトの名無しさん
2007/07/22(日) 00:41:22ん〜〜〜、0か1にはならんかったよ。俺んとこはこうなった。
a:0 !a:4.94066e-324
a:0.1 !a:5.23869e-11
a:5 !a:2048
0768デフォルトの名無しさん
2007/07/22(日) 00:46:060769デフォルトの名無しさん
2007/07/22(日) 00:46:39!a の書式指定は %d じゃないと…
これも追加してみて
printf("%g\n", 0, 0);
printf("%g\n", 0, 1);
printf("%g\n", 0);
0770デフォルトの名無しさん
2007/07/22(日) 00:53:13#include <stdio.h>
int main(void) {
float a;
a=0.0;
printf("a:%g !a:%d \n",a,!a);
if(!a) printf("check\n");
a=0.1;
printf("a:%g !a:%d \n",a,!a);
if(!a) printf("check\n");
a=5.0;
printf("a:%g !a:%d \n",a,!a);
if(!a) printf("check\n");
return 0;
}
0771デフォルトの名無しさん
2007/07/22(日) 01:04:25aがどんな型であろうと、!aはint型。
http://www.jisc.go.jp/app/pager?%23jps.JPSH0090D:JPSO0020:/JPS/JPSO0090.jsp=&RKKNP_vJISJISNO=X3010
0772デフォルトの名無しさん
2007/07/22(日) 04:32:32お前は壁を乗り越えれば乗り越えるほど新しい壁作ってんじゃねーよおおおおおおおおおおおおおおおおお
1つのことを理解するたびにお前が遠くなっていく気がするぜ
0773デフォルトの名無しさん
2007/07/22(日) 08:30:530774デフォルトの名無しさん
2007/07/22(日) 09:34:08いや、それがさ聞いてくれよ
いままでちゃんと動いてたのに関数1個追加しただけで急に動かなくなったりするわけよ
0775デフォルトの名無しさん
2007/07/22(日) 09:37:26一週間間を置いた後に読めるか?
0776デフォルトの名無しさん
2007/07/22(日) 09:47:08読むのは以前の問題だな、関数にすると仕様がちょっと変わってくるだろ
0777デフォルトの名無しさん
2007/07/22(日) 09:55:300778デフォルトの名無しさん
2007/07/22(日) 09:59:06ある関数に文字列を入力するようにしてたとする、今度は条件文をつけてその文字列に
送るようにすると、文字入力が省略されたりするんだ
0779デフォルトの名無しさん
2007/07/22(日) 10:23:04if(条件) 関数(文字列);
文字入力が省略されたらまずい場合こうすればいいだけのことじゃないか?
0780デフォルトの名無しさん
2007/07/22(日) 10:26:29もう夏休みなの?
0781デフォルトの名無しさん
2007/07/22(日) 10:46:44まさしく、>773。
0782デフォルトの名無しさん
2007/07/22(日) 10:58:12printf("%s",x );
ここで変数xの値によって違う文字列を出力したいのですが
このPrintfの中で引数xの後ろに?とかつけて文字列を指定
するやり方があったと思うのですが思い出せません。
どなたか構文教えてください。
0783デフォルトの名無しさん
2007/07/22(日) 11:01:15その文字列を格納してある変数を指定しないと
0784デフォルトの名無しさん
2007/07/22(日) 11:01:510785デフォルトの名無しさん
2007/07/22(日) 11:06:00ありがとうございました!見つかりました!
0786デフォルトの名無しさん
2007/07/22(日) 11:22:55条件演算子という名前も思い出してあげてください。
0787デフォルトの名無しさん
2007/07/22(日) 11:56:370788デフォルトの名無しさん
2007/07/22(日) 12:55:12C言語は高級アセンブラなんだと考えろ。
そうすれば、仕様を覚える度に謎は謎でなくなる。
C99は、もはや高級言語になってしまったがな。
0789デフォルトの名無しさん
2007/07/22(日) 13:13:50強制終了して値を見てみたら自分の環境ではi+0.0 = 1.97626e-323以降は引き算が出来てないみたいです
考え方間違えてるんでしょうか?
WindowsXP上でVC++を使ってます
#include <stdio.h>
int main(void)
{
double i,temp,bottom;
for (i=bottom=1.0;0.0+i>0.0;) {
temp=bottom/10.0;
while(i>temp)
i-=temp;
i+=temp;
bottom=temp;
}
printf("0.0+i = %g\n",0.0+i);
return 0;
}
浮動小数で正しく表現できない数が出ちゃってるから駄目なんですかね
0790デフォルトの名無しさん
2007/07/22(日) 13:23:000791789
2007/07/22(日) 13:48:102で割れば4.94066e-324までは行けるみたいですね
0792デフォルトの名無しさん
2007/07/22(日) 14:46:06#include<sys/types.h>
#include<unistd.h>
int main(void){
int pid;
int i;
if(pid = fork() == 0){
for(i = 0;i<20;i++){
printf("child %d\n",i);
sleep(1);
}
exit(0);
}
else {
for(i = 0;i<10;i++){
printf("parent %d\n",i);
sleep(1);
}
wait(NULL);
exit(0);
}
return(0);
}
の実行にかかる時間は約20秒でした。30回sleepするので30秒かかると思うのですが
分かりません。教えてください。お願いします。
0793デフォルトの名無しさん
2007/07/22(日) 14:54:20>30回sleepするので
何を言っている。
親プロセス 子プロセス
│
fork() -─────-┐
│ │
│この間、10秒. │
│ │
↓ │この間、20秒
.: │
.: │
.: wait() │
.: │
.: ←-──────┘
exit(0)
0794デフォルトの名無しさん
2007/07/22(日) 14:54:310795デフォルトの名無しさん
2007/07/22(日) 14:58:140796792
2007/07/22(日) 15:05:26ありがとうございます。
でもまだよくわからないんです。
親プロセスでsleep実行してるときって子プロセスの処理できるんですか。
0797デフォルトの名無しさん
2007/07/22(日) 15:11:240798デフォルトの名無しさん
2007/07/22(日) 15:13:440799デフォルトの名無しさん
2007/07/22(日) 15:18:42strtod()を使え
0800デフォルトの名無しさん
2007/07/22(日) 15:19:40strtod呼べ
このスットコドッコイ
0801デフォルトの名無しさん
2007/07/22(日) 16:36:35time関数を使うために
srand((unsigned int)time(NULL));
を使うとコンパイル時に 未定義のシンボルNULLとエラーがでてしまいます。
どうすればよいでしょうか。
0802デフォルトの名無しさん
2007/07/22(日) 16:41:00使用している環境は?stdio.h やら stdlib.h あるいは iostream など取り込んでいるか?
0803デフォルトの名無しさん
2007/07/22(日) 16:41:47って書いた?
0804デフォルトの名無しさん
2007/07/22(日) 16:42:240805デフォルトの名無しさん
2007/07/22(日) 16:53:52#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int GetRandom(int min,int max);
int main(void)
{
int i;
srand((unsigned int)time(NULL));
for (i = 0;i < 30;i++) {
printf("%d\n",GetRandom(0,50));
}
return 0;
}
int GetRandom(int min,int max)
{
return min + (int)(rand()*(max-min+1.0)/(1.0+RAND_MAX));
}
0から50までの乱数を30個発生させるというものです。
0806デフォルトの名無しさん
2007/07/22(日) 17:05:22なら stddef.h でもインクルードしとけ。
0807デフォルトの名無しさん
2007/07/22(日) 17:08:150808デフォルトの名無しさん
2007/07/22(日) 17:08:400809デフォルトの名無しさん
2007/07/22(日) 17:12:33808様 0に変えることでコンパイル成功しました。ありがとうございます。
0810デフォルトの名無しさん
2007/07/22(日) 17:13:34OSとコンパイラを教えてください
0811デフォルトの名無しさん
2007/07/22(日) 17:14:36NULL が使えないというその処理系は凄く気持ち悪いな。
他にも変な所がありそうで怖い。
0812デフォルトの名無しさん
2007/07/22(日) 17:16:24nulltest.cってファイル作って下のソース書いて実行してみたら。
これで通らなかったから根本的なところでなんかおかしい。
#include <stdio.h>
int main(){ return (int)NULL; }
0813デフォルトの名無しさん
2007/07/22(日) 17:21:08後々困ることにならない事を祈る。
0814デフォルトの名無しさん
2007/07/22(日) 17:21:50812様のソース実行しましたが、やはりエラーがでてしまいました
0815デフォルトの名無しさん
2007/07/22(日) 17:24:43#define NULL 0でも書いて対応するしかなさそ。
0816デフォルトの名無しさん
2007/07/22(日) 17:30:19#define NULL 0 と書いたら NULLが使えるようになりました!
色々とご指摘ありがとうございます
0817デフォルトの名無しさん
2007/07/22(日) 17:30:24インストール手順で何かミスがあったとしか・・・。
NULL が使えないってことは、size_t とかも使えないんだろうか。
#include <stddef.h>
int main() { return (int)(size_t)0; }
は通る?
0818デフォルトの名無しさん
2007/07/22(日) 17:34:52インストール手順は、他のでは上手くいくのでミスはないかと・・・
0819デフォルトの名無しさん
2007/07/22(日) 17:39:08NULL だけ使えないって何か不思議だなあ。
まあ、NULL だけ使えないみたいだから、
自前で定義するか 0 を直接使うかってところか・・・。
stddef.h を探して NULL の定義を直接埋め込んだのでもいいとは思う。
0820デフォルトの名無しさん
2007/07/22(日) 17:39:450821デフォルトの名無しさん
2007/07/22(日) 17:46:25変な所にあるかもしれないし…
0822デフォルトの名無しさん
2007/07/22(日) 17:46:36| 1 6 11 16 21 |
| 2 7 12 17 22 |
| 3 8 13 18 23 |
| 4 9 14 19 24 |
| 5 10 15 20 25 |
0823デフォルトの名無しさん
2007/07/22(日) 17:48:29#define MSIZE 5
void swap(int *a, int *b) {
int c;
(a) = *a;
*a = *b;
*b = (a) ;
}
void main(void) {
int i, j, mat[MSIZE][MSIZE] = { { 1, 2, 3, 4, 5},
{ 6, 7, 8, 9,10},
{11,12,13,14,15},
{16,17,18,19,20},
{21,22,23,24,25} };
for(i = 0; i < MSIZE - 1; i++) {
for(j = (b) ; j < (c) ; j ++) {
swap( (d) , (e) );
}
}
for(i = 0; i < MSIZE; i ++) {
printf("|");/25小計
for(j = 0; j < MSIZE; j ++) {
printf("%3d ", mat[i][j]);
}
printf(" |\n");
}
}
さっぱりわかりません
よろしくお願いします
0824デフォルトの名無しさん
2007/07/22(日) 17:49:31まぁ、自分で適当にそれに応じて使っておけってことで
0825デフォルトの名無しさん
2007/07/22(日) 18:10:49入れて,下の出力のように10円刻みに分布をとることを考える.
そのためのプログラムを下に示す.空白を補え.
80- 89円: 2
90- 99円: 2
100-109円: 1
110-119円: 2
120-129円: 1
130-139円: 2
0826デフォルトの名無しさん
2007/07/22(日) 18:13:33#define C_NUM 6
void makedist(int a[10], int b[C_NUM]) {
int i;
for(i = 0; i < 10; i ++) {
b[ (a) ] += 1;
}
}
void main(void) {
int price[10] = {80, 120, 111, 130, 139, 95, 98, 89, 105, 119};
int dist[C_NUM], i;
for(i = 0; i < C_NUM; i++) {
dist[i] = (b) ;
}
makedist( (c) , dist);
for(i = 0; i < C_NUM; i++) {
printf("%3d-%3d円: %3d\n", (d) ,
(e) , dist[i]);
}
}
これもさっぱりです・・・
教えてください
0827デフォルトの名無しさん
2007/07/22(日) 18:20:47先生にでも聞いたら?
0828デフォルトの名無しさん
2007/07/22(日) 18:22:04円を作ってそれを移動、壁で反射、色が点滅などやらなければいけなくて
移動までは出来るようになったんですが後がさっぱりでs
助けてくだしあ><
0829デフォルトの名無しさん
2007/07/22(日) 18:26:03宿題の答えが知りたいだけなら、宿題スレ行けよ
0830デフォルトの名無しさん
2007/07/22(日) 18:45:280831デフォルトの名無しさん
2007/07/22(日) 20:15:39文字列を名前にした場合
FILE = *fp;
str[100] = "abc.txt";
fp = fopen(str,"r");
で行けるのですが、ファイル名を数列にしたい場合
どうすればいいのでしょうか?
例えばファイル名(0〜2.txt)
int i;
for(i=0; i<=2; i++){
fp = fopen(????,"r");
}
????の部分に文字列のアドレスを入力してやれば
いいのだと思いcharにして&iとかしてみましたが上手くいきません
結構悩んだのですがさっぱりです!!
解説よろしくお願いします
0832デフォルトの名無しさん
2007/07/22(日) 20:17:340833デフォルトの名無しさん
2007/07/22(日) 20:23:11char buf[100];
int i;
for(i=0;i<=2;i++) {
sprintf(buf,"&d.txt",i);
fp = fopen(buf,"r");
//
}
0834833
2007/07/22(日) 20:23:46×sprintf(buf,"&d.txt",i);
○sprintf(buf,"%d.txt",i);
0835デフォルトの名無しさん
2007/07/22(日) 20:34:36バージョンは5.5.1
0836デフォルトの名無しさん
2007/07/22(日) 20:53:17ありがとうございます!!
凄い悩んでたのがスッキリしますた
sprintf活用してみます
0837デフォルトの名無しさん
2007/07/22(日) 20:54:19います。C言語の基礎の基礎という本に添付されたCDに入っていたLSI Cを使ってプログラム
のコンパイルをしようとしています。書かれていたプログラムをSample1.c
という名前で保存しました。コマンドプロンプト画面で
C:\CGENGO\PRACTICE>DIRを入力して調べると469 Sample1.cが保存されて
いるのが分かります。
同じ画面でC:\CGENGO\PRACTICE>Lcc Sample1と入力しても
SAMPLE.EXEが作成されません。どうしたらよいか教えてください。
0838デフォルトの名無しさん
2007/07/22(日) 20:58:32まずその本に書かれている通り導入したのか?
0839デフォルトの名無しさん
2007/07/22(日) 21:00:00でぐぐる
0840デフォルトの名無しさん
2007/07/22(日) 21:26:55マジで悪いことは言わないからLSI-Cはやめてbccかgcc(MinGW)にしとけ。
乗りかえるの今からでも全く遅くないから。
0841デフォルトの名無しさん
2007/07/22(日) 21:33:39VisualC++2005ExpressEditionでもいいぞ
0842デフォルトの名無しさん
2007/07/22(日) 21:50:12C学ぶのに使うと、ANSI Cの標準関数で
非推奨な関数(scanfとか)使うとwarrningでまくりで
混乱するんじゃないか?
0843デフォルトの名無しさん
2007/07/22(日) 21:53:100844デフォルトの名無しさん
2007/07/22(日) 21:58:160845デフォルトの名無しさん
2007/07/22(日) 22:42:45すいません、教えて欲しいんです。
自分でできるようになりたいです。
0846デフォルトの名無しさん
2007/07/22(日) 22:44:36そういうのも含めて授業料払ってるんだから、もったいないよ。
0847デフォルトの名無しさん
2007/07/22(日) 22:44:48じゃあ自分でできるまでがんばれ
0848デフォルトの名無しさん
2007/07/22(日) 22:48:27で、その行はこの値をline配列の0番目に代入するって意味
line[0]='y'; ←この部分の意味が知りたいです。って質問したら
上のように説明いただいたのですがまだ理解できないのでもう少し
お願いします。
0849デフォルトの名無しさん
2007/07/22(日) 22:50:18#include<stdlib.h>
#include<math.h>
int main()
{
int i, count;
double x, y, pi, z;
char line[20];
line[0]='y'; ←この部分の意味が知りたいです。
srand( (unsigned int) time(NULL) );
while(1){
count=0; for (i = 1;i <= 10000000; i++) {
x = (double)rand() / (RAND_MAX + 1);
y = (double)rand() / (RAND_MAX + 1);
if(x*x + y*y < 1){ count++; }
pi=(double)count / i * 4 ;
z=fabs(M_PI - pi)/M_PI ;
if(i==100||i==1000||i==10000||i==100000||i==1000000||i==10000000){
printf("(%d)pi=%f(%f)\n",i,pi,z) ; }
} printf("もう一度やりますか(y/n)?");
gets(line); if(line[0] == 'n'||line[0]=='N'){ break; }
} return 0; }
全体はこんな感じです。
0850デフォルトの名無しさん
2007/07/22(日) 22:50:31その説明のどのあたりが分からないかいってみそ。
0851デフォルトの名無しさん
2007/07/22(日) 22:52:280852デフォルトの名無しさん
2007/07/22(日) 22:53:16その行、意味ないような気がするが。
0853デフォルトの名無しさん
2007/07/22(日) 22:55:33その行のプログラム中での存在意義が知りたいの?
0854デフォルトの名無しさん
2007/07/22(日) 22:55:57>>851さんの言ってることが正しいのでしょうか??
0855デフォルトの名無しさん
2007/07/22(日) 22:57:43そうです。なんの意味があるのかわからなくて…
あとおかしい部分ってありますか?
0856デフォルトの名無しさん
2007/07/22(日) 22:58:02if()でline[0]を見る前に、gets()を通してるから、初期化しても意味ないように見えるけど。
0857デフォルトの名無しさん
2007/07/22(日) 22:58:06明日、提出なんでs
>>847
時間が・・
0858デフォルトの名無しさん
2007/07/22(日) 23:00:35だーかーらー宿題は宿題スレで質問しろって
http://pc11.2ch.net/test/read.cgi/tech/1184506311/
0859デフォルトの名無しさん
2007/07/22(日) 23:01:46生徒の頭悪いのは教師がなんとかするしかないんだから、文句は言えんだろ。
0860デフォルトの名無しさん
2007/07/22(日) 23:06:38だーかーらー丸投げしたいわけじゃねーんだよ
>>859
そうすることにする
0861デフォルトの名無しさん
2007/07/22(日) 23:08:350862デフォルトの名無しさん
2007/07/22(日) 23:10:08頭も態度も悪けりゃ落とすだけ
0863デフォルトの名無しさん
2007/07/22(日) 23:10:27宿題を貼り付けて「教えてください」って、丸投げだろう。
自分はこういうふうに考えたとか、分からない箇所をもっと絞り込んで質問するとかしないと。
0864デフォルトの名無しさん
2007/07/22(日) 23:10:28丸投げはしたくないから教えろってどんだけわがままなんだw
素直にあきらめるのが一番だな
0865デフォルトの名無しさん
2007/07/22(日) 23:10:36教師はますます授業の難易度を下げていく
日本学生の質の悪さは先進国でダントツトップとなる
こうして日本は平和になった
0866デフォルトの名無しさん
2007/07/22(日) 23:11:56教師も頭悪そうだから丁度いいかもね。
0867デフォルトの名無しさん
2007/07/22(日) 23:12:48>日本学生の質の悪さは先進国でダントツトップとなる
断然トップトップ?
0868デフォルトの名無しさん
2007/07/22(日) 23:15:34じゃあやっぱあの行はいらないですか??
0869デフォルトの名無しさん
2007/07/22(日) 23:15:490870デフォルトの名無しさん
2007/07/22(日) 23:16:000871デフォルトの名無しさん
2007/07/22(日) 23:18:16不要
0872デフォルトの名無しさん
2007/07/22(日) 23:26:19技術者の端くれともいえないゴミが大学で教鞭振ってる現状は異常
教授なんてぶっちゃけ事務職(+他校とのパイプ役)以外のなんでもない
0873デフォルトの名無しさん
2007/07/22(日) 23:28:280874デフォルトの名無しさん
2007/07/22(日) 23:30:46y/nで聞かれているのにn以外だったら継続ってのもなんだよな
まぁ別にいいけどさ
0875デフォルトの名無しさん
2007/07/22(日) 23:31:33まず試してからこうなったんだけどって質問に来いよ
0876デフォルトの名無しさん
2007/07/22(日) 23:33:070877デフォルトの名無しさん
2007/07/22(日) 23:37:25つうかコンパイルとおらねぇだろ、それ。
なんかもういろいろ間違いすぎだ
0878デフォルトの名無しさん
2007/07/22(日) 23:42:15俺がコンパイラならキレる
0879デフォルトの名無しさん
2007/07/22(日) 23:54:38printf("%d %d",a,&a[0]);
とりあえずコンパイル通るようにしてみた。
%dのままでいいかどうかはシラネ
0880デフォルトの名無しさん
2007/07/22(日) 23:55:220881デフォルトの名無しさん
2007/07/23(月) 00:02:10思わずワロタ
コンパイラ超がんばれ
0882デフォルトの名無しさん
2007/07/23(月) 00:04:30("%d %d",a[0],a[0]);
でいいじゃないか
0883デフォルトの名無しさん
2007/07/23(月) 00:36:11ありがとう^^ コンパイラに切れられないように精進します。
0884デフォルトの名無しさん
2007/07/23(月) 02:04:06strcpyで、コピー元とコピー先が重なる場合の動作は、定義されない。
とあるんですが、これは
char str[] = "abcdef";
char *p1, *p2;
p1=str; p2=&str[1];
strcpy(p1, p2);
とした場合の動作も未定義となるのでしょうか?
0885デフォルトの名無しさん
2007/07/23(月) 02:05:170886デフォルトの名無しさん
2007/07/23(月) 02:43:32おもいっきり重なってないか?
重なったら未定義らしいんですが、重なってたら未定義ですか?って質問してるぞ。
0888デフォルトの名無しさん
2007/07/23(月) 03:42:31この場合の「重なる場合」とは、どこか一部でも重なっている場合を指す。
0889デフォルトの名無しさん
2007/07/23(月) 06:40:060890デフォルトの名無しさん
2007/07/23(月) 06:46:260891デフォルトの名無しさん
2007/07/23(月) 14:00:31する方法を教えてください。バージョンは古くてもいいです。
0892デフォルトの名無しさん
2007/07/23(月) 14:02:37無料じゃだめか?
VisualC++2005ExpressEdition
MicrosoftのHPからダウンロードできる
http://www.microsoft.com/japan/msdn/vstudio/express/visualc/
0893デフォルトの名無しさん
2007/07/23(月) 14:21:400894デフォルトの名無しさん
2007/07/23(月) 17:15:060895デフォルトの名無しさん
2007/07/23(月) 17:16:240896デフォルトの名無しさん
2007/07/23(月) 17:17:020897デフォルトの名無しさん
2007/07/23(月) 17:17:490898えいいち ◆GRGSIBERIA
2007/07/23(月) 18:12:49using namespace std;
int main(){
int a, b;
int *p;
p = &a;
*p = 0;
cout << a << "-" << *p << "\n";
p--;
*p = 1;
cout << b << "-" << *p << "\n";
//cout << &b << "-" << p << "???\n";
return 0;
}
名前の違う変数をいくつか宣言し、forとポインタを使っていっぺんに初期化をしたいのですが、
このまま実行すると、pが&bを指しているのにも関わらず、bの値が変になってしまいます。
ですが、コメントを外すと正常に表示されます。二つのアドレスも同じです。
どうしてそうなるのか、またどうすれば改善できるのか教えてください。お願いします。
0899デフォルトの名無しさん
2007/07/23(月) 18:13:210900デフォルトの名無しさん
2007/07/23(月) 18:29:55でも質問のソースは何か抜けてる。
もう一回書いてみて。printf()になおすのが望ましいが。
0901デフォルトの名無しさん
2007/07/23(月) 18:34:530902デフォルトの名無しさん
2007/07/23(月) 18:35:320903デフォルトの名無しさん
2007/07/23(月) 18:42:43int main(void)
{
int a, b, *p;
p = &a;
*p = 0;
printf("%d , %d\n",a , *p);
*(--p) = 1;
printf("%d , %d\n",b , *p);
printf("%p , %p\n",&b , p);
return 0;
}
0904デフォルトの名無しさん
2007/07/23(月) 18:46:57普通に宣言時に初期化したほうがいいんじゃね?
つうか配列とかC++ならvectorみたいなコンテナ使った方がいいんじゃね?
って突っ込みは野暮ですか?
0905デフォルトの名無しさん
2007/07/23(月) 18:53:15だったら配列使えばいいじゃん
なんで違う値になるのか知らんが
0906ゆみ
2007/07/23(月) 19:03:57・char 型の配列aに"HellowWorld"の文字列を格納すること。
・配列aからchar 型の配列bにデータをコピーすること。
※標準関数(memcpy,strcpy等)を使用しないこと。
・配列bからchar 型の配列cにデータをコピーすること。
※但し、"w"、"W"は"*"にデータをすりかえてデータをコピーすること。
→配列cには文字列"Hello**orld"を格納すること。
・printf()で表示する際は、配列cのデータを一文字づつ表示すること。
※"o"を表示する際は、"o"を表示する代わりに"O"を5つ表示すること。
・プロジェクト名は"ckadai3"とすること。
0907ゆみ
2007/07/23(月) 19:13:20ヒントで配列のコピーはFOR文で回してあげればいいんだよ
と教えてもらいましたがいまいちよくわかりません。
0908デフォルトの名無しさん
2007/07/23(月) 19:15:463時間何の勉強してたんだ?
一問目は配列とfor文だけわかれば出来ると思うんだが
それ以降もif文使えばできる
0909デフォルトの名無しさん
2007/07/23(月) 19:16:170910デフォルトの名無しさん
2007/07/23(月) 19:16:30>>1
0911デフォルトの名無しさん
2007/07/23(月) 19:16:350912デフォルトの名無しさん
2007/07/23(月) 19:24:54#define STR_SIZE 64
void copy(char *a, char *b);
void copyNotW(char *a, char *b);
void PrintStrChngO(char *str);
int main(void)
{
char a[] = "HellowWorld", b[STR_SIZE], c[STR_SIZE];
copy(b, a);printf("%s\n", b);
copyNotW(c, b);PrintStrChngO(c);
return 0;
}
void PrintStrChngO(char *str)
{
for(;*str;str++)
if(*str != 'o') putchar(*str); else printf("OOOOO");
return;
}
void copyNotW(char *a, char *b)
{
while(*a = *b++)
*a++ = *a=='w'||*a=='W' ? '*' : *a;
return;
}
void copy(char *a, char *b)
{
while(*a++ = *b++);
return;
}
0913デフォルトの名無しさん
2007/07/23(月) 19:39:41BCC なんて古くて死ぬぜ。
897 名前:デフォルトの名無しさん 投稿日:2007/07/23(月) 17:17:49
今更 BCC とか
0914デフォルトの名無しさん
2007/07/23(月) 19:41:25{ } 内の処理が実行されてしまう程度のコンパイラ。
0915デフォルトの名無しさん
2007/07/23(月) 19:41:58BCC は switch 内に case も default もない場合にも
{ } 内の処理が実行されてしまう程度のコンパイラ。
0916デフォルトの名無しさん
2007/07/23(月) 19:45:45int main(void) {
int n=1;
switch(n) {
printf("BCC は switch 内に case も default もない場合にも \n");
printf("{ } 内の処理が実行されてしまう程度のコンパイラ。 \n");
}
return 0;
}
Warning W8066 Unreachable code in function main
警告も理解できない奴が何ほざいてやがるんだ?w
初心者がMT車はギアチェンジが面倒だから古いとか言っちゃっているくらい痛すぎ
0917えいいち ◆GRGSIBERIA
2007/07/23(月) 19:47:07#include <stdio.h>
int main(){
int a, b;
int *p;
p = &a;
*p = 0;
printf("%d - %d\n", a, *p);
p--;
*p = 1;
printf("%d - %d\n", b, *p);
//printf("%X - %X\n", &b, p);
return 0;
}
0918デフォルトの名無しさん
2007/07/23(月) 19:51:05p--;って何がしたいんだ。
0919デフォルトの名無しさん
2007/07/23(月) 20:00:070920デフォルトの名無しさん
2007/07/23(月) 20:08:30Unreachable code in function mainの意味は「main関数に到達不能なコードがあります」だ(return文の後に書いたコードにも同じ警告が出るはず)。
しかし実際には警告と異なり、>>914が書いたように実行されてしまう。
0921デフォルトの名無しさん
2007/07/23(月) 20:20:570922デフォルトの名無しさん
2007/07/23(月) 20:20:59ASCCIコードやJISなど、何進数を使って、どういう特徴があるかなど
0923デフォルトの名無しさん
2007/07/23(月) 20:34:220924デフォルトの名無しさん
2007/07/23(月) 20:36:23?
0925デフォルトの名無しさん
2007/07/23(月) 21:01:43ワロタww
16進数でも10進数でも2進数でも値は同じだよ
0926デフォルトの名無しさん
2007/07/23(月) 21:07:43こういう話?
0927デフォルトの名無しさん
2007/07/23(月) 21:11:33文字コードについて、とりあえず知ってる語彙でググる。
上位にでてくるページをみて、語彙を増やす。
これを30分程度繰り返すだけで、そうとうのページを探せると思うけど。
0928ゆみ
2007/07/23(月) 21:28:24ありがとうございます。
助かりました。
0929えいいち ◆GRGSIBERIA
2007/07/23(月) 21:43:42#include <iostream>
using namespace std;
int main(){
int a, b;
int c, d;
int *p;
p = &a;
*p = 0;
cout << a << "-" << *p << "\n";
//cout << &a << "-" << p << "\n";
p--;
*p = 1;
cout << b << "-" << *p << "\n";
//cout << &b << "-" << p << "\n";
0930えいいち ◆GRGSIBERIA
2007/07/23(月) 21:44:13*p = 2;
cout << c << "-" << *p << "\n";
//cout << &c << "-" << p << "\n";
p--;
*p = 3;
cout << d << "-" << *p << "\n";
//cout << &d << "-" << p << "\n";
return 0;
}
別にdからでも動くと思います。
0931922
2007/07/23(月) 22:04:030932デフォルトの名無しさん
2007/07/23(月) 22:04:500933デフォルトの名無しさん
2007/07/23(月) 22:07:24合ってる。
基数の変換はWindowsの電卓でできるよ。
0934923
2007/07/23(月) 22:11:220935デフォルトの名無しさん
2007/07/23(月) 22:17:59動くかも知れんがあまりそういうことはやらないんじゃない?
ローカル変数をスタックに積む順番ってC言語の仕様で決められてたっけ?
0936デフォルトの名無しさん
2007/07/23(月) 22:31:23反転して 1111 0101
1足して 1111 0110
2の補数表現には反転して1足すのが楽
0937デフォルトの名無しさん
2007/07/24(火) 00:12:39だから、なんでスレタイ無視してC++で書くの?
>>935
決まっていない。そもそも、スタックフレームを形成するかどうかさえ決まっていない。
つーか、まともなコンパイラなら、ちゃんと最適化すればアドレス解決演算子を使っている
a以外はスタックに置かない。それどころか存在そのものを否定するかもしれん。
0938デフォルトの名無しさん
2007/07/24(火) 01:19:40別のやり方ですね
0939デフォルトの名無しさん
2007/07/24(火) 01:22:050940デフォルトの名無しさん
2007/07/24(火) 01:29:230941デフォルトの名無しさん
2007/07/24(火) 01:34:12いや、一緒なんだけどさ・・・足すほうが俺は計算しやすいな。
0942デフォルトの名無しさん
2007/07/24(火) 01:46:38これをコンパイルして、そのディレクトリで実行したら画像は表示されるのに、
別のディレクトリから、../../app みたいに実行すると画像が表示されません。
どうやったらどこから実行しても画像が表示できるようになりますか?
0943デフォルトの名無しさん
2007/07/24(火) 01:55:510944デフォルトの名無しさん
2007/07/24(火) 02:17:32画像ファイルの指定を絶対パスにてみては?
0945デフォルトの名無しさん
2007/07/24(火) 02:20:24・・・??
0946デフォルトの名無しさん
2007/07/24(火) 03:14:43>>944 の言うように絶対パスにするとか
readlink("/proc/self/exe"); とか getenv("_") とかソースに埋め込むとか
いろいろあるだろうけど基本的にはC言語の範疇じゃないな.
0947デフォルトの名無しさん
2007/07/24(火) 03:36:21これで助けになるかな?
#include<stdio.h>
#include<libgen.h>
int main(int argc, char *argv[]){
printf("%s/image/image1.bmp\n", dirname(argv[0]));
return 0;
}
0948デフォルトの名無しさん
2007/07/24(火) 03:48:29これなら Windows でも Unix 系OSでもいける(日本語はNGだが)
#include<stdio.h>
#include<string.h>
int main(int argc, char *argv[]){
char *ptr;
ptr=strrchr(argv[0], '/');
if(ptr==NULL) ptr=strrchr(argv[0], '\\');
if(ptr!=NULL) printf("%.*s/image/image1.bmp\n", ptr-argv[0], argv[0]);
else printf("./image/image1.bmp\n");
return 0;
}
0949デフォルトの名無しさん
2007/07/24(火) 10:12:47int count_bits(unsigned x)
{
int count = 0;
while (x) {
if (x & 1U) count++;
x >>= 1;
}
return (count);
}
int int_bits(void)
{
return (count_bits(~0U));
}
unsigned print_bits(unsigned x,unsigned y)
{
int i,n=0;
int temp;
unsigned sum = 0;
for (i = int_bits() - 1;i>=0;i--) {
if ((y>>i) & 1U)
temp = 1;
else
temp = 0;
0950デフォルトの名無しさん
2007/07/24(火) 10:16:46temp *= 2;
n++;
sum += x * temp;
}
return (sum);
}
int main(void)
{
unsigned x,y;
printf("正の整数を入力してください:");
scanf("%u",&x);
printf("正の整数を入力してください:");
scanf("%u",&y);
printf("\n%3u×%3u=%3u\n",x,y,print_bits(x,y));
return(0);
}
123 x 13 = 123 x 2^3 + 123 x 2^2 + 123 x 2^0 みたいに計算したいのですが、結果が0と表示されます。
なぜでしょうか?
0951デフォルトの名無しさん
2007/07/24(火) 10:26:20ま た s c a n f か
0952デフォルトの名無しさん
2007/07/24(火) 10:29:470953デフォルトの名無しさん
2007/07/24(火) 10:48:43Visual Studioを購入しなければならないのですか?
0954デフォルトの名無しさん
2007/07/24(火) 10:51:300955デフォルトの名無しさん
2007/07/24(火) 10:52:58VisualC++2005ExpressEditionは無料でダウンロードできるよ
0956デフォルトの名無しさん
2007/07/24(火) 10:53:22>for (i = int_bits() -n -1;i>=0;i--)
>temp *= 2;
>n++;
iじゃなくて別の変数にすべきだし>=じゃなくて>だろってのはおいといても、temp << i で十分だろ
0957デフォルトの名無しさん
2007/07/24(火) 10:53:32答え書いてあるのに読めないのか?
別人だとしてこのスレぐらい全部読めよ
っていうか入門書だとかに大抵無料のコンパイラついてくるんだからそれ使えよ
0958デフォルトの名無しさん
2007/07/24(火) 11:19:11なかったのでgive upしてしまったのです。よく分かりました。
ありがとうございました。
0959デフォルトの名無しさん
2007/07/24(火) 16:38:46unsigned print_bits(unsigned x,unsigned y)
{
int i;
int temp;
unsigned sum = 0;
for (i = int_bits() - 1;i>=0;i--) {
if ((y>>i) & 1U)
temp = 1;
else
temp = 0;
temp << i
sum += x * temp;
}
return (sum);
}
変更したのですが、コンパイルすると、コードは効果を持たない(関数 print_bits )とでてしまいました。
どうしてでしょうか?
0960デフォルトの名無しさん
2007/07/24(火) 16:46:030961デフォルトの名無しさん
2007/07/24(火) 16:50:05>>949にあるんだけどね。
流れを追えないだけじゃなく、見当違いだから黙ってていいよ。
>>959
sum += x * (temp << i)でいいということだろ。
0962デフォルトの名無しさん
2007/07/24(火) 17:00:22temp << i
sum += x * temp;
でも問題ないだろ
セミコロンが無いのはともかく
0963デフォルトの名無しさん
2007/07/24(火) 17:06:01temp <<= i; としたいのか?
0964デフォルトの名無しさん
2007/07/24(火) 17:09:480965デフォルトの名無しさん
2007/07/24(火) 17:11:450966デフォルトの名無しさん
2007/07/24(火) 17:12:54temp = temp<<i;
でいけました。ご迷惑おかけしました
0967デフォルトの名無しさん
2007/07/24(火) 17:27:220968デフォルトの名無しさん
2007/07/24(火) 17:33:010969デフォルトの名無しさん
2007/07/24(火) 17:54:09た場合に限り、特別な処理がしたいと思っています。staticなフラ
グを宣言すれば出来るには出来るのですが、何百回もcallされるの
に、最初の一回の為にフラグをチェックするのはちょっとバカバカ
しい。何か良い方法は無いでしょうか?
0970デフォルトの名無しさん
2007/07/24(火) 17:56:01間接コール?
0971デフォルトの名無しさん
2007/07/24(火) 17:59:00「最初にcallされた場合」フラグを関数内に持たず、関数外から引き数で与えては?
高々数百回程度じゃ歯糞にもならないけどね。
0972デフォルトの名無しさん
2007/07/24(火) 18:04:34func = first_func;
...
func = second_func;
とかやればいいんだけど普通の関数コールに比べてオーバーヘッドが発生するんで
フラグのチェックよりマシとは言いがたい。
0973デフォルトの名無しさん
2007/07/24(火) 18:11:30のではなく、
2回目以降全ての為に(1回目も)フラグをチェックする
と考えてはどうだろう。
いや、どうでもいいけどね。
0974デフォルトの名無しさん
2007/07/24(火) 18:12:42オーバーヘッドについて詳しく。
私の知る限り、イミディエイト関数呼び出しとレジスタ間接関数呼び出しで
大きく処理時間が異なるCPUはないのだけれど。
#寧ろ、某CPUはレジスタ間接の方が速いし。
0975デフォルトの名無しさん
2007/07/24(火) 18:19:44昔のパソコンは結構効いてたけど、最近のはあんまり関係ない気がする。
0976デフォルトの名無しさん
2007/07/24(火) 18:23:110977デフォルトの名無しさん
2007/07/24(火) 18:32:38それもまた、今のCPUなら殆ど無視できる。
0978デフォルトの名無しさん
2007/07/24(火) 18:38:050979デフォルトの名無しさん
2007/07/24(火) 18:40:330980デフォルトの名無しさん
2007/07/24(火) 18:42:15初心者の小規模なプログラムだと「こっちのほうが高速だぜ」って言われても実感できない…
0981デフォルトの名無しさん
2007/07/24(火) 18:53:480982デフォルトの名無しさん
2007/07/24(火) 18:56:230983デフォルトの名無しさん
2007/07/24(火) 19:08:34このフラグのチェックも、
キャッシュと分岐予測が効けば大したことなさそうではある。
まあ、コスト 0 ではないだろうが。
0984デフォルトの名無しさん
2007/07/24(火) 19:23:13staticにする場合はマルチスレッドの場合に問題がないか確認する必要はあるね。
0985デフォルトの名無しさん
2007/07/24(火) 19:30:58を取得するプログラムを書きたいのです。
で
char str[1024];
while(1){
scanf("%s", str)
func(str);//funcと言う関数に"This is a pen."を一度に入れたい。
}
こういったプログラムを書いてThis is a pen.と入力すると、何故か
1周目のループで、Thisが入り、2週目でis・・・5週目で.が入ってしまいます。
こういう問題はどのようにすれば解決するのでしょうか?
0986デフォルトの名無しさん
2007/07/24(火) 19:34:360987デフォルトの名無しさん
2007/07/24(火) 19:50:55scanf("%1023[^\n]", str)
素直にfgets(str, sizeof(str), stdin)を使うべきだとは思うが。
0988デフォルトの名無しさん
2007/07/24(火) 19:52:15scanfは空白で入力が区切られるようになっている。
0989デフォルトの名無しさん
2007/07/24(火) 22:39:57どうやれば、ギガをバイトにするのでしょか?
0990デフォルトの名無しさん
2007/07/24(火) 22:42:560991デフォルトの名無しさん
2007/07/24(火) 22:43:46単位なんだから、もとめるもなにもないだろう。
K -> M -> G で、1000倍していけばいいよ。
0992デフォルトの名無しさん
2007/07/24(火) 22:45:12どこからの情報ですか?
0993デフォルトの名無しさん
2007/07/24(火) 22:48:240994デフォルトの名無しさん
2007/07/24(火) 22:49:35HDDメーカじゃないかな
あの業界だけ1000単位
0995デフォルトの名無しさん
2007/07/24(火) 22:50:400996デフォルトの名無しさん
2007/07/24(火) 22:51:14容量なら1024だけどスループットなら1000
0997デフォルトの名無しさん
2007/07/24(火) 22:57:41>>992
解説の例題問題にありました。
0998989
2007/07/24(火) 23:04:10となると、1000.000.000 ではないのでしょうか?
0999デフォルトの名無しさん
2007/07/24(火) 23:06:47だね。
1000000だと1M。
1000デフォルトの名無しさん
2007/07/24(火) 23:09:4210011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。