07/05/15 00:05:25
#include<cstdio>
using namespace std;
int main()
{
FILE *rfp, *wfp;
unsigned char data[32];
size_t i, size;
rfp = fopen("in.bin","rb");
wfp = fopen("out.txt","w");
while(1)
{
size = fread(data, 1, 32, rfp);
for(i=0; i<size; ++i)
fprintf(wfp, "%02X", data[i]);
fprintf(wfp, "\n");
if(size != 32) break;
}
fclose(wfp);
fclose(rfp);
return 0;
}
かなり適当。もしかしたら遅いかも。それ以前に動かないかも。
40:デフォルトの名無しさん
07/05/15 00:07:58
URLリンク(kansai2channeler.hp.infoseek.co.jp)
よろしくお願いします。
41:デフォルトの名無しさん
07/05/15 00:09:47
>>36のコード動かしてみたら1秒もかからないんだが
42:41
07/05/15 00:11:25
Athlon64X2 4200+ RAM1GB
43:デフォルトの名無しさん
07/05/15 00:12:20
>>27
これでどう?
#include <stdio.h>
char hex_u[] =
"0000000000000000" "1111111111111111" "2222222222222222" "3333333333333333"
"4444444444444444" "5555555555555555" "6666666666666666" "7777777777777777"
"8888888888888888" "9999999999999999" "AAAAAAAAAAAAAAAA" "BBBBBBBBBBBBBBBB"
"CCCCCCCCCCCCCCCC" "DDDDDDDDDDDDDDDD" "EEEEEEEEEEEEEEEE" "FFFFFFFFFFFFFFFF";
char hex_l[] =
"0123456789ABCDEF" "0123456789ABCDEF" "0123456789ABCDEF" "0123456789ABCDEF"
"0123456789ABCDEF" "0123456789ABCDEF" "0123456789ABCDEF" "0123456789ABCDEF"
"0123456789ABCDEF" "0123456789ABCDEF" "0123456789ABCDEF" "0123456789ABCDEF"
"0123456789ABCDEF" "0123456789ABCDEF" "0123456789ABCDEF" "0123456789ABCDEF";
44:43
07/05/15 00:13:30
続き
int main(int ac, char *av[])
{
FILE *s, *d;
if (ac == 3 && (d = fopen(av[1], "wb")) != NULL && (s = fopen(av[2], "rb")) != NULL &&
setvbuf(s, NULL, _IOFBF, 0x100000) == 0 && setvbuf(d, NULL, _IOFBF, 0x100000) == 0)
while (1) {
int c;
#define W if ((c = getc(s)) == EOF) break; putc(hex_u[c], d), putc(hex_l[c], d)
W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;W;
putc('\r', d); putc('\n', d);
}
return 0;
}
45:デフォルトの名無しさん
07/05/15 00:20:13
やっべw
ハッカーすぎて、何してるのか頭が追いつかないw
46:デフォルトの名無しさん
07/05/15 00:23:36
問題は実際に速いかどうかだな。
誰か測定よろ。
47:デフォルトの名無しさん
07/05/15 00:23:54
だよなぁ、CPUの性能によって処理時間なんて差が出るし・・・
まぁ、いかに効率の良いアルゴリズムを用いることができるかなら
比較すりゃ良いけど、漠然と決められた時間ってのは、高性能なCPUを
用いるのが一番早いw
48:41
07/05/15 00:26:40
>>39のは2秒弱
>>43-44のも1秒かからんかった
49:デフォルトの名無しさん
07/05/15 00:27:57
体感的な表現だが、
>>43のは本当に処理してるのか不安になるくらい速い。
このW;連発のが、for(i = 0; i < 32; i++)よりも速くなるものなの?
50:デフォルトの名無しさん
07/05/15 00:28:07
同じく>>36で1秒かからない
Core2Duo T5500
2048M
51:デフォルトの名無しさん
07/05/15 00:31:17
>>43-44
ファイル出力してる?
52:デフォルトの名無しさん
07/05/15 00:33:12
>>51
第一引数が出ファイルで第二引数が入力ファイルでないの?
53:デフォルトの名無しさん
07/05/15 00:34:39
[1] 授業単元:中級C言語
[2] 問題文(含コード&リンク)
英単語とその和訳の辞書ファイルta.docとしてエディタで作成する。
辞書ファイルの形式は以下の通りで、単語の品詞は考えない。
プログラムの機能としては英単語を入力すると対応する和訳を表示。
「q」を入力したら終了。
/*ta.doc
dog, 犬
cat, 猫
pig, 豚
*/
/*実行例
英和辞典
英単語:cat
日本語で「猫」
英単語:q
終了
[3] 環境
[3.1] OS: Win XP
[3.2] コンパイラ名とバージョン: Borland
[3.3] 言語: C
[4] 期限: 5月16日AM:11:00まで
[5] その他の制限: 特になし
よろしくお願いします
54:デフォルトの名無しさん
07/05/15 00:35:21
してるがな。
55:39
07/05/15 00:35:44
>>48
モバイルPentiumIII 1GHzで2MB弱のファイルが3秒かかった・・・
やっぱ適当に作ったらいかんな
56:41
07/05/15 00:36:59
あ、ごめん間違えた。
指定した入力と出力ファイルが逆だったから処理されてなかった。
あらためてやったら>>43-44は2秒弱
57:デフォルトの名無しさん
07/05/15 00:43:32
#include <cstdio>
#include <string>
#include <windows.h>
using namespace std;
int main(int argc, char **argv)
{
if (argc < 3) return 1;
HANDLE fin = CreateFile(argv[1], GENERIC_READ, 0, 0, 3, 0, 0);
if (fin == (HANDLE)-1) return 1;
HANDLE fout = CreateFile(argv[2], GENERIC_WRITE, 0, 0, 2, 0, 0);
if (fout == (HANDLE)-1) return 1;
static char *hextab = "0123456789abcdef";
unsigned char buff[0x2000], obuff[0x5000], *p;
DWORD i, j, dwRead, dwWritten;
while (ReadFile(fin, buff, sizeof buff, &dwRead, 0) && dwRead > 0) {
for (i = j = 0, p = obuff; i < dwRead; ++i, j = (j + 1) % 0x20) {
*p++ = hextab[buff[i] >> 4];
*p++ = hextab[buff[i] & 0xf];
if (j == 0x1f) *p++ = '\r', *p++ = '\n';
}
WriteFile(fout, obuff, p - obuff, &dwWritten, 0);
}
CloseHandle(fin), CloseHandle(fout);
return 0;
}
58:36
07/05/15 00:46:27
>>27 もっと高速化!
#include<stdio.h>
int main(void){
short tmp[2], hexvalue[256];
char *fname_in="in.dat", *fname_out="out.dat";
FILE *fp_in, *fp_out;
unsigned char buf[32*1024];
short buf_out[sizeof(buf)+sizeof(buf)/32];
int i, j, read_size;
for(i=0;i<256;i++){sprintf((char *)tmp, "%02X", i);hexvalue[i]=tmp[0];}
sprintf((char *)tmp, "%c%c", 0x0d, 0x0a);
fp_in=fopen(fname_in, "rb");
fp_out=fopen(fname_out, "wb");
if(fp_in==NULL || fp_out==NULL) return 1;
for(;;){
read_size=fread(buf, 1, sizeof(buf), fp_in);
if(read_size<=0) break;
for(i=0,j=0;i<read_size;i++)
{
buf_out[j++]=hexvalue[buf[i]];
if((i+1)%32==0)
buf_out[j++]=tmp[0];
}
fwrite(buf_out, 2, j, fp_out);
}
fclose(fp_in);
fclose(fp_out);
return 0;
}
59:デフォルトの名無しさん
07/05/15 00:48:03
>>57 これも速いな
60:デフォルトの名無しさん
07/05/15 00:49:40
>>43のはMTなlibcとリンクしてしまうとgetc()/putc()で排他がかかって
遅くなると思う。
61:デフォルトの名無しさん
07/05/15 00:58:00
みんなiostreamに見向きもしないのがワロタ
やっぱ遅いすか
62:デフォルトの名無しさん
07/05/15 01:01:40
っていうか、このレベルになると、もうディスク次第じゃね?
プログラムがいくらがんばっても仕方ないかも・・・
63:デフォルトの名無しさん
07/05/15 01:06:16
>>62
だね。短期的な処理はほとんど差が出ないけど、長期化すると出るものとなると
もはや高性能なハードウェアを使うのが望ましいってなるだろうね・・・
64:デフォルトの名無しさん
07/05/15 01:09:55
>>27
ファイルを読んで何もしないで出力するだけなら
5秒を切れるプログラムは書けるよね?
65:>53
07/05/15 02:44:24
やっつけ
#include <stdio.h>
#include <string.h>
int main(void)
{
char w[1024]={0};
puts("英和辞典");
do{ printf("英単語:"); fscanf(stdin,"%s",w);
if(strcmp(w,"q")==0) break;
else{
char buf[1024]={0};
FILE *fin = fopen("ta.doc","rb");
while(fgets(buf, sizeof(buf), fin)!=NULL){
*(strchr(buf, ','))='\0';
if(strcmp(buf,w)==0){
*(strrchr(&buf[strlen(w)+1], '\n'))='\0';
printf("日本語で「%s」\n", &buf[strlen(w)+1]);
}
}
fclose(fin);
}
}while(1);
return 0;
}
66:暗号
07/05/15 03:26:31
[1] 授業単元:プログラミング演習
[2] 問題文(含コード&リンク):
1.英文を入力するとその暗号文が出力されるプログラムの作成
入力:文字列(英文)
出力:文字列(数字)
2.暗号文を元の英文に戻すプログラムの作成
入力:文字列(数字)
出力:文字列(英文)
暗号は換字暗号でよい。[アルファベット(a~z)、スペースを数字(00~26)、スペースを対応させる]例a⇔23、b⇔09、c⇔17…
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 火曜日の夕方、もしくは水曜日の朝まで
[5] その他の制限: ループ(forやwhile)、配列を使って作成する
よろしくおねがいします。
67:デフォルトの名無しさん
07/05/15 06:16:21
>25
前スレにあった奴
const int aaCharToInt[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 0, 0, 0, 0, 0,
0,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,
25,26,27,28,29,29,30,31,32,33,34,35, 0, 0, 0, 0,
0,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,
25,26,27,28,29,30,31,32,33,34,35,35, 0, 0, 0, 0, };
int n2dec(int n, char *p) {
int ret = 0, flag = 1;
if(*p=='-') flag = -1;
while(*p) {
ret = ret * n + aaCharToInt[*p];
p++;
}
return ret * flag;
}
68:デフォルトの名無しさん
07/05/15 06:30:13
あの…>>24お願いできないでしょうか…?
69:デフォルトの名無しさん
07/05/15 06:45:04
>>65
ありがとうございました ぺこ <(_ _)>
70:デフォルトの名無しさん
07/05/15 06:54:18
>68
半角と全角の区別もつかない奴が催促するなんて百年はえーよ
71:デフォルトの名無しさん
07/05/15 07:27:43
>68
int output_1[M][N], output_2[N][M], output_3[N][M], output_4[M][N*3];
printf("----- Original -----\n");
for(i=0; i<M; i++) for(j=0; j<N; j++) output_1[i][j] = input[i][j];
for(i=0; i<M; i++) {
for(j=0; j<N; j++) {
if(output_1[i][j]) printf("*");
else printf(" ");
}
printf("\n");
}
printf("----- Rotation left 90゚ -----\n");
for(i=0; i<N; i++) for(j=0; j<M; j++) output_2[i][j] = input[j][N-1-i];
for(i=0; i<N; i++) {
for(j=0; j<M; j++) putchar(output_2[i][j] ? '*' : ' ');
putchar('\n');
}
printf("---- Transposition -----\n");
for(i=0; i<N; i++) for(j=0; j<M; j++) output_3[i][j] = input[j][i];
for(i=0; i<N; i++) {
or(j=0; j<M; j++) putchar(output_3[i][j] ? '*' : ' ');
putchar('\n');
}
printf("---- Expansion -----\n");
for(i=0; i<M; i++) for(j=0; j<N*3; j++) output_4[i][j] = input[i][j/3];
for(i=0; i<M; i++) {
for(j=0; j<3*N; j++) putchar(output_4[i][j] ? '*' : ' ');
putchar('\n');
}
72:18
07/05/15 08:33:31
どなたか教えていただけないでしょうか?
73:デフォルトの名無しさん
07/05/15 08:39:28
>>72
データは?
74:デフォルトの名無しさん
07/05/15 08:45:14
>>73
フォーマットは分かってるんだから別に必要ない気がするぞ。
75:デフォルトの名無しさん
07/05/15 08:49:08
フォーマットはわかってるんだから自分で作れと?
>>18の場合はそんなに面倒じゃなさそうだけど・・・
76:デフォルトの名無しさん
07/05/15 08:53:44
>>40もお願いします
77:デフォルトの名無しさん
07/05/15 08:54:48
>>76
>>1読んで書き直し
78:デフォルトの名無しさん
07/05/15 08:55:48
txtの下の方に書いてあったのね、スマソ
79:デフォルトの名無しさん
07/05/15 10:02:18
カプセル化はなぜ必要なんですか?って課題です
80:デフォルトの名無しさん
07/05/15 10:10:08
>>27
今更だけどC++化した。1.5秒ほどで終了する。
#include <iostream>
#include <fstream>
#include <sstream>
#include <string>
#include <iomanip>
int main(void)
{
char hexstr[256][3];
char *fname_in = "in.dat", *fname_out = "out.dat";
unsigned char buf[32 * 1024];
int i;
std::ostringstream str;
str << std::hex << std::uppercase;
for (i = 0; i < 256; i++) {
str << std::setw(2) << std::setfill('0') << i << '\0';
}
str << std::dec << std::nouppercase;
std::memcpy(hexstr, str.str().c_str(), 256 * 3);
std::ifstream fp_in(fname_in, std::ios::in | std::ios::binary);
std::ofstream fp_out(fname_out, std::ios::out | std::ios::trunc);
if (!fp_in || !fp_out)
return 1;
for (;;) {
if (!fp_in.get(reinterpret_cast<char*>(buf), sizeof(buf)))
break;
81:デフォルトの名無しさん
07/05/15 10:10:47
str.str("");
for (i = 0; i < static_cast<int>(sizeof(buf)); i++) {
str << hexstr[buf[i]];
if ((i + 1) % 32 == 0)
str << "\n";
}
fp_out << str.str();
}
}
ただし出力にostringstreamを使っても使わなくても速度はほとんど
変わらないようだ。
82:デフォルトの名無しさん
07/05/15 10:41:35
>>80
俺の所では0.5秒ほどだった。
C++でも結構速いな。
83:ニュートン・ラフソン法
07/05/15 10:45:16
次の式をN-R法でとけ、ε=10^-2(←0.1以下に収束),
(x1[0],x2[0]) = (0.8,0.2)とする。
f1 = x1^2 + x2^2 -1
f2 = x1 + x2 -1
とありますが、先生から提示されたヒントとして
「まずx1を微分してx2を微分してその後に初期値を入れる」
といわれましたが、どうのように微分をしたらよいのかわかりません
[3] 環境
[3.1] OS: WindowsXP
[3.2] bcc32
[3.3] 言語: C言語
期限は今日中です><
教えてください!
84:デフォルトの名無しさん
07/05/15 10:46:47
プルグラマは数学が苦手
85:ニュートン・ラフソン法
07/05/15 11:18:24
そうですか...
どうもありがとうございます
86:デフォルトの名無しさん
07/05/15 11:27:16
x1で微分というのは偏微分の事だろ
df1/dx1 = d(x1^2 + x2^2 -1)/dx1 = 2*x1
df1/dx2 = d(x1^2 + x2^2 -1)/dx2 = 2*x2
df2/dx1 = 1
df2/dx2 = 1
87:デフォルトの名無しさん
07/05/15 11:34:33
変微分の記号は違うだろ
88:デフォルトの名無しさん
07/05/15 12:01:07
>>83
↓これの式を変えればいいんでない。
URLリンク(www.geocities.jp)
89:デフォルトの名無しさん
07/05/15 12:31:21
>>88
すげえなこんなのどっから見つけてくるんだよ。
取り敢えずやってみたらX1=1.0、X2=0.0となった。
別解としてX1=0.0、X2=1.0というのもあるはずだが、ニュートン法なので
一つしか出ないのだろう。
90:デフォルトの名無しさん
07/05/15 14:14:00
[1] 授業単元:C言語演習
[2] 問題文(含コード&リンク):乗算合同法を用いて、(0,1)の範囲の値を取る
乱数を生成せよ。
[3] 環境
[3.1] OS:Windows XP
[3.2] コンパイラ名とバージョン:gcc 3.4
[3.3] 言語:C
[4] 期限:2007年5月21日
[5] その他の制限:なし
よろしくお願いします。
91:デフォルトの名無しさん
07/05/15 14:25:04
>>90
URLリンク(www5.airnet.ne.jp)
92:デフォルトの名無しさん
07/05/15 16:19:25
>>53
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct word word;
struct word{
char *en;
char *jp;
word *next;
};
word *makenode(FILE *fp);
void search(word *temp);
void mfree(word *temp);
int main()
{FILE *fp = fopen("ta.doc","r");word *temp = makenode(fp);show(temp);search(temp);
mfree(temp);return 0;}
word *makenode(FILE *fp){ word *temp = NULL;word *now = NULL;char *ctemp;
char buff[256] = {'\0'};char en[256] = {'\0'};char jp[256] = {'\0'};
while(fgets(buff,sizeof(buff), fp)){if(ctemp = strchr(buff, '\n'))*ctemp = '\0';
if(ctemp = strchr(buff, ','))*ctemp = '\0';
strcpy(en, buff);strcpy(jp, ctemp + 1);temp = malloc(sizeof(word));temp->en = malloc(strlen(en) + 1);
temp->jp = malloc(strlen(jp) + 1);strcpy(temp->en, en);strcpy(temp->jp, jp);
if(now == NULL){ temp->next = now;now = temp;}else{now->next = NULL;temp->next = now;
now = temp;}}return now;}void search(word *temp){ char buff[256] = {'\0'};word *wtemp;
char *ctemp;for(;;){puts("英和辞典");printf("英単語:");fgets(buff, sizeof(buff),stdin);
if(ctemp = strchr(buff, '\n'))*ctemp = '\0';if(strcmp(buff,"q") == 0)break;
for(wtemp = temp; wtemp != NULL; wtemp = wtemp->next)if(strcmp(buff, wtemp->en) == 0)
printf("日本語で「%s」\n",wtemp->jp);}}void mfree(word *temp){word *wtemp = temp;word *wftemp = NULL;
char *cjtemp = NULL;char *cetemp = NULL;while(wtemp != NULL){wftemp = wtemp;cjtemp = wtemp->jp;
cetemp = wtemp->en;wtemp = wtemp->next;free(cjtemp);free(cetemp);free(wftemp);}}
93:92
07/05/15 16:28:08
修正
//now->next = NULL;
temp->next = now;
now = temp;
94:デフォルトの名無しさん
07/05/15 17:31:04
>>80
istream::get()はstdioのfgets()のC++版だからこの用途には向かないよ。
改行文字で切れるし、何バイト読めたか分からない。
95: ◆90k6K4GDF6
07/05/15 17:45:42
スレ違いだったらスマソ
授業が始まったばかりで、レポートにまとめるフローチャートの書き方が分かりません。
初歩の初歩ですがググっても今一理解出来なかったのでお願いします
(a,b,cのデータをc,b,aの順に表示するプログラム)
#include <stdio.h>
int main(vold)
{
int a, b, c;
printf("a,b,cの順に整数型データを入力してください--> ">;
scanf("%d%d%d", &a, &b, &c);
printf("c,b,aの順に表示すると--> %d %d %d \n",c,b,a);
return 0;
}
96:デフォルトの名無しさん
07/05/15 17:49:37
>>95
スレ違い。
○main
|
□プロンプト表示
|
□数値入力
|
□数値表示
|
○return
97:66
07/05/15 17:51:17
#include <stdio.h>
int main(void){
int i;
char a[]={'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};
int b[]={'01','10','11','02','20','22','03','30','33','04','40','44','05','50','55','06','60','66','07','70','77','08','80','88','09','90'};
printf();
scanf();
while(){
}
printf();
return 0;
}
これを改良してプログラムを作成してもらえないでしょうか?
お願いします。
98: ◆90k6K4GDF6
07/05/15 17:52:44
>>96
やはりスレチでしたか、すみません;
でもありがとう
99:デフォルトの名無しさん
07/05/15 17:55:35
与えられた金額に対して、コインの最小化問題の解(枚数)を求める。(複数の場合には1つでよい)
期限: 5/18(金)まで
コインはA[n]の配列に入れて、日本円みたいに1,5,10,50…というコインではなく、
どんなコインの組み合わせに対しても、最小の枚数を求めさせる。
日本円だと大きいコインから順に取っていけばいいのですが、
1円、3円、4円のコインの組み合わせで、6円だったら3円×2枚が最小になる、
みたいな場合があるのでどうすればいいのか分からないです><
再帰を使った疑似コードをかけって言われたんですけど誰か分かる人いませんか?
よろしくお願いします。
100:デフォルトの名無しさん
07/05/15 17:56:05
>>97
なんだ、ぼるじょあスレとマルチかYO!
101:気まぐれアナスイ
07/05/15 18:04:02
#include <stdio.h>
int main(void>{ int i;
char a[]={"a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z"};
int b[]={01,10,11,02,20,22,03,30,33,04,40,44,05,50,55,06,60,66,07,70,77,08,80,88,09,90,99"};
printf();
scanf();
while(){ }
printf();
return0; }
102:気まぐれアナスイ
07/05/15 18:08:58
!(Φ_Φ+){こっちかな?}
#include <stdio.h>|(/n)
int main(void>{ int i;|(/n)
char a[]={"a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z"};|(/n)
int b[]={01,10,11,02,20,22,03,30,33,04,40,44,05,50,55,06,60,66,07,70,77,08,80,88,09,90,99"};|(/n)
printf();|(/n)
scanf();|(/n)
while(){ }|(/n)
printf();|(/n)
return0; }|(/n)
103:デフォルトの名無しさん
07/05/15 18:17:32
こんなもんでしょ。
#include <stdio.h>
#include <string.h>
void encryptPrint(const char * str)
{
static char const src[] = "abcdefghijklmnopqrstuvwxyz";
static char const dest[] = {
1, 10, 11, 2, 20, 22, 3, 30, 33, 4, 40, 44, 5,
50, 55, 6, 60, 66, 7, 70, 77, 8, 80, 88, 9, 90};
int len = strlen(str);
for (int ic = 0; ic < len; ++ic) {
char * ptr = strchr(src, str[ic]);
if (ptr != NULL) {
printf("%02d", dest[ptr - src]);
} else {
putchar(str[ic]);
}
}
}
int main()
{
char buf[200];
while (fgets(buf, sizeof(buf), stdin) != NULL) {
encryptPrint(buf);
}
return 0;
}
104:気まぐれアナスイ
07/05/15 18:37:09
!(Φ_Φ+)
#include "1179025919/[>>???]"
((1179025919/[>>???] "this line harmony");)|#pref=()/
((1179025919/[line 101] "no");)|#pref=()/
((1179025919/[line 102] "used no");)|#pref=()/
if|<end>
</end>
105:気まぐれアナスイ
07/05/15 18:39:54
!(Φ_Φ+){頑張ってください}
では、また。
106:デフォルトの名無しさん
07/05/15 20:51:45
【質問テンプレ】
[1] 授業単元: プログラミング演習
[2] 問題文:
8×4、9÷4をそれぞれ四則演算子を用いずに計算し、その計算結果を表示させない。
(ヒント:シフト演算子を使用)
<実行結果>
・8×4=32
・9÷4=商2、余1
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン:VC
[3.3] 言語: C言語
[4] 期限: [2007年05月16日まで]
[5] その他の制限:なし
107:デフォルトの名無しさん
07/05/15 20:57:41
>>80
バグってるじゃん
108:デフォルトの名無しさん
07/05/15 21:03:45
>>106
#include<stdio.h>
int main(){
printf("8×4=%d\n", 8<<2);
printf("9÷4=商%d、余%d\n", 9>>2, 9%4);
return 0;
}
109:デフォルトの名無しさん
07/05/15 21:29:55
1] 授業単元: C言語
[2] 問題文(含コード&リンク): URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン:
[3.3] 言語: Cのみ
[4] 期限:出来る限り早くお願いします。
[5] その他の制限:C言語初心者です。今習っているのは、制御文と配列です。
110:デフォルトの名無しさん
07/05/15 21:35:16
>>108
> printf("9÷4=商%d、余%d\n", 9>>2, 9%4);
あまりは 9&3 だろ?
111:デフォルトの名無しさん
07/05/15 21:37:10
中途半端に知ってたんだな
112:デフォルトの名無しさん
07/05/15 21:42:02
[1] 授業単元: C言語
[2] 問題文(含コード&リンク):
気温のデータを5℃単位に丸めたい。
キーボードからdouble型変数kに気温を入力し、
丸めた数値はint型変数gに求め、gを画面に出力する。
ただし入力データに負の気温はないものとする。
また必要なら、計算途中の中間結果を格納するint型変数wなど、
適宜変数を用意すること。
[3] 環境
[3.1] OS: Windows XP
[3.2] コンパイラ名とバージョン:
[3.3] 言語: C
[4] 期限: なるべく早くお願いします。
[5] その他の制限: 結構序盤なので、初心者といえば初心者です。
よろしくお願いします。
113:デフォルトの名無しさん
07/05/15 21:42:13
人にやさしく
114:デフォルトの名無しさん
07/05/15 21:44:46
うほっ
>>108
return0;は美しくないな。
void main(void) でよくね?
115:デフォルトの名無しさん
07/05/15 21:45:11
>>109
#include<stdio.h>
int main(){
char c1,c2,c3;
printf("Input character1 : ");
scanf("%c",&c1);
fflush(stdin);
printf("Input character2 : ");
scanf("%c",&c2);
fflush(stdin);
if(c1 == c2) c3 = '=';
else if(c1 > c2) c3 = '>';
else c3 = '<';
printf("'%c'(%d) %c '%c'(%d)\n",c1,c1,c3,c2,c2);
return 0;
}
116:デフォルトの名無しさん
07/05/15 21:46:11
>>114
void mainの話をするとスレが荒れるぞ
117:デフォルトの名無しさん
07/05/15 21:51:55
>>114
mainの戻り値がvoidなんて処理系依存の方法を持ち出す奴が
どういう了見でreturn 0;が美しくないとか言ってんだ
118:114
07/05/15 21:52:14
>>116
うほっw
まあいいか、return 0; でも。
>>108だっが、余りは9%4でよくねぇ?なぜに9&3 ?
119:デフォルトの名無しさん
07/05/15 21:54:12
沈黙は金
120:デフォルトの名無しさん
07/05/15 21:54:45
>>114 ん~~~、な・ん・で?敢えて言うんでしょうか?理由は?何か問題でも?
int main なら return 0;はANSI、ISO準拠でなんら問題なし。幅広い環境で通用する。
void main?それはもはや世界基準にあらず、自立環境でmain関数をプログラムの開始と
定めていないようなところでなら問題ないが、あくまでもANSI、ISO準拠重視なソースであれば
なおさらvoid mainはありえない。これらのことは、ちゃんとISOにも記されているので
必要とあらば確認すべし。なお、void mainは使っちゃだめということではないので、あしからず。
あくまでも世界基準、標準化、幅広い環境で通用させるんであればint mainが望ましいとの話。
121:デフォルトの名無しさん
07/05/15 21:56:17
くせえ!
コピペの臭いがプンプンするぜ!
122:デフォルトの名無しさん
07/05/15 21:56:42
>>118は責任もって>>120を引き取るように。
123:デフォルトの名無しさん
07/05/15 22:19:31
>>112
#include <stdio.h>
int main()
{
double k;
int g;
scanf("%lf", &k);
g = 5*(int)(k/5 + 0.5);
printf("%d\n", g);
return 0;
}
124:デフォルトの名無しさん
07/05/15 22:23:55
>>118
%も四則演算子に含むという解釈なんじゃね?
実際どっちなんだろう。
125:デフォルトの名無しさん
07/05/15 22:34:28
[1] 授業単元: C言語
[2] 問題文(含コード&リンク): キーボードから5教科のテストの成績を入力し、
合計点sumと平均点aveを計算して画面に出力するプログラムを作成しなさい。
ただし、各教科の点数とsumはint型とし、aveはdouble型とする。
[3] 環境
[3.1] OS: Windows XP
[3.2] コンパイラ名とバージョン:
[3.3] 言語: C言語
[4] 期限: 今日の夜11時半まで
[5]その他の制限:
お願いします!
126:デフォルトの名無しさん
07/05/15 22:43:15
>>125
#include<stdio.h>
int main(){
int n, sum = 0;
double ave;
printf("国語:"); scanf("%d",&n); sum+=n;
printf("英語:"); scanf("%d",&n); sum+=n;
printf("社会:"); scanf("%d",&n); sum+=n;
printf("算数:"); scanf("%d",&n); sum+=n;
printf("情報:"); scanf("%d",&n); sum+=0;
printf("合計点:%d\n", sum);
ave = sum / 5.0;
printf("平均点:%lf\n", ave);
return 0;
}
127:デフォルトの名無しさん
07/05/15 23:00:35
>>110
なぜ余が、9&3になるの?教えてください。確かに実行結果は余り1になるわけだが。
128:デフォルトの名無しさん
07/05/15 23:04:57
1001=9
0011=3
------&
0001=1
129:デフォルトの名無しさん
07/05/15 23:06:40
>>99
こんな感じかなぁ(あんまり再帰を使ってないけど)。
#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
#define NMAX (INT_MAX / 2)
struct P {
int sum;
union {
struct P *p[2];
int n;
} as;
};
int Count(struct P *p, int n)
{
return (p->sum != 1) ? (Count(p->as.p[0], n) + Count(p->as.p[1], n)) : (p->as.n == n);
}
130:デフォルトの名無しさん
07/05/15 23:06:43
>>128
thanks!
131:129
07/05/15 23:08:10
続き
void Factorize(int total, int ctbl[], int ctblnum)
{
struct P *ptbl, *p, *q, *r;
int ptblnum = total;
int i, j, n;
for (i = 0; i < ctblnum; i++)
if (ptblnum < ctbl[i])
ptblnum = ctbl[i];
ptblnum ++;
if ((ptbl = calloc(ptblnum, sizeof(*ptbl))) == NULL)
fprintf(stderr, "メモリ不足です\n");
else {
for (i = 0; i < ptblnum; i++)
ptbl[i].sum = NMAX;
for (i = 0; i < ctblnum; i++) {
p = &ptbl[ctbl[i]];
p->sum = 1;
p->as.n = ctbl[i];
}
132:デフォルトの名無しさん
07/05/15 23:08:27
>>115
fflush(stdin); ってどうゆうことですか?
133:129
07/05/15 23:09:10
続き
for (i = 1; i <= total; i++) {
p = &ptbl[i];
for (j = 1; j < i; j++)
if ((n = (q = &ptbl[j])->sum + (r = &ptbl[i - j])->sum) < p->sum) {
p->sum = n;
p->as.p[0] = q;
p->as.p[1] = r;
}
}
printf("%d円の内訳:\n", total);
if (ptbl[total].sum == NMAX)
printf("組み合わせが存在しません\n");
else for (i = 0; i < ctblnum; i++)
if((n = Count(&ptbl[total], ctbl[i])) != 0)
printf("%d円 × %d枚\n", ctbl[i], n);
free(ptbl);
}
}
int main(void)
{
int ctbl[] = { 1, 3, 7, 9, 13, 66, };
Factorize(179, ctbl, 6);
return 0;
}
134:デフォルトの名無しさん
07/05/15 23:23:29
>>115
入力ストリームに対するfflushは未定義動作
scanfで読み飛ばしとけ
135:115
07/05/15 23:28:10
>>134
適当に書いただけだから>>132に言ってやってくれ
136:デフォルトの名無しさん
07/05/15 23:54:52
[1] 授業単元:C言語演習
[2] 問題文(含コード&リンク)
7bitのASCIIコード表を出力するプログラムを作成せよ。
出力例
0 1 2 3・・・・7
-------------------
0:** ** 0 p
1:** ** ! 1 q
2:** ** " 2 r
3:** ** # 3 s
・
・
F:** ** / ? **
印刷できない文字は、**を出力しなさい。
[3] 環境
[3.1] OS: Win XP
[3.2] コンパイラ名とバージョン: Borland
[3.3] 言語: C
[4] 期限: 5月16日AM:10:30まで
[5] その他の制限: 2つのforとisprintという関数を使用する
よろしくお願いします。
137:デフォルトの名無しさん
07/05/16 00:08:37
10個の整数データを木構造に保存するときを考える.まず,ポインタにより木を実現し,データを保存せよ.(ファイルからデータを読み込み,木構造ができるようにすると良い)
次に,キーボードから前順,中順,後順を選択する.
すると,その順で木をなぞり,指定した順にデータを表示する(再帰プログラミングで作成せよ).
すみませんが教えて下さい。
138:デフォルトの名無しさん
07/05/16 00:20:03
>>136
#include<stdio.h>
#include<ctype.h>
int main(){
int i,j,k;
for(i=0;i<=0xF;i++){
for(j=0;j<=7;j++){
k = i*8+j;
if( isprint(k) )printf(" %c ", k);
else printf("** ");
}
printf("\n");
}
return 0;
}
なんか激しく間違えてるけど直すのたるいから誰かよろしく
139:デフォルトの名無しさん
07/05/16 00:20:18
>>27です。
>>39を参考に、1秒程度で出力するものができました。
>>43->>44も試したんですが、これも凄いですね。
でも、これだとオレが書いてないって明白なので、参考としていただきます。
他にもいろいろと勉強になるコードありがとうございました。
140:デフォルトの名無しさん
07/05/16 00:27:01
【質問テンプレ】
[1] 授業単元:C言語
[2] 問題文(含コード&リンク):
[3] 環境
[3.1] OS:WindowsXP
[3.2] コンパイラ名とバージョン:
[3.3] 言語:C
[4] 期限:今日のPM13:00
[5] その他の制限:
問題1:キーボードより2つの値を入力し、比較結果を表示しなさい
実行画面
変数aの入力==>3
変数bの入力==>8
結果:8>3
変数aの入力==>8
変数bの入力==>3
結果:8>3
変数aの入力==>5
変数bの入力==>5
結果:5=5
141:140の続き
07/05/16 00:31:43
問題2:2人の得点を入力し勝者を表示しなさい
実行結果
aさんの得点==>200
bさんの得点==>150
aさんの勝ち
aさんの得点==>100
bさんの得点==>250
bさんの勝ち
aさんの得点==>120
bさんの得点==>120
引き分け
問題3:点数を入力し、合否を表示せよ
60点以下合格、範囲(O~100)以外はエラーとする
実行結果
点数入力==>60
合格です
点数入力==>59
不合格です
点数入力==>-1
点数を入力エラー(0未満)です
点数入力==>101
点数の入力エラー(100を超える)です
142:140の続き
07/05/16 00:32:53
問題4:キーボードより入力した文字を変換(大文字→小文字、小文字→大文字)し表示しなさい
実行結果
文字入力==>A
変換後:a
文字入力==>n
変換後:N
文字入力==>S
変換後:変換できない
以上の問題がどうしてもわからないのでよろしくお願いします
143:デフォルトの名無しさん
07/05/16 00:32:53
[1]c言語
[2]raw画像を読むためfreadを使ったの関数を作る。
void FIO_read_raw(char *filename, unsigned short *ad, int width, int height){
FILE *fp_in;
if((fp_in==fopen(filename,"rb"))==NULL){
printf("Can't File Open!\n");
exit(1);
}
fread( ad, sizeof(unsigned short),width*height,fp_in);
fclose(fp_in);
}
と作ったのですが、
error C2143: 構文エラー : ')' が 'constant' の前に必要です。
error C2143: 構文エラー : ';' が 'constant' の前に必要です。
fatal error C1004: 予期せぬ EOF が検出されました。
とでてしまいました。どのようにすればいいか教えてください。よろしくお願いします。
144:140 141 142の問題
07/05/16 00:33:54
この4問わかる方がいましたら教えてください
145:デフォルトの名無しさん
07/05/16 00:37:06
if((fp_in=fopen(filename,"rb"))==NULL)
146:デフォルトの名無しさん
07/05/16 00:52:34
>>136
#include <stdio.h>
#include <ctype.h>
int main(void)
{
int ch[128],a[16][8];
size_t i,j,cnt,sz=sizeof(ch)/sizeof(ch[0]);
size_t wd=2;
for(i=0; i<sz; i++) ch[i]=i;
for(i=0,cnt=0; i<8; i++) {
for(j=0; j<16; j++) {
a[j][i]=ch[cnt++];
}
}
printf("%*c",wd);
for(i=0; i<8; i++) printf("%*d ",wd,i);
printf("\n--------------------------\n");
for(i=0; i<16; i++) {
printf("%X:",i);
for(j=0; j<8; j++) {
if( isprint(a[i][j]) ) printf("%2c ",a[i][j]);
else printf("** ");
}
puts("");
}
return 0;
}
147:デフォルトの名無しさん
07/05/16 00:57:01
>>136 訂正。いらんことしてたわ。
#include <stdio.h>
#include <ctype.h>
#define ROW 16
#define COL 8
int main(void)
{
int a[ROW][COL];
size_t i,j,cnt,wd=2;
for(i=0,cnt=0; i<COL; i++)
for(j=0; j<ROW; j++)
a[j][i]=cnt++;
printf("%*c",wd);
for(i=0; i<8; i++) printf("%*d ",wd,i);
printf("\n--------------------------\n");
for(i=0; i<ROW; i++) {
printf("%X:",i);
for(j=0; j<COL; j++) {
if( isprint(a[i][j]) ) printf("%2c ",a[i][j]);
else printf("** ");
}
printf("\n");
}
return 0;
}
148:デフォルトの名無しさん
07/05/16 00:58:59
>>136 ぐぼぉ、またはり間違えた。すまそ。たぶんこれで最後でおkかと。
#include <stdio.h>
#include <ctype.h>
#define ROW 16
#define COL 8
int main(void) {
int a[ROW][COL],i,j,cnt,wd=2;
for(i=0,cnt=0; i<COL; i++)
for(j=0; j<ROW; j++)
a[j][i]=cnt++;
printf("%*c",wd);
for(i=0; i<8; i++) printf("%*d ",wd,i);
printf("\n--------------------------\n");
for(i=0; i<ROW; i++) {
printf("%X:",i);
for(j=0; j<COL; j++) {
if( isprint(a[i][j]) ) printf("%2c ",a[i][j]);
else printf("** ");
}
printf("\n");
}
return 0;
}
149:>140
07/05/16 02:34:04
...高難度ぢゃね?
#include <stdio.h>
int getVal(char *val)
{
int v;
char buf[256];
printf("変数%sの入力==>", val);
fgets(buf, sizeof(buf), stdin);
sscanf(buf, "%d", &v);
return v;
}
void printCmp(int a, int b)
{
char sign[3], Num[][3]={"0","1","2","3","4","5","6","7","8","9"};
if(a<b) sprintf(sign,"<");
if(a>b) sprintf(sign,">");
if(a==b) sprintf(sign,"=");
printf("結果:%s%s%s\n", Num[a], sign, Num[b]);
}
int main(void)
{
int a,b,loop;
printf("1:キーボードより2つの値を入力し、比較結果を表示\n");
for(loop=0; loop<3; ++loop){
a=getVal("a");
b=getVal("b");
printCmp(a, b);
}
return 0;
}
150:>142
07/05/16 02:58:46
> 文字入力==>S
> 変換後:変換できない
kwsk
151:デフォルトの名無しさん
07/05/16 03:16:44
同じ問題前にも見たな。
で、同じようにそこ突っ込まれてた。
152:デフォルトの名無しさん
07/05/16 06:49:17
>>143
if((fp_in==fopen(filename,"rb"))==NULL){
を
if((fp_in=fopen(filename,"rb"))==NULL){
に
153:デフォルトの名無しさん
07/05/16 07:07:57
>>138さん >>146さん >>148さん
ありがとうございます
154:デフォルトの名無しさん
07/05/16 07:35:14
1:C言語
テーマ:繰り返し処理(for文)
問題1:1~10までの合計を求め表示しなさい
実行画面
合計:55
問題2:キーボードより入力した数分の、"*"を表示しなさい
実行画面
整数入力==>5
結果:*****
問題3:2つの数値を入力し、範囲の合計を表示しなさい
実行画面
整数1(小)入力==>5
整数2(大)入力==>7
5~7の合計:18
以上の3問ですよろしくお願いします
155:デフォルトの名無しさん
07/05/16 07:43:22
>>154
問題1
for(;;){
printf("合計:%d\n", 1+2+3+4+5+6+7+8+9+10);
goto EndRuupu;
}
EndRuupu:
問題2
int n;
printf("整数入力==>"); scanf("%d" &n);
printf("結果:");
for(;;){
printf("*");
if(--n==0) goto EndRuupu;
}
EndRuupu:
printf("\n");
156:デフォルトの名無しさん
07/05/16 07:49:18
問題3
int show, die, kei=0;
printf("整数1(小) 入力==>"); scanf("%d", &show);
printf("整数2(大) 入力==>"); scanf("%d", &die);
printf("%d~%dの合計:", show, die);
for(;;){
kei += show;
if(++show>die) goto EndRuupu;
}
EndRuupu:
printf("%d\n", kei);
157:デフォルトの名無しさん
07/05/16 08:08:20
>>154
こっちは悪い例。
問題2
int n;
printf("整数入力==>"); scanf("%d" &n);
printf("結果:");
for(; n!=0; n--) printf("*");
printf("\n");
問題3
int show, die, kei;
printf("整数1(小) 入力==>"); scanf("%d", &show);
printf("整数2(大) 入力==>"); scanf("%d", &die);
printf("%d~%dの合計:", show, die);
for(kei=0; show<die; show++) kei += show;
printf("%d\n", kei);
158:デフォルトの名無しさん
07/05/16 09:14:33
>>94
本当だな。std::read()の方がいいな
159:デフォルトの名無しさん
07/05/16 10:43:32
>>158
この場合はiosのフォーマット変換層自体いらないので、実はfstreamでなくて
filebufのほうが無駄が無くていい。
↓のような感じ。
URLリンク(kansai2channeler.hp.infoseek.co.jp)
ただし、filebufの内部を直接読み書きしない限りは
ファイルバッファのバッファに読み込み→ユーザバッファにコピー
という無駄が発生するので、どうしたって低水準I/Oよりは遅くなると思われ。
160:デフォルトの名無しさん
07/05/16 10:48:36
>>159
なるほど。こういうのは初めて見ました。
rdbuf()を使った物は見た事があるのですが。
Cに勝てないのは辛い所ですね。
161:デフォルトの名無しさん
07/05/16 12:26:06
1:C言語
2:
問題1:数値を入力し、以下のように表示しなさい
実行画面
整数入力==>8
********
*******
******
*****
****
***
**
*
162:161の続き
07/05/16 12:34:17
問題2:10進数を入力し8ビットの2進数に変換し表示しなさい
実行画面
10進数入力==>118
2進数:01110110
以下の2問よろしくお願いします
163:デフォルトの名無しさん
07/05/16 12:40:41
(1):C言語
(2):制限時間あと3時間
(3):問題文
問題:2重のfor文を使って、以下のような九九表を完成させなさい
実行画面
1 2 3 4 5 6 7 8 9
_ _ _ _ _ _ _ _ _ _ _ _
1| 1 2 3 4 5 6 7 8 9
2| 2 4 6 8 10 12 14 16 18
3| 3 6 9 12 15 18 21 24 27
4| 4 8 12 16 20 24 28 32 36
5| 5 10 15 20 25 30 35 40 45
6| 6 12 18 24 30 36 42 48 54
7| 7 14 21 28 35 42 49 56 63
8| 8 16 24 32 40 48 56 64 72
9| 9 18 27 36 45 54 63 72 81
わかる方が居ましたらお願いします
164:デフォルトの名無しさん
07/05/16 12:53:34
>>163
#include <stdio.h>
int main()
{
for (int iy = 0; iy <= 9; ++iy) {
if (iy == 0) {
printf(" | 1 2 3 4 5 6 7 8 9\n"
"-+--------------------------\n");
continue;
}
for (int ix = 0; ix <= 9; ++ix) {
if (ix == 0) {
printf("%1d|", iy);
} else {
printf("%2d%c", ix * iy, ix < 9 ? ' ' : '\n');
}
}
}
return 0;
}
165:デフォルトの名無しさん
07/05/16 12:59:16
>>161
#include <stdio.h>
int main()
{
int i, n;
printf("整数入力==>");
if (scanf("%d", &n) == 1) {
while (i = n--) {
while (i--)
putchar('*');
putchar('\n');
}
}
return 0;
}
166:デフォルトの名無しさん
07/05/16 13:02:59
>>162
#include <stdio.h>
#include <string.h>
int main()
{
printf("Input decimal number.:");
int num = 0;
scanf("%d", & num);
if (num > 255 || num < 0) {
fprintf(stderr, "Illegal number.\n");
return 1;
}
char buf[4];
sprintf(buf, "%03o", num);
printf("binary number:");
for (int ic = 0; ic < 3; ++ic) {
static char const * const binaries[] = {
"000", "001", "010", "011", "100", "101", "110", "111"
};
printf("%s", binaries[buf[ic] - '0'] + (ic == 0 ? 1 : 0));
}
printf("\n");
return 0;
}
167:デフォルトの名無しさん
07/05/16 13:10:56
>>162
// 前半は>166を流用
#include <stdio.h>
int main()
{
printf("Input decimal number.:");
int num = 0;
scanf("%d", & num);
if (num > 255 || num < 0) {
fprintf(stderr, "Illegal number.\n");
return 1;
}
static char const * const binaries[] = {
"0000", "0001", "0010", "0011", "0100", "0101", "0110", "0111",
"1000", "1001", "1010", "1011", "1100", "1101", "1110", "1111",
};
printf("binary number:%s%s\n", binaries[num >> 4], binaries[num & 0xf]);
return 0;
}
168:デフォルトの名無しさん
07/05/16 13:55:23
>>161
これ一ヶ月ほど前に見たような
169:デフォルトの名無しさん
07/05/16 13:59:46
スレリンク(tech板:473番)
だったわ、宿題じゃなかったか
170:デフォルトの名無しさん
07/05/16 14:07:31
俺も見たような気がしたけどこれだった
スレリンク(tech板:417番)
171:デフォルトの名無しさん
07/05/16 14:12:41
これってprint増やす以外に作る方法ってありますか?
// 配列を反転するプログラム(の予定)
#include <stdio.h>
int tables[10];
void print(void)
{
for (int i = 0; i < 10; i++) {
printf("%d:", i);
printf("%d\n", tables[i]);
}
printf("\n");
}
void reverse(void)
{
for (int i = 0; i < 10/2; i++) {
tables[i] = tables[9-i];
tables[9-i] = tables[i];
}
}
int main(void)
{
for (int i = 0; i < 10; i++) {
tables[i] = i + 100;
}
172:デフォルトの名無しさん
07/05/16 14:27:26
>print増やす
意味が分からん。
それよりもmain内で関数が呼ばれてない。
あと、配列をグローバルにする必要性は無い。
173:デフォルトの名無しさん
07/05/16 14:59:42
【質問テンプレ】
[1] 授業単元:C言語
[2] 問題文(含コード&リンク):
10個の実数データをキーボードから入力し,配列data[10]に格納しなさい。そして,各要素の小さい方からの順位を決定して,別の配列rank[10]に格納しなさい。最後に,入力データdata[10]と順位rank[10]をともに出力しなさい。
[3] 環境
[3.1] OS:WindowsXP
[3.2] コンパイラ名とバージョン:borland
[3.3] 言語:C
[4] 期限:日曜日
[5] その他の制限:
よろしくお願いします。
174:デフォルトの名無しさん
07/05/16 15:23:15
>>133
助かりました!ありがとうございます!
175:デフォルトの名無しさん
07/05/16 15:43:15 BE:139752498-2BP(222)
>>173
#include<stdio.h>
#include<stdlib.h>
int cmpdbl(const double* a,const double* b){return (int)(*a-*b);}
int main(void){double data[10],rank[10];int i;char tmp[256];
for(i=0;i<10;i++){printf("実数%i:",i);fgets(tmp,255,stdin);data[i]=atof(tmp);}
qsort(data,sizeof(data)/sizeof(double),sizeof(double),cmpdbl);
printf("data:\n");for(i=0;i<10;i++){printf("[%i]%f\n,i,data[i]);}
printf("rank:\n");for(i=0;i<10;i++){printf("[%i]%f\n,i,rank[i]);}return 0;}
176:デフォルトの名無しさん
07/05/16 15:44:04
C言語ではないんですがアルゴリズムのフローチャートを書ける方居ますか?
問題1:平均点計算
点数を入力して、平均点を出力するフローを答えなさい[入力した点数が0より小さい時終了する]
問題2:合計
1+(1+2)+(1+2+3)+・・・(1+2+・・・+10)を計算し、計算結果を出力するフローを答えなさい
の2問のフローチャートがどうしてもわからないので何方か解る方がいましたら教えてください
いくら考えても解らないので何方かお願いします
177:デフォルトの名無しさん
07/05/16 15:44:40
>>171 こういう事か?
今、××を見ながらCの勉強をしています。
そこに「ある配列を反転した内容を別の配列にコピーする」というプログラムあり、
それを改造して、「あるひとつの配列の内容を反転する」プログラムを自力で作ってみました。
しかしコンパイルは通るのですが、実行してみると思ったとおりの結果にならなくて困っています。
元のプログラムでは表示用の関数printが2つに分かれており、
それをひとつにまとめてしまったのが原因なのでしょうか?
配列がひとつしか無いので表示用の関数は1つだけにしたいのですが、
上手いやり方はありませんか?
178:デフォルトの名無しさん
07/05/16 16:08:13 BE:67935757-2BP(222)
>>175訂正
#include<stdio.h>
#include<stdlib.h>
int cmpdbl(const double* a,const double* b){return (int)(*a-*b);}
int main(void){double data[10],rank[10];int i;char tmp[256];
for(i=0;i<10;i++){printf("実数%i:",i);fgets(tmp,255,stdin);data[i]=rank[i]=atof(tmp);}
qsort(rank,sizeof(rank)/sizeof(double),sizeof(double),cmpdbl);
printf("data:\n");for(i=0;i<10;i++){printf("[%i]%f\n,i,data[i]);}
printf("rank:\n");for(i=0;i<10;i++){printf("[%i]%f\n,i,rank[i]);}return 0;}
179:デフォルトの名無しさん
07/05/16 16:13:28
CUIばっかじゃねーか
180:デフォルトの名無しさん
07/05/16 16:37:06
10個の整数データを木構造に保存し、
順に木をなぞる再起プログラミングを作成せよ.
C言語。
アルゴリズムとデータ構造。
21日までです。
よろしくお願いします。
181:デフォルトの名無しさん
07/05/16 16:39:22
マルチ
スレリンク(tech板:851番)
182:デフォルトの名無しさん
07/05/16 16:39:26 BE:34937892-2BP(222)
>>180
>順に木をなぞる再起プログラミングを作成せよ.
何の順だ。
183:デフォルトの名無しさん
07/05/16 16:46:38
他人に質問できるレベルにさえ達してないのか
184:デフォルトの名無しさん
07/05/16 17:01:22
>>183
課題をそのままコピーしただけなのですが・・・すいません。
>>182
「順」っていう言葉がなければ大丈夫ですかね?
分かる範囲でいいので、ぜひご指導お願いします。
10個の整数データを木構造に保存し、
木をなぞる再起プログラミングを作成せよ.
C言語。
アルゴリズムとデータ構造。
21日までです。
よろしくお願いします。
185:デフォルトの名無しさん
07/05/16 17:04:21
>>173
#include <stdio.h>
int main(void){
int i,j,rank[10]={0};double data[10];char buf[256];
for(i=0;i<10;){
printf("%d番目の実数を入力して下さい:",i+1);
fgets(buf,255,stdin);
if(!sscanf(buf,"%lf",data+i)) continue;
++i;
}
for(i=0;i<10;++i){
for(j=0;j<10;++j){
if(data[i]<=data[j]) ++rank[j];
}
}
for(i=0;i<10;++i) printf("data[%d]=%f\n",i,data[i]);
for(i=0;i<10;++i) printf("rank[%d]=%d\n",i,rank[i]);
return 0;
}
186:デフォルトの名無しさん
07/05/16 17:18:00 BE:69876094-2BP(222)
>>184
情報が足りねえって言ってるのにさらに減らすのはどういう嫌がらせですか。
「どんな木をどうやってなぞるのか」と聞いてるのに。
187:デフォルトの名無しさん
07/05/16 17:30:17
【質問テンプレ】
[1] 情報基礎論演習
[2] 課題1:2つの正方行列の和・差・積を求め、計算結果を見やすく画面に表示するプログラムを作成せよ。
ただし、両行列の要素はプログラム実行時にキー入力するものとする。(scanf)また、行列のサイズは4×4とする。
課題2:1で作成したプログラムを以下のように修正せよ。
・行列の要素はキー入力ではなくファイルから読み込む。(入力ファイルは自分で作成)
・計算結果は画面でなくファイルに出力すること。
[3] 環境
[3.1] Windows
[3.2] cygwin
[3.3] C
[4] 期限:5月18日
[5] 特になし
よろしくお願いします。
188:デフォルトの名無しさん
07/05/16 17:47:49
高校1年です
[1] プログラミング
[2] キーボードから固定費・変動費・単価・商品の売れた数を受け取り、収益と収益における固定費・変動費それぞれの割合、純利益を表示するプログラムをC言語で記述せよ
[3] 環境
[3.1] 窓達XP
[3.2] Borland C++ Compiler 5.5
[3.3] C
[4]明日の情基の時間までに提出
[5] 専用のプリントに記述し提出、プログラムの動作を確認できる環境があれば確認して提出。その際、失敗したプログラムは消さないようにすること
動作確認は出来る環境です
一応書いたのですが、固定費割合と変動費割合が算出されません
189:デフォルトの名無しさん
07/05/16 17:49:33
>>188の課題で私が書いたプログラムを晒しときますね
固定費・変動費の割合が0.000000000になる以外は正常に算出されます
{
int tanka,kote,hen,rie,ure_kazu,ure_kane;
float kote_wari,hen_wari;
printf("単価はいくら?\n");
scanf("%d",&tanka);
printf("いくつ売れた?\n");
scanf("%d",&ure_kazu);
printf("固定費用は?\n");
scanf("%d",&kote);
printf("変動費用を算出して入力してください\n");
scanf("%d",&hen);
ure_kane = ure_kazu * tanka;
rie = ure_kane - (kote + hen);
kote_wari = (kote / ure_kane) * 100;
hen_wari = (hen / ure_kane) * 100;
printf("収益は%d、収益における固定費と変動費の割合はそれぞれ%f%、%f%です。よって貴社の利益は%dです。",ure_kane,kote_wari,hen_wari,rie);
return 0;
}
190:デフォルトの名無しさん
07/05/16 17:55:23
>>189
スレ違い。
整数割る整数は整数になる。実数にしたいなら、キャストしとけ。
ついでに言えば、特にケチる理由がないならdoubleにしとけ。
floatでは、10進換算で7桁程度しか精度がないぞ。
Ex.
double kote_wari = (double) kote / ure_kane * 100.;
191:デフォルトの名無しさん
07/05/16 17:56:03 BE:104814296-2BP(222)
>固定費・変動費の割合が0.000000000になる
理由をまず考えろ。
192:デフォルトの名無しさん
07/05/16 17:56:54
小手割りって何かの技みたいだな。
193:デフォルトの名無しさん
07/05/16 17:58:48
>>190
わかりました
100.0000を超えることはないのでfloatで十分だと思ったのですが…
doubleでやってみますね
キャストはまだ習ってませんがjavaで学んだのでやってみます
ありがとうございました
194:デフォルトの名無しさん
07/05/16 17:59:59
>>191
分かりませんでしたのでここで質問させていただきました
あれ?もともとの公式が間違ってるのかな…?
195:デフォルトの名無しさん
07/05/16 18:04:55
>>194
>190
196:デフォルトの名無しさん
07/05/16 18:05:37
>>190
キャストがよく分からなかったので変数を全てfloatで宣言したら正常に動作しました
本当にありがとうございました
197:デフォルトの名無しさん
07/05/16 18:06:33
hen_wari = (hen / ure_kane) * 100;
hen=200,ure_kane=400の場合、200÷400=0余り200
hen_wari = (200 / 400) * 100;
hen_wari = 0 * 100;
hen_wari = 0;
198:デフォルトの名無しさん
07/05/16 18:10:42
>>196
その大雑把な応用性は現場にはとても必要なものだ
しかし大雑把過ぎると精密さが要求されるプログラムでしくじるかもな
199:デフォルトの名無しさん
07/05/16 18:44:55 BE:104814296-2BP(222)
最低限、作用機序を理解していることが前提だがな。
「理由は分からないけどこうしたら直った」という対処は迷惑でしかない。
200:デフォルトの名無しさん
07/05/16 20:05:27
>>188
この前入学したばかりなんだろ?
なんかレベル高い授業やってんな
201:デフォルトの名無しさん
07/05/16 20:11:29
>>188は高学歴
202:デフォルトの名無しさん
07/05/16 20:14:51
>200
用語が難しそうに見えるだけで、やってることは数字入力に四則演算程度の入門レベルだろ。
203:デフォルトの名無しさん
07/05/16 20:17:02
>>202
高校一年でだぞ?
204:デフォルトの名無しさん
07/05/16 20:45:25
私が高校一年の時はCじゃなくてアセンブリだったな orz どう考えても低(ry
205:デフォルトの名無しさん
07/05/16 20:47:36
高1でアセンブラか。
そりゃずいぶんと低レベルだな。
206:デフォルトの名無しさん
07/05/16 20:52:58
>>205
俺なんか中学のときにトランジスタを・・・
207:デフォルトの名無しさん
07/05/16 20:56:22
それは趣味だろ
義務教育でトランジスタとか触るの?
208:デフォルトの名無しさん
07/05/16 20:58:39
もしかして、ゆとり世代には
「技術」という科目は無いのか?
209:デフォルトの名無しさん
07/05/16 20:58:46
もう20年以上まえになるが...
高校の頃, 必死こいてセグメントレジスタ気にしながら 8086 アセンブラで
lisp 処理系を作ろうとしていた当時の俺って低レベルですか?
210:デフォルトの名無しさん
07/05/16 21:08:09
>>207-208
10年前中学生だった俺は授業の中でトランジスタを触ることがあった。
>>209
低レベルだね
211:デフォルトの名無しさん
07/05/16 21:14:28
>>208
ゆとり直前世代ですがありました
皆さんが低レベルと言ってるのは、低級と言い換えても構いませんね!
大学入って初めてCに触れてるくらいだから俺はかなり高レベル
212:デフォルトの名無しさん
07/05/16 21:15:50
俺なんか小学校のときにそろばんを・・・
213:デフォルトの名無しさん
07/05/16 21:17:28
低水準のことじゃないのか。
214:デフォルトの名無しさん
07/05/16 21:17:32
>>211
俺にとっては C はアセンブラの延長
っか, マシンに依存しないアセンブラ
十分, 低レベル言語
215:デフォルトの名無しさん
07/05/16 21:46:05
ゆとりだけど技術あったよ
中学1年と2年で木工、3年でPC
選択ではタイニーベーシックもやる
ちなみに>>188の高校は大体予想が付く
普通の工業では固定費割合とかの経営側のことはやらない
たぶん初級シスアド狙ってる学校
だから初級シスアド試験一部免除校リストのどれかだろ
216:デフォルトの名無しさん
07/05/16 22:07:39
int flag = 0;
while(1){
if(flag == 100)
Test *t2 = new Test(0,0);
if(flag > 300)
t2->do(); }
C++でAPIを利用したゲームを作成しています。
ここで、Testというクラスがあらかじめ定義されているとしてください。
flagが100になった(つまりループが100回回ったとき)に敵を発生させたく、このようなプログラムを書きました。
しかし、コンパイル時に、t2が定義されていない識別子となり、はじかれてしまいます。(最終行)
どのように対処すればよろしいのでしょうか?
whileループ前にt2を確保しておけば動作するのですが、それでは今後困ることがでるので・・・。
宜しくお願いします。
環境:VC++6.0
217:デフォルトの名無しさん
07/05/16 22:11:55
ループ内で変数確保とはびっくりした。これっていいの?
218:デフォルトの名無しさん
07/05/16 22:12:50
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
与えられたnに対し、分母がn以下で値が0以上1以下の既約分数をすべて求めよ。(再帰を使うこと。)
[3] 環境
[3.1] OS: WindowsXP
[3.2] コンパイラ名とバージョン: Borland C++ Compiler 5.5
[3.3] 言語: C言語
[4] 期限: 5/18
[5] その他の制限: 特にないです。
219:216
07/05/16 22:16:54
ループ内でflag++;という分を書き忘れてしまいました。
int flag = 0;
while(1){
if(flag == 100)
Test *t2 = new Test(0,0);
if(flag > 300)
t2->do();
flag++;}
です。
>>217
やっぱりまずいんでしょうかねぇ。
でもあるタイミングで敵を発生させるときとかどうしたらいいのかわかりません・・・。
220:デフォルトの名無しさん
07/05/16 22:26:09
>>216 >>219
スレ違い
スコープについて勉強してこい
221:デフォルトの名無しさん
07/05/16 22:40:00
>>186
根付き木で、深さ優先探索です。
222:216
07/05/16 22:40:15
やはりあらかじめ作成しておいて、後に削除するしかないのでしょうか・・・。
それだと、敵をある時間に生成する上手い方法ありませんか?
223:デフォルトの名無しさん
07/05/16 23:04:59
質問テンプレ】
[1] 授業単元:C言語
[2] 問題文(含コード&リンク):
文字列①と文字列②を比較し、正しければ○、正しくなければ×を出力せよ。
文字列は半角英数、全角、空白、記号も含める。
(文字列①、②ともに空白の場合はエラーを出力する。)
<実行結果>
文字列①を入力してください。---> (入力後、実行で下段を表示)
文字列②を入力してください。---> (入力後、実行で結果を表示)
結果:○
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名:Visual Studio
[3.3] 言語:C
[4] 期限:5/17
[5] その他の制限: 無し
224:デフォルトの名無しさん
07/05/16 23:10:12
>>223
#include<stdio.h>
#include<string.h>
int main(){
char str1[1000],str2[1000];
printf("文字列①を入力してください。--->");
scanf("%s",str1);
printf("文字列②を入力してください。--->");
scanf("%s",str2);
printf("結果:%s\n",strcmp(str1,str2)?"×":"○");
return 0;
}
225:デフォルトの名無しさん
07/05/16 23:14:13
>>224
ありがとうです。
でも、1000文字を超えたらアウトですよね?
その場合、どうしたらいいですか?
それと、両方とも空白時のエラーメッセージはどうしましょう・・・
226:デフォルトの名無しさん
07/05/16 23:18:16
>>225
ごめん、普通にエラーとか忘れてた orz
#include<stdio.h>
#include<string.h>
#define N 1000
int main(){
char str1[N],str2[N];
printf("文字列①を入力してください。--->");
fgets(str1,N,stdin);
printf("文字列②を入力してください。--->");
fgets(str2,N,stdin);
if(strlen(str1)>1||strlen(str2)>1)
printf("結果:%s\n",strcmp(str1,str2)?"×":"○");
else
printf("エラー\n");
return 0;
}
さっきよりほんの少しだけまともに書いてみた。
メモリの許す限り文字列を比較したいなら、勉強して自分でがんがれ
227:>222
07/05/16 23:50:06
宣言をループの外で
確保はループの中で
228:デフォルトの名無しさん
07/05/17 01:43:48
>問題2:合計
>1+(1+2)+(1+2+3)+・・・(1+2+・・・+10)を計算し、計算結果を出力するフローを答えなさい
[開始]
|
[計算結果s=0]
|
[カウンタn=1]
|
[カウンタi=1]
|
[s=s+i]
|
[i=i+1]
|
[カウンタi<=nの間繰り返し]
|
[n=n+1]
|
[カウンタn<=10の間繰り返し]
|
[計算結果s表示]
|
[終了]
229:デフォルトの名無しさん
07/05/17 01:45:33
>>225
応用でstring.hを使わずに考えられると力が付くぞ
230:デフォルトの名無しさん
07/05/17 01:51:50
>>225
1000文字超えたときのこと考えるとCじゃ無理
231:デフォルトの名無しさん
07/05/17 03:07:06
【質問テンプレ】
[1] 情報基礎論演習
[2] 課題1:2つの正方行列の和・差・積を求め、計算結果を見やすく画面に表示するプログラムを作成せよ。
ただし、両行列の要素はプログラム実行時にキー入力するものとする。(scanf)また、行列のサイズは4×4とする。
課題2:1で作成したプログラムを以下のように修正せよ。
・行列の要素はキー入力ではなくファイルから読み込む。(入力ファイルは自分で作成)
・計算結果は画面でなくファイルに出力すること。
[3] 環境
[3.1] Windows
[3.2] cygwin
[3.3] C
[4] 期限:5月18日
[5] 特になし
前に書いたのですが、スルーされてしまったのでもう一度書かさせてもらいます。
非常に困ってます。どうかよろしくお願いします。
232:デフォルトの名無しさん
07/05/17 03:08:46
>書かさせてもらいます
さ入れ言葉
233:デフォルトの名無しさん
07/05/17 05:26:00
>>231
/*
正方行列の和・差・積を表示するプログラム
*/
#include <stdio.h>
/* ユーザ定義型宣言 */
#define DIM 4
typedef struct
{
int element[DIM][DIM];
}matrixSquare;
/* 関数宣言部 */
matrixSquare AddSqu(matrixSquare* m1, matrixSquare* m2);
matrixSquare SubSqu(matrixSquare* m1, matrixSquare* m2);
matrixSquare MulSqu(matrixSquare* m1, matrixSquare* m2);
void inputMatrixSquare(matrixSquare* ms);
void putMatrixSquare(matrixSquare ms);
234:デフォルトの名無しさん
07/05/17 05:26:21
/* メイン関数 */
int main(void)
{
matrixSquare ma, mb;
/* 正方行列に数値を入力する */
{
printf("4x4の正方行列aを空白で区切って1行ずつ入力.\n"); inputMatrixSquare(&ma);
printf("4x4の正方行列bを空白で区切って1行ずつ入力.\n"); inputMatrixSquare(&mb);
/* 入力バッファに溜まるので、一気に全ての要素を入力しても良い */
}
/* 和・差・積を表示する */
{
printf("aとbの和\n"); putMatrixSquare(AddSqu(&ma, &mb));
printf("aとbの差\n"); putMatrixSquare(SubSqu(&ma, &mb));
printf("aとbの積\n"); putMatrixSquare(MulSqu(&ma, &mb));
}
return 0;
}
235:デフォルトの名無しさん
07/05/17 05:27:06
/* */
/* 関数の実装 */
/* */
matrixSquare AddSqu(matrixSquare* m1, matrixSquare* m2)
/* 正方行列同士の和を返す */
{
matrixSquare mRes;
int y, x;
for(y=0; y!=DIM; y++)
{
for(x=0; x!=DIM; x++)
{
mRes.element[y][x] = m1->element[y][x] + m2->element[y][x];
}
}
return mRes;
}
236:デフォルトの名無しさん
07/05/17 05:27:37
matrixSquare SubSqu(matrixSquare* m1, matrixSquare* m2)
/* 正方行列同士の差を返す */
{
matrixSquare mRes;
int y, x;
for(y=0; y!=DIM; y++)
{
for(x=0; x!=DIM; x++)
{
mRes.element[y][x] = m1->element[y][x] - m2->element[y][x];
}
}
return mRes;
}
237:デフォルトの名無しさん
07/05/17 05:27:54
matrixSquare MulSqu(matrixSquare* m1, matrixSquare* m2)
/* 正方行列同士の積を返す */
{
matrixSquare mRes;
int x, y, k;
for(y=0; y!=DIM; y++)
{
for(x=0; x!=DIM; x++)
{
int tmp;
for(k=0, tmp=0; k!=DIM; k++)
{
tmp += m1->element[k][x] * m2->element[y][k];
}
mRes.element[y][x] = tmp;
}
}
return mRes;
}
238:デフォルトの名無しさん
07/05/17 05:29:31
void inputMatrixSquare(matrixSquare* ms)
/* 正方行列を一行単位で入力する */
{
int i;
for(i=0; i!=DIM; i++)
{
printf("%d行目>", i+1);
scanf("%d %d %d %d", &(ms->element[i][0]), &(ms->element[i][1]), &(ms->element[i][2]), &(ms->element[i][3]));
}
printf("\n");
}
239:デフォルトの名無しさん
07/05/17 05:30:12
void putMatrixSquare(matrixSquare ms)
/* 正方行列を標準出力へ書き出す */
{
int x, y;
for(y=0; y!=DIM; y++)
{
for(x=0; x!=DIM; x++)
{
printf("%10d ", ms.element[y][x]);
}
printf("\n");
}
}
[EOF]
240:デフォルトの名無しさん
07/05/17 05:55:40
>238訂正
void inputMatrixSquare(matrixSquare* ms)
/* 正方行列を一行単位で入力する */
{
int i, j;
for(i=0; i!=DIM; i++)
{
printf("%d行目>", i+1);
for(j=0; j!=DIM; j++)
{
scanf("%d", &(ms->element[i][j]));
}
}
printf("\n");
}
241:デフォルトの名無しさん
07/05/17 05:56:55
うpロダ使えYO!
242:216
07/05/17 06:06:30
>>227 ありがとうございます無事できました。
クラスをnewで作成したとします。(仮に*test)とします。
これをクラス内のメソッドで消す方法はありませんか?
つまり、自クラスで自分をdeleteするということです。
自分は自信の名前を知らないので、
delete test ; と記述することが出来ません。
あらかじめprivate変数として自信の名前を記録しておく他ないのでしょうか?
243:デフォルトの名無しさん
07/05/17 06:50:35
delete This;
244:デフォルトの名無しさん
07/05/17 06:51:24
↑間違い
delete this;
です。
245:デフォルトの名無しさん
07/05/17 06:54:03
てかこれは基本中の基本であってもう一度C++勉強し直せ
246:デフォルトの名無しさん
07/05/17 08:01:23
>>231
問2。
URLリンク(kansai2channeler.hp.infoseek.co.jp)
247:デフォルトの名無しさん
07/05/17 09:10:59
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
【処理方式】
① int型変数に値を入力する。(0~9)
② chg関数に、入力した値を渡す。(ポインタ)
③ その値が2で割って余りが0なら10倍し、余りが1なら5倍する。
④ Main関数にてchgにて計算された値を表示する。
【処理結果】
Cnt =>XXXX
cnt(chg後) :XXXX
[3] 環境
[3.1] OS: WindowsXP
[3.2] コンパイラ名とバージョン: Borland C++ Compiler 5.5
[3.3] 言語: C言語
[4] 期限: 5/18
[5] その他の制限: 特にないです
248:デフォルトの名無しさん
07/05/17 09:41:50
>>247
#include<stdio.h>
void chg(int *cnt){
*cnt *= *cnt%2 ? 5 : 10;
}
int main(){
int cnt;
printf("Cnt =>");
scanf("%d",&cnt);
if(cnt<0 && 9<cnt) return 1;
chg(&cnt);
printf("cnt(chg後) :%d\n",cnt);
return 0;
}
249:デフォルトの名無しさん
07/05/17 09:46:33
>>247
>① int型変数に値を入力する。(0~9)
ってあるけど、
>Cnt =>XXXX
これと矛盾しない?
250:デフォルトの名無しさん
07/05/17 11:08:22 BE:31055982-2BP(222)
>>221
漠然としすぎててわからんと何度も言ってるわけだが。
>根付き木で、
そういうことじゃなくて、子は何人までとか、親子関係、兄弟関係の決め方とかが
わからんとやりようがねえって言ってんだよ。
その意味すら分からないなら単位落として退学しろクズ。
251:デフォルトの名無しさん
07/05/17 11:09:22
[1] 授業単元: C言語
[2] 問題文(含コード&リンク):
正負それぞれ、万、億の位まで対応できる読み上げ文字列生成プログラムを作成せよ。
[3] 環境
[3.1] OS: (Windows/Linux/等々) Linux
[3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)gcc
[3.3] 言語: (C/C++/どちらでも可 のいずれか) C言語
[4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか)明日の昼
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
・「数値読み上げ」とは、数値を入力したときにその数字の読み方を表す文字列を生成して出力するプログラムで、
たとえば、「1」と入力したら「ICHI」、「1024」と入力したら「SEN NIJYU YON」と出力するプログラムです。
・拡張性やライブラリ化の容易さを考えて、生成した文字列を一旦文字配列変数に格納し、
読み上げ文字列が完成したあとでまとめて出力する形式でお願いしますorz
(引数として数値を与えて呼び出すと、return値として読み上げ文字列へのポインタを返すような関数を作成し、main関数からこれを呼び出す)
・各桁ごとの数字の文字列生成や4桁ごとに現れる千百十の単位の文字列生成のように、
繰り返し出現すつ処理は出来る限り1箇所にまとめてモジュール化する
制限多いですがよろしくおねがいしますm(__)m
252:デフォルトの名無しさん
07/05/17 11:18:50
>>250
もちつけw
>>221
>10個の整数データを木構造に保存し、
>順に木をなぞる再起プログラミングを作成せよ.
10個の整数データがあるのは解った。
深さ優先探索ってのも解った。
で、この10個の整数とやらをどうやって木にするんだ?
rootから順に、何らかの基準によって、
ある要素の子になったり、ある要素と同レベルの要素になったりするわけだろ?
それがわからなきゃコードなんか書きようがないだろ。
そもそも探索対象の木が作れないんだから。
で、これでもまだ理解できないなら、単位は諦めな。
もう一回受けるのが君のためだ。
253:デフォルトの名無しさん
07/05/17 12:00:30
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):
次の無限等比級数の和を求めなさい。
∞ 1
Σ ━
n=1 n^4
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: unix
[3.3] 言語: (C/C++/どちらでも可 のいずれか)
[4] 期限: (5/18)
[5] その他の制限: あまり詳しくありませんが、FILE *to; を使って記述するみたいです。
254:デフォルトの名無しさん
07/05/17 12:20:57
>>253 あまり賢くない方法で
#include <stdio.h>
#include <math.h>
int main()
{
FILE *to = fopen("output.txt", "wt");
double sum = 0, min = pow(10, -8);
long int n;
for(n = 1; 1/pow(n, 4) > min; n++)
sum += 1/pow(n, 4);
fprintf(to, "%.20f\n", sum);
return 0;
}
255:sage
07/05/17 13:06:29
>>254
すばやい対応ありがとうございました。
すいませんよろしければ教えてほしいのですが、
このときn^4のところが(n^4+2)となったらどのように記述したらよろしいでしょうか?
256:それくらいできないなら技術系の職には向いてないと言うことだ
07/05/17 13:37:48
>>255
n^4のときにpow(n, 4)と書いたのだから、(n^4+2)ならおなじようにすればいいんでない?
257:247
07/05/17 13:39:51
>>247
#include<stdio.h>
void chg(int *cnt){
*cnt *= *cnt%2 ? 5 : 10;
}
この意味を教えてもらっていいですか?
258:デフォルトの名無しさん
07/05/17 13:42:28
>③ その値が2で割って余りが0なら10倍し、余りが1なら5倍する。
259:デフォルトの名無しさん
07/05/17 13:55:01
*cnt *= *cnt%2 ? 5 : 10;
この表記だと
参照はずしの* と *= との順位とか 参照はずしの* と % との順位で不安を感じるな
260:デフォルトの名無しさん
07/05/17 14:02:59
>>218お願いします><
261:247
07/05/17 14:13:47
>>259
参照はずしとはなんですか?
262:デフォルトの名無しさん
07/05/17 14:14:37
>>261
>参照はずしとはなんですか?
*
263:デフォルトの名無しさん
07/05/17 14:48:06 BE:29115735-2BP(222)
ここは宿題解説スレじゃないので答えもらったらさっさと持って帰れ。
264:デフォルトの名無しさん
07/05/17 15:33:04
>>218 >>260
#include <stdio.h>
typedef enum {false, true} bool;
bool isLowestTerm(int n, int d){
int i;
if(n == d && d != 1) return false;
for(i=n; i!=1; i--)
if(n%i == 0 && d%i == 0) return false;
return true;}
void PLT2(int num, int denomi){
if(num!=1) PLT2(num-1, denomi);
if(isLowestTerm(num, denomi))
printf("%d/%d\n", num, denomi);}
void PutLowestTerm(int n){
if(n != 1) PutLowestTerm(n-1);
PLT2(n, n);}
int main(void){
int n;
printf("n := "); scanf("%d", &n);
PutLowestTerm(n);
return 0;}
265:デフォルトの名無しさん
07/05/17 15:44:16
うぅむ、0が正しく処理されてないので訂正。
#include <stdio.h>
typedef enum {false, true} bool;
bool isLowestTerm(int n, int d){
int i;
if(n == 0) return (d == 1) ? true : false;
if(n == d && d != 1) return false;
for(i=n; i!=1; i--)
if(n%i == 0 && d%i == 0) return false;
return true;}
void PLT2(int num, int denomi){
if(num!=0) PLT2(num-1, denomi);
if(isLowestTerm(num, denomi))
printf("%d/%d\n", num, denomi);}
void PutLowestTerm(int n){
if(n != 1) PutLowestTerm(n-1);
PLT2(n, n);}
int main(void){
int n;
printf("n := "); scanf("%d", &n);
PutLowestTerm(n);
return 0;}
266:デフォルトの名無しさん
07/05/17 16:56:56
>>259
不安なら括弧つければいいじゃん
制限無しだったしそこまで丁寧にはやってないぞ
267:デフォルトの名無しさん
07/05/17 17:23:31
初めまして。大学1年生です。
プログラミングの授業で課題が出されました。
【質問テンプレ】
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
キーボードから文字列を入力し、それを逆順に表示するプログラムを作成せよ。
表示には必ずポインタを用いること。
[3] 環境
[3.1] OS:Windows xp
[3.2] コンパイラ名とバージョン:Microsoft Visual Studio .NET 2003を使っております。
[3.3] 言語:C言語
[4] 期限:[2006年05月23日17時まで]
[5] その他の制限:なし
よろしくお願いします。
268:デフォルトの名無しさん
07/05/17 17:31:54
#include <stdio.h>
int main()
{
char buf[100], *p;
fgets(buf, sizeof(buf), stdin);
for (p = buf; *p != '\n'; p++);
for (;p >= buf; p--)
putchar(*p);
return 0;
}
こうですか?
269:デフォルトの名無しさん
07/05/17 17:34:57
>>267
#include <stdio.h>
#include <string.h>
int main()
{
char buf[100];
if (fgets(buf, sizeof(buf), stdin) == NULL) return 1;
int ic = strlen(buf) - 1;
if (buf[ic] == '\n') --ic;
for (; ic >= 0; --ic) {
putchar(buf[ic]);
}
return 0;
}
270:デフォルトの名無しさん
07/05/17 17:42:46 BE:23292162-2BP(222)
>>267
URLリンク(c-kadai.sakura.ne.jp)
271:デフォルトの名無しさん
07/05/17 17:45:50
>267
#include <stdio.h>
int main(void)
{
char str[1024];
char *p;
scanf("%s", str);
p = str;
while(*p) p++;
while(p!=str) putchar(*--p);
return 0;
}
272:デフォルトの名無しさん
07/05/17 18:00:26
#include <stdio.h>
#define MAX_INPUT 1024
void
reverse(char *buf)
{
if (*(buf) == '\n')
return;
reverse(buf + 1);
putchar(*buf);
}
int
main()
{
char buf[MAX_INPUT];
if (fgets(buf, MAX_INPUT, stdin) == NULL)
return 1;
reverse(buf);
putchar('\n');
return 0;
}
273:デフォルトの名無しさん
07/05/17 18:15:20
>>267
void rp(char *s){
if(*++s)rp(s);
putchar(*--s);
}
int main(){
char s[256];
fgets(s,256,stdin);
rp(s);
return 0;
}
携帯だから遅い上に未確認 orz
274:デフォルトの名無しさん
07/05/17 18:50:27
プログラミングの授業で課題が出されたのですが、
コンパイルできても自分の思ってるとおりに動いてくれません。
何処が違うのか、また、どのように直せばいいのか指摘をお願いいたします。
【質問テンプレ】
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
連結リストの挿入・削除・表示を行う。
[3] 環境
[3.1] OS:Windows xp
[3.2] Borland C++ と BCC Developer
[3.3] 言語:C言語
[4] 期限:[2006年05月25日17時まで]
[5] その他の制限:なし
よろしくお願いします。
275:デフォルトの名無しさん
07/05/17 18:53:27
ソースうぷすれ
276:デフォルトの名無しさん
07/05/17 18:53:47
>>274
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct CELL{
struct CELL *next;
int value;
}
main(void){
int or,banti,mval,y,z;
struct CELL *header,*p,*q,*new,b,c,d;
header->next = &b;
header->value = 130;
b.next = &c;
b.value = 90;
c.next = &d;
c.value = 55;
d.next = NULL;
d.value = 160;
for(;;){
/*qを現在、pを次のポインタに設定*/
p = header->next;
q = header;
277:デフォルトの名無しさん
07/05/17 18:55:04
printf("[0]=挿入、[0以外]=削除\n");
scanf("%d",&or);
printf("何番目の要素[0~]?\n");
scanf("%d",&banti);
if(or == 0){
printf("値を入力してください\n");
scanf("%d",&mval);
if(banti == 0){
/*リストの先頭に新しいセルを挿入する場合*/
if((q = malloc(sizeof(struct CELL))) == NULL){
printf("メモリーが足りない\n");
exit(0);
}
new->value = mval;
new->next = header;
header = new;
}else{
/*ポインタqで記されたセルの直後に新しいセルを挿入する*/
for(y = 1;y <= banti;y++){
q = p;
p = p->next;
}
if((p = malloc(sizeof(struct CELL))) == NULL){
printf("メモリーが足りない\n");
exit(0);
}
new->value = mval;
new->next = p;
q->next = new;
}
278:デフォルトの名無しさん
07/05/17 18:55:12
>276
headerは何を指してるの?
279:デフォルトの名無しさん
07/05/17 18:56:03
}else{
/*連結リストからの削除*/
if(banti == 0){
/*リストの先頭の削除*/
if(header == NULL){
printf("リストが空なので削除できない\n");
exit(0);
}
q = header;
header = q->next;
free(q);
}else{
/*ポインタqで記されたセルの直後のセルを削除する*/
z=1;
while(z < banti){
q = p;
p = p->next;
z++;
}
if(q->next == NULL){
printf("セルが無いから削除できない\n");
exit(0);
}
q->next=p->next;
free(p);
}
}
printf("表示\n");
for(p=header;p!=NULL;p=p->next){
printf("%3d\n",p->value);}}}
280:デフォルトの名無しさん
07/05/17 18:59:05
>>278
14行目のことなら、仮の連結リストをつくって、そこから挿入や削除をしていこうかと。
普通に変数とか構造体のポインタの使い方を間違えてるかもしれないので…
281:デフォルトの名無しさん
07/05/17 19:04:51
>header->next = &b;
>header->value = 130;
このときのheaderは何を指してるの?
282:デフォルトの名無しさん
07/05/17 19:06:32 BE:52408139-2BP(222)
>>280
>仮の連結リストをつくって
つくってないじゃん。
283:デフォルトの名無しさん
07/05/17 19:07:35
>>281
何かを指しているわけではなく単独でヘッダーという変数を作っただけです。
header > b > c > d という感じの連結リストになっているのですが…
あ、確かにこれは変な挙動起こしそう…直してきます。
284:デフォルトの名無しさん
07/05/17 19:09:16
>>283
>何かを指しているわけではなく単独でヘッダーという変数を作っただけです。
初期化してないポインタに代入しちゃ鼻から悪魔だお
285:デフォルトの名無しさん
07/05/17 19:09:49
どなたかおしえてください。
typedef double fp(double)
これどういうこと?
286:デフォルトの名無しさん
07/05/17 19:13:25
>>284
headerがポインタであることを忘れてました。
何でこれでコンパイルできたんだろうなぁ…
main(void){
int or,banti,mval,y,z;
struct CELL *header,*p,*q,*new,a,b,c,d;
header = &a;
a.next = &b;
a.value = 130;
b.next = &c;
b.value = 90;
c.next = &d;
c.value = 55;
d.next = NULL;
d.value = 160;
これでここのところは大丈夫でしょうか?
287:デフォルトの名無しさん
07/05/17 19:19:56
>>251
お願いしますm(_ _)m
288:デフォルトの名無しさん
07/05/17 19:26:19
>277
for(y = 1;y <= banti;y++){ → for(y = 1;y < banti;y++){
if((p = malloc(sizeof(struct CELL))) == NULL){
→ if((new = malloc(sizeof(struct CELL))) == NULL){
>279
free(p) → free(q)
これで多分大丈夫
289:デフォルトの名無しさん
07/05/17 19:33:06
>>285
識別子 fp を、double を引数とし double を返す関数の型として宣言
290:デフォルトの名無しさん
07/05/17 19:53:29 BE:54348847-2BP(222)
>>283
>何かを指しているわけではなく
何かを指さないと連結できないだろが。
291:デフォルトの名無しさん
07/05/17 19:54:06 BE:38820454-2BP(222)
>>287
今やってる。思いの外大変だ。
292:267
07/05/17 19:56:19
>>268様
>>269様
>>270様
>>271様
>>272様
>>273様
ご回答ありがとうございました。
いろんな答えは、今後の勉強になります!!
ありがとうございました。
293:デフォルトの名無しさん
07/05/17 20:17:11
>>291
ありがとうございます!!
待ってますm(_ _)m
294:デフォルトの名無しさん
07/05/17 20:25:33
入力した文章中の単語を1行に一つずつ印字するプログラムを書け。
(ここでの単語とは、ブランク,タブ,改行文字で区切られた文字)
例えば、
This is a book.
と入力すると、
This
is
a
book.
と表示される。
while((c=getchar()) != EOF)
という文を使って文章を入力し、while文終了後に一気に表示させたいのですが、どうやって表示させればいいのかわかりません。
教えてください。
295:274
07/05/17 20:32:55
>>281様
>>283様
>>288様
etc…様
ご回答ありがとうございます!
でも、まだ実際に動かしてみると
部分部分で可笑しな挙動をしてたりしてますが、
初期の状態よりは随分とマシになったような気がいたします。
しばし、自分の力で頑張ってみようと思いますが、
しばらくこのスレを見ながらプログラムをうってますので
どこか変な場所が見つかればご指摘お願いいたします。
またわからなくなった時は聞きにきますので
その時は宜しくお願いします。ありがとうございました。
296:デフォルトの名無しさん
07/05/17 20:34:40
>>294
#include <stdio.h>
#include <ctype.h>
int main(void)
{
int c;
printf("Input strings > ");
while((c=getchar()) != EOF) {
if( isspace(c) ) putchar('\n');
else putchar(c);
}
return 0;
}
297:デフォルトの名無しさん
07/05/17 20:43:25
>>296でwhileを抜けるには最後に Ctrl+Z とかでEOFを入力しておいてね
298:デフォルトの名無しさん
07/05/17 20:46:45 BE:46584364-2BP(222)
>>251>>287 できた。
#include<stdio.h>
#include<stdlib.h>
char* reading4(int d, char* add){
char* result = NULL;char* restmp;
char* places[]={"SEN","HYAKU","JU",""};
char* digits[]={NULL,"","NI","SAN","YON","GO","ROKU","NANA","HACHI","KYU",};
char* reed[4]={NULL,NULL,NULL,NULL};char tmp[256];int i,len;size_t total=0;
sprintf(tmp,"%i",d);len=(int)strlen(tmp);for(i=0;i<len&&i<4;i++){
if(tmp[len-i-1]-'0'){reed[3-i]=digits[tmp[len-i-1]-'0'];
total+=strlen(reed[3-i])+strlen(places[3-i])+1;}}
if(len>3&&tmp[len-4]=='1'){reed[0]="IS";total+=2;}if(len&&tmp[len-1]=='1'){
if(add&&add[0]){char ls[1024];sprintf(ls,"I%c%s",add[0],add);reed[3]=ls;
total+=strlen(ls);}else{reed[3]="ICHI";total+=4;}}
result=(char*)malloc(total+1);restmp=result;for(i=0;i<4;i++){if(reed[i]){
restmp+=sprintf(restmp,"%s%s ",reed[i],(tmp[i]-'0')?places[i]:"");}}
return result;}
int main(void){char tmp[256];char* places[]={"CHO ","OKU ","MAN ",""};
char* reed[4]={NULL,NULL,NULL,NULL};int data,i;fgets(tmp,256,stdin);
data=atoi(tmp);if(data){for(i=0; data>0 && i<4; i++){if(data%10000){
reed[3-i]=reading4(data%10000,(i==0)?places[3-i]:"");data/=10000;}}
for(i=0;i<4;i++){if(reed[i]){fputs(reed[i],stdout);fputs(places[i],stdout);
free(reed[i]);}}}else{fputs("ZERO",stdout);}putchar('\n');return 0;}
299:294
07/05/17 20:47:38
>>296
これだと、Enterを押したときにひょうじされませんか
300:デフォルトの名無しさん
07/05/17 20:56:00
>>299
標準入力にて EOF を検出したら while ループ終了でしょ?
ちゃんと最後のEOFを入力してちょうだいな。
301:294
07/05/17 20:58:42
>>300
できれば、whileループ終了後にまとめて表示したいのですが
302:デフォルトの名無しさん
07/05/17 21:00:06
>>301
だからその終了の条件が EOF が入力されたという条件でしょ?
EOFを入力してくれよ
303:デフォルトの名無しさん
07/05/17 21:01:24
>>301
入力された文字を格納する文字配列でも必要ってこと?
304:294
07/05/17 21:02:48
>>302
EOFを入力したらプログラムが終わってしまいます。
Enterを押したときに表示するのでなく、EOFを入力したときに表示したいのです
305:デフォルトの名無しさん
07/05/17 21:03:08
>>298
ありがとうございます!!
でも100とか1000とか表示されません…
あと、1300とかはISSEN SANHYAKUではなくてISSEN SANBYAKUのように表示しないと
いけないんですorz