C/C++の宿題を片付けます 81代目

このエントリーをはてなブックマークに追加
903デフォルトの名無しさん:2007/01/23(火) 15:47:51
>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
ありがとうございます
気がむいたら他のもやっちゃってください
905デフォルトの名無しさん:2007/01/23(火) 16:18:45
>>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
>>905
お疲れ様です^ ^
907デフォルトの名無しさん:2007/01/23(火) 16:26:01
[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] その他の制限:
908デフォルトの名無しさん:2007/01/23(火) 16:27:19
>>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;
}
909デフォルトの名無しさん:2007/01/23(火) 16:30:32
>>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;
}
910デフォルトの名無しさん:2007/01/23(火) 16:32:15
>>892
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3499.txt
拡張子を変更するあたりの処理がマズイような気もするけど、キニシナイ
911デフォルトの名無しさん:2007/01/23(火) 16:44:10
>>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;
}
912デフォルトの名無しさん:2007/01/23(火) 16:44:47
ごめん。4)じゃなくて5)だった
913デフォルトの名無しさん:2007/01/23(火) 16:47:02
>>737
しつこいからだれかやってヤレ
914デフォルトの名無しさん:2007/01/23(火) 16:51:12
[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] その他の制限:なし
915デフォルトの名無しさん:2007/01/23(火) 16:52:33
// >>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;
}
916デフォルトの名無しさん:2007/01/23(火) 16:53:56
>>913
おまえがやってやれよ
917デフォルトの名無しさん:2007/01/23(火) 16:53:57
>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);
    }
}
918デフォルトの名無しさん:2007/01/23(火) 16:54:27
>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);
    }
}
919デフォルトの名無しさん:2007/01/23(火) 16:56:45
レス番間違った
×982
○>892
920デフォルトの名無しさん:2007/01/23(火) 17:02:31
>>908>>909>>911
激しく乙です
感謝します
921デフォルトの名無しさん:2007/01/23(火) 17:03:45
>>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;
}
922デフォルトの名無しさん:2007/01/23(火) 17:09:43
>>910 >917-919
ありがとうございます
923感謝されない>915の代理w:2007/01/23(火) 17:10:54
>>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;}
924デフォルトの名無しさん:2007/01/23(火) 17:19:17
>>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;
}
925デフォルトの名無しさん:2007/01/23(火) 17:21:52
>>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;
}
926デフォルトの名無しさん:2007/01/23(火) 17:21:58
>>915>>921>>923
ありがとうございます
927デフォルトの名無しさん:2007/01/23(火) 17:28:36
>>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;
}
928デフォルトの名無しさん:2007/01/23(火) 17:54:15
>>853
そーだよな
でもそーいうプログラム作れという学校はどうなんだろう・・・
学校の宿題じゃないのかもしれない
929デフォルトの名無しさん:2007/01/23(火) 17:57:58
>>927
if (!fin.is_open()

としなくても

if (!fin)

だけでいいお。
930デフォルトの名無しさん:2007/01/23(火) 18:04:29
ごく一部の人による催促のレスの繰り返しにうんざりなんだけど。
次スレから催促禁止をテンプレに入れてもらいたい。
931デフォルトの名無しさん:2007/01/23(火) 18:05:58
スレの性格的にどうしようもない人らが集まるのは止むを得ないんだから、華麗にスルー汁
932デフォルトの名無しさん:2007/01/23(火) 18:06:28
>>930
たまに見逃してることもあるから、一律禁止は厳しすぎるかも
1日1回までとか。
933デフォルトの名無しさん:2007/01/23(火) 18:07:52
>>932
> 1日1回
それ十分ウザい
934デフォルトの名無しさん:2007/01/23(火) 18:08:34
催促されるほど答えたくなくなるのもまた人情
935デフォルトの名無しさん:2007/01/23(火) 18:09:37
催促と後で条件追加は二大地雷だな
936デフォルトの名無しさん:2007/01/23(火) 18:10:47
催促の代わりに、「全員分の」未完了の宿題のまとめ投稿ならOKにするというのは?
937デフォルトの名無しさん:2007/01/23(火) 18:13:18
>>936
それならアンカーだけでいいな。
938デフォルトの名無しさん:2007/01/23(火) 18:21:32
>>936
なかなかの名案だ。
未回答まとめるのは結構めんどい
939デフォルトの名無しさん:2007/01/23(火) 18:39:17
>>936
それいいな
940デフォルトの名無しさん:2007/01/23(火) 19:35:29
>>894
教官のサイトやメルアドでも教えてくれ
941 ◆0VW04NxLf2 :2007/01/23(火) 19:48:43
[1] 授業単元:Cプログラミング
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3501.txt

[3] 環境
 [3.1] OS: Mac OS X(gcc)
 [3.2] コンパイラ名とバージョン: gcc 4.0.1
 [3.3] 言語: C
[4] 期限: 2007年1月24日12:00まで
[5] その他の制限: ポインタを使う、構造体不可、文字取得はscanf()

よろしくお願いします。
942デフォルトの名無しさん:2007/01/23(火) 20:24:32
環境がMacだと東大生が質問しに来たかと思ってしまう
943デフォルトの名無しさん:2007/01/23(火) 20:26:37
東大じゃないけど糞Mac使ってる
944デフォルトの名無しさん:2007/01/23(火) 22:01:15
>>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 一カ所間違ってるよ
945821:2007/01/23(火) 22:11:59
>>821
やはり無理ですか・・・
946デフォルトの名無しさん:2007/01/23(火) 22:13:11
>>944
&つけろ と言ってやれw
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] その他の制限:特に指定されていません

よろしくお願いします
948デフォルトの名無しさん:2007/01/23(火) 22:23:21
949デフォルトの名無しさん:2007/01/23(火) 22:28:22
>>947
速攻でマルチか?
何考えてんだお前
950デフォルトの名無しさん:2007/01/23(火) 22:40:18
>>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をまだ習っていない(それ以外は使っても大丈夫なんですが)ので、それで提出するとマズイので、もうちょっと初心者っぽくお願いできないでしょうか?
952デフォルトの名無しさん
この場合、constは単純に取り除いて構わないはず。
cerrはcoutに置き換えてしまえばいい。