C/C++の宿題を片付け ..
39:デフォルトの名無しさん
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;
}
次ページ最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
4170日前に更新/299 KB
担当:undef