>891
1)
#include <stdio.h>
void to_roman(int n){
char roman[7] = {'M','D','C','L','X','V','I'};
int num[7] = {1000, 500, 100, 50, 10, 5, 1};
int i, j;
for(i=0; n; i++) {
if(i%2) {
if(n/num[i+1]==9) {
printf("%c%c", roman[i+1],roman[i-1]);
n -= 9 * num[i+1];}
else if(n/num[i+1]==4) {
printf("%c%c", roman[i+1],roman[i]);
n -= 4 * num[i+1];}}
for(j=0; j<n/num[i]; j++) putchar(roman[i]);
n %= num[i];}
putchar('\n');}
int main(void)
{
int i;
for(i=1; i<5000; i*=2) {
printf("%4d:", i);
to_roman(i);
}
return 0;
}
904 :
デフォルトの名無しさん:2007/01/23(火) 15:52:41
>>903 ありがとうございます
気がむいたら他のもやっちゃってください
>>891 2)
#include <stdio.h>
#include <string.h>
#include <math.h>
int buf[1001];
int main(void)
{
int ptr;
memset(buf, 0x0, sizeof(int) * 1001);
buf[0] = 1;
buf[1] = 1;
for (int i = 0; i < sqrt(1000); i++){
if (1 != buf[i]){
for (ptr = i + i; ptr <= 1000; ptr += i){
buf[ptr] = 1;
}
}
}
}
906 :
デフォルトの名無しさん:2007/01/23(火) 16:24:05
[1] 授業単元:C言語
[2] 問題文(含コード&リンク):
コマンドライン引数から、1つのファイル名を受け、
そのファイルの内容をすべて表示する。
(ただし、テキストファイルしか、引数にしないものとする。)
[3] 環境
[3.1] OS:windows XP
よろしくお願いします。
[3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
[3.3] 言語: C++
[4] 期限:1月23日
[5] その他の制限:
>>891 7)
#include<stdio.h>
#define NITEM(array) (sizeof(array)/sizeof(array[0]))
#define DATA_UNIT_MAX 10000
void print_factrial(int n)
{
long data[30]={1}, carry;
int i, j;
for(i=1;i<=n;i++){
carry=0;
for(j=0;j<NITEM(data);j++){
data[j]=data[j]*i+carry;
carry=data[j]/DATA_UNIT_MAX;
data[j]%=DATA_UNIT_MAX;
}
}
for(i=NITEM(data)-1;data[i]<=0 && i>0;i--)
;
printf("%ld", data[i]);
for(i--;i>=0;i--) printf("%04ld", data[i]);
printf("\n");
}
int main(void){
print_factrial(30);
return 0;
}
>>891 3)
#include <stdio.h>
#include <stdlib.h>
#define TIMES 100000
int main(void)
{
int i;
double cnt;
double x;
double y;
srand((int)time(NULL));
cnt = 0;
for (i = 0; i < TIMES; i++){
x = (double)(rand() % 1000) / 1000;
y = (double)(rand() % 1000) / 1000;
if ((x - 0.5) * (x - 0.5) + (y - 0.5) * (y - 0.5) <= 0.25){
cnt++;
}
}
printf("%f\n", cnt / TIMES);
return 0;
}
>>891 4)
#include <stdio.h>
#include <string.h>
char* conv[] =
{
"0000", "0001", "0010", "0011", "0100", "0101", "0110", "0111",
"1000", "1001", "1010", "1011", "1100", "1101", "1110", "1111",
};
int main(void)
{
int num = 10;
char buf[256];
int i;
num = ~num;
sprintf(buf, "%x", num);
for (i = 0; i < strlen(buf); i++){
sscanf(&buf[i], "%1x", &num);
printf("%s", conv[num]);
}
return 0;
}
ごめん。4)じゃなくて5)だった
[1] 授業単元: PROGRAMING
[2] 問題文(含コード&リンク):
public:
float x,y ;
myComplex setComplex(){
myComplex temp;
temp.real = x ; temp.image = y ;
return temp;
}
DeComplex(){x = 0.0 ; y = 0.0 ; }
~DeComplex(){x = 0.0 ; y = 0.0 ; }
};
をポインタを使って値を返す。
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: (gcc
[3.3] 言語: (C++
[4] 期限: ([今日中まで]
[5] その他の制限:なし
//
>>891 (7) 行数の関係で反転処理は割愛(ぉぃ
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_COLUMN 310
void fact(int num, char * buf)
{
if (num > 1) {
int ic;
int len = strlen(buf);
char tmp[MAX_COLUMN + 1];
int carry = 0;
if (len == MAX_COLUMN) exit(EXIT_FAILURE);
strcpy(tmp, buf);
for (ic = 0; ic < len || carry; ++ic) {
if (ic < len) carry += (tmp[ic] - '0') * num;
buf[ic] = carry % 10 + '0';
carry /= 10;
}
buf[ic] = '\0';
fact(num - 1, buf);
}
}
void factrial(int num, char * buf) {buf[0] = '1'; buf[1] = '\0'; fact(num, buf);}
int main(int argc, char ** argv)
{
char buf[MAX_COLUMN + 1];
factrial(atoi(argv[1]), buf);
printf("%s\n", buf);
return 0;
}
>982 (1)
#include <stdio.h>
#include <string.h>
void main(int argc, char *argv[])
{
char *p,filename[256];
int ch;
FILE *rfp,*wfp;
if (argc==2 && NULL!=(rfp=fopen( argv[1],"rb"))) {
if( NULL==strstr(argv[1], ".txt") ){
strcpy(filename,argv[1]);
if ( NULL!=(p=strchr(filename,'.')) ) {
*p='\0';
strcat(filename,".txt");
}
if (NULL!=(wfp=fopen( filename,"wb"))) {
fprintf(wfp,"%s\n",argv[1]);
while ( EOF!=(ch=fgetc(rfp)) )
fprintf(wfp,"%02X", ch );
fclose(wfp);
}
}
else
printf("txtです\n");
fclose(rfp);
}
}
>982 (2)
#include <stdio.h>
#include <string.h>
int main(int argc, char *argv[])
{
char *p,filename[256];
int ch;
FILE *rfp,*wfp;
if ( argc==2 && NULL!=(rfp=fopen( argv[1],"rb"))) {
if ( NULL!=strstr(argv[1], ".txt") ){
if (NULL!=fgets(filename,sizeof(filename),rfp)) {
for (p=filename;*p!=NULL;p++)
if(*p=='\n')*p=0;
if ( NULL!=(wfp=fopen( filename,"wb"))) {
while( EOF!=fscanf(rfp,"%2x",&ch) )
fputc( ch,wfp );
fclose(wfp);
}
}
}
else
printf("txtではありません\n");
fclose(rfp);
}
}
レス番間違った
×982
○>892
920 :
デフォルトの名無しさん:2007/01/23(火) 17:02:31
>>891 6)
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int word_cmp(const void *a, const void *b){
char **pa, **pb;
pa=a;pb=b;
return strcmp(*pa, *pb);
}
int main(int argc, char *argv[]){
FILE *fp;
char word_buf[1024], **word_list=NULL;
long i, ret, word_list_size=0, word_list_member=0;
fp=fopen(argv[1], "r");
if(fp==NULL) return 1;
while(!feof(fp)){
fscanf(fp, "%*[^A-Za-z]");
ret=fscanf(fp, "%1023[A-Za-z]", word_buf);
if(ret!=1) continue;
if(word_list_member>=word_list_size){
word_list_size+=1024;
word_list=realloc(word_list, sizeof(char *)*word_list_size);
}
word_list[word_list_member++]=strdup(word_buf);
}
fclose(fp);
qsort(word_list, word_list_member, sizeof(char*), word_cmp);
for(i=0;i<word_list_member;i++) printf("%s\n", word_list[i]);
return 0;
}
>>910 >917-919
ありがとうございます
>>915 ぱくったついでに反転処理つき
#define MAX_COLUMN 310
static void fact(int num, char * buf, char * tmp)
{
if (num > 1) {
int ic; int len = strlen(buf); int carry = 0;
if (len == MAX_COLUMN) exit(EXIT_FAILURE);
strcpy(tmp, buf);
for (ic = 0; ic < len || carry; ++ic) {
if (ic < len) carry += (tmp[ic] - '0') * num;
buf[ic] = carry % 10 + '0';
carry /= 10;
}
buf[ic] = '\0';
fact(num - 1, buf, tmp);
}
}
static void reverse(char * buf)
{
int ic; int len = strlen(buf);
for (ic = 0; ic < len / 2; ++ic) {char tmp = buf[ic]; buf[ic] = buf[len - 1 - ic]; buf[len - 1 - ic] = tmp;}
}
const char * factrial(int num)
{
static char buf[MAX_COLUMN + 1];
char tmp[MAX_COLUMN + 1];
buf[0] = '1'; buf[1] = '\0';
fact(num, buf, tmp);
reverse(buf);
return buf;
}
int main(int argc, char ** argv) { printf("%s\n", factrial(atoi(argv[1]))); return 0;}
>>907 #include <stdio.h>
int main(int argc, char *argv[]) {
FILE *fin;
int c;
if(argc != 2 || (fin = fopen(argv[1], "r")) == NULL) return 1;
while((c = getc(fin)) != EOF) putchar(c);
return 0;
}
>>891 4)
#include <stdio.h>
#include <ctype.h>
int main()
{
int c, pc, nc, nw, nl;
for (pc = nc = nw = nl = 0; (c = getchar()) != EOF; pc = c) {
++nc;
if (c == '\n')
++nl;
else if (isalpha(c) && !isalpha(pc))
++nw;
}
if (pc != '\n')
++nl;
printf("%d chars, %d words, %d lines\n", nc, nw, nl);
return 0;
}
>>924 C++とあるぞ
>>907 #include <iostream>
#include <fstream>
int main(int argc, char **argv)
{
if (argc == 1) {
std::cerr << "filename is needed" << std::endl;
return 1;
}
std::ifstream fin(argv[1]);
if (!fin.is_open()) {
std::cerr << "can't open " << argv[1] << std::endl;
return 2;
}
std::cout << fin.rdbuf();
return 0;
}
>>853 そーだよな
でもそーいうプログラム作れという学校はどうなんだろう・・・
学校の宿題じゃないのかもしれない
>>927 if (!fin.is_open()
としなくても
if (!fin)
だけでいいお。
ごく一部の人による催促のレスの繰り返しにうんざりなんだけど。
次スレから催促禁止をテンプレに入れてもらいたい。
スレの性格的にどうしようもない人らが集まるのは止むを得ないんだから、華麗にスルー汁
>>930 たまに見逃してることもあるから、一律禁止は厳しすぎるかも
1日1回までとか。
催促されるほど答えたくなくなるのもまた人情
催促と後で条件追加は二大地雷だな
催促の代わりに、「全員分の」未完了の宿題のまとめ投稿ならOKにするというのは?
>>936 なかなかの名案だ。
未回答まとめるのは結構めんどい
環境がMacだと東大生が質問しに来たかと思ってしまう
東大じゃないけど糞Mac使ってる
>>941 int push(int data, int *sp, int *STK){
if(*sp <= 0) return 0;
STK[--(*sp)] = data;
return 1;
}
int pop(int *dataP, int *sp, int *STK){
if(*sp >= N) return 0;
*dataP = STK[(*sp)++];
return 1;
}
void dsp_stack(int top, int *a){
while(top++ < N)
printf("%d: %d\n",top-1, a[top-1]);
}
「ここまでできています」を信じてたのに・・・ orz 一カ所間違ってるよ
945 :
821:2007/01/23(火) 22:11:59
947 :
デフォルトの名無しさん:2007/01/23(火) 22:18:54
[1] 授業単元:プログラミングT
[2] 問題文(含コード&リンク): 一単語一行の入力テキストを、指定された桁数(70)以内で、
できるだけ少ない行数に納まるように調整して出力する。
ただし、単語の途中で改行してはいけない。
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン: VC++ 2005
[3.3] 言語: C++
[4] 期限:1月25日
[5] その他の制限:特に指定されていません
よろしくお願いします
>>947 #include <iostream>
#include <string>
using namespace std;
const int maxcol = 70;
int main()
{
string s;
int ncol = 0;
while (cin >> s) {
if (s.size() > maxcol) {
cout << flush;
cerr << "Too long word: " << s << endl;
} else if (ncol == 0) {
cout << s;
ncol += s.size();
} else if (ncol + s.size() + 1 < maxcol) {
cout << ' ' << s;
ncol += s.size() + 1;
} else {
cout << '\n' << s;
ncol = s.size();
}
}
cout << endl;
return 0;
}
951 :
デフォルトの名無しさん:2007/01/23(火) 23:12:30
>>950 >>947の者です。答えてもらってありがとうございました。
すいません、950では、const, cerrをまだ習っていない(それ以外は使っても大丈夫なんですが)ので、それで提出するとマズイので、もうちょっと初心者っぽくお願いできないでしょうか?
この場合、constは単純に取り除いて構わないはず。
cerrはcoutに置き換えてしまえばいい。