トップページ⇒tech
1001コメント416KB

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

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2006/11/06(月) 09:04:35
あなたが解けないC言語/C++言語の宿題を片付けもらうスレッドです。気に入らない質問やその他や発言はスルーの方向で。
【質問者へ】
回答者の便宜のため、質問の際は以下を行うことを推奨します。
・質問は【質問テンプレ】を利用してください。
・問題文は、出題されたまま全文を書いてください。
・計算問題は数式をあげ、どのような計算をするのか詳しく説明してください。
・エラーは、その詳細と発生した行を書きましょう。エラーメッセージはコピペしてください。
・後から問題に付け足しするのはやめましょう。付け足しは作業を無駄にしがちです。
・なりすましを防ぐため、トリップを使ってください。名前欄に、「#」に続けて任意の文字列を入力して
 投稿すると、その文字列を知らない他人に騙られることを防ぐことができます。
【質問テンプレ】
[1] 授業単元:
[2] 問題文(含コード&リンク):
[3] 環境
 [3.1] OS: (Windows/Linux/等々)
 [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
 [3.3] 言語: (C/C++/どちらでも可 のいずれか)
[4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか)
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)

【アップローダー==ラウンジ】(質問が長い時はココ使うと便利 回答者もコードが長ければここに)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
【C 関数検索 man on WWW】
http://www.linux.or.jp/JM/index.html

【前スレ】
C/C++の宿題を片付けます 75代目
http://pc8.2ch.net/test/read.cgi/tech/1161257941/
【過去スレ一覧】
http://makimo.to/cgi-bin/search/search.cgi?q=C%2B%2B%82%CC%8Fh%91%E8&andor=AND&sf=2&H=&view=table&D=tech&shw=2000
0075sage2006/11/07(火) 17:21:14
1] 授業単元:プログラミング
[2] 問題文 番号と名前をメンバとする構造体を作成し、3件分のデータ表示を行うプログラムを作成せよ。
番号は3桁までとし、3桁を超える場合やすでに入力済みの数字が入力された場合はエラーを表示せよ。
 [3.1] OS:unix
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限:[2006年11月9日まで]
[5] その他の制限:なし

特に番号の重複エラーの処理がよくわからないのでよろしくお願いします。
0076712006/11/07(火) 17:24:41
>>74
もちろん実行したのですが、
/* �@ */
/* �A */  
/* �B */
を変えることによって、なぜこの様な実行結果になったかを説明しないと
いけないのです。
なぜこの様な実行結果になったかが解らなくて。
0077デフォルトの名無しさん2006/11/07(火) 17:36:39
>>76
strcpy.to.strncpy.wo.google
0078デフォルトの名無しさん2006/11/07(火) 18:32:35
[1] 授業単元: 情報A
[2] 問題文(含コード&リンク): 数字を二つ入力したとき、その二つの数字の間の全ての数の和(シグマ計算)
を出力する(1と10を入力すると55、のような)プログラムをif と gotoを用いて2パターン以上作成せよ。
[3] 環境
 [3.1] OS: (Windows
 [3.2] コンパイラ名とバージョン: 初心者なもので何のことか…
 [3.3] 言語: C++
[4] 期限: ([今年11月10日まで]
[5] その他の制限:超初心者なのでなるべく単純な方法でお願いします。m(_ _ )m
0079デフォルトの名無しさん2006/11/07(火) 18:38:32
>>76
ヒント web: manpage of strcpy
0080デフォルトの名無しさん2006/11/07(火) 19:37:49
>>35
作ってはみたが、時間がかかりすぎる。
それでもいいなら、アップする
CPU600MHz → 推定12時間以上?アリエネ
枝狩りのアルゴリズム考えないとな
0081デフォルトの名無しさん2006/11/07(火) 19:38:53
>>78
#include <stdlib.h>
main(){
int s,m,n;
scanf("%d",&m);
scanf("%d",&n);
s=(m+n)*(abs(m-n)+1)/2;
printf("%d",s);
}
0082デフォルトの名無しさん2006/11/07(火) 19:42:30
>>78
1)
#define go int
#define gogo if(
#define toog )
#include<stdio.h>
go amain(){
    go gog,gg,tot=0;scanf("%d%d",&gog,&gg);
    goto to;gdg:++gog;goto to;togo:tot += gog;goto gdg;
    to:gogo gog <= gg toog goto togo;printf("%d\n",tot);
}
2)
#define go int
#define gogo if(
#define toog )
#include<stdio.h>

go og(go gg){gg/10&&og(gg/10);putchar(gg%10+48);}
go main(){
    go gog,gg,tot=0;scanf("%d%d",&gog,&gg);
    goto to;gdg:++gog;goto to;togo:tot += gog;goto gdg;
    to:gogo gog <= gg toog goto togo;
    og(tot);
}
0083812006/11/07(火) 19:49:05
#include <stdio.h> ぬけてた
0084デフォルトの名無しさん2006/11/07(火) 19:50:53
>>81 さらに条件を満たすために最後に追記しては?
if(1) goto owari;
owari:
0085デフォルトの名無しさん2006/11/07(火) 20:01:54
>>84
先生がイラつくこと間違い無しの良解答だな
0086デフォルトの名無しさん2006/11/07(火) 20:11:45
goto文を使わせるなんてどういう教育してるんだか。
最近の教科書にはどんどん使いましょうとか書いてあるのか。
0087デフォルトの名無しさん2006/11/07(火) 20:12:20
IOCCC は anderson.c が最高傑作だと思う。
0088デフォルトの名無しさん2006/11/07(火) 20:19:26
>>58
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define BUF_SIZE 1024
typedef struct tag_word_list{
char *word_data;
struct tag_word_list *next;
}word_list;
void word_add(const char *one_word, word_list **start){
word_list *wl;
for(wl=*start;wl!=NULL;wl=wl->next)
if(strcmp(one_word, wl->word_data)==0) return;
wl=malloc(sizeof(word_list));
wl->word_data=strdup(one_word);
wl->next=*start;
*start=wl;
}
int main(void){
char one_word[BUF_SIZE], dummy[BUF_SIZE];
word_list *wl=NULL;
while(!feof(stdin)){
one_word[0]='\0';
if(fscanf(stdin, "%[a-zA-Z-]", one_word)==1) word_add(one_word, &wl);
fscanf(stdin, "%[^a-zA-Z-]", dummy);
}
for(;wl!=NULL;wl=wl->next)
printf("%s\n", wl->word_data);
return 0;
}
0089デフォルトの名無しさん2006/11/07(火) 20:31:37
[2] 問題文(含コード&リンク):
以下の様なプログラムを作りなさい。
・メイン関数の引数を用いてユーザ名とパスワードの前半部分を入力する。
・scanfを用いてパスワードの後半部分の入力を要求する。
・前半部分と後半部分を連結して1つのパスワードにする。
・前もって決めたパスワードと一致するか調べ、一致する場合には「OK, ユーザ名」のメッセージを
表示し、一致しない場合はパスワードの文字数を表示する。
以下、自分で考えてみたプログラムです。
#include<stdio.h>
#include<string.h>
#define MAX 20
int main(int argc, char *argv[]) /* ユーザ名をargv[1]としてパスワードの前半をargv[2]とします。*/
{char x[MAX], y[MAX], password[MAX]=abcd;
int i, k, flag=1;
scanf("%s", x);
y[MAX] = *strcat(argv[2], x);
k = strlen(strcat(argv[2], x));
for(i=0;i<=3;i++){
flag *= (y[i] == password[i]);}
if(flag == 1)
printf("OK, %s\n", argv[1]);
else
printf("パスワードの長さ:%d", k);}
ユーザ名はVVVでパスワードの前半はabで実行しパスワードの後半はcdを入力してみたのですが、
ちゃんとなりませんでした。どこをどのように訂正すれば良いのでしょうか?
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語: C
[4] 期限: 2006年11月8日18:00まで
[5] その他の制限: C言語を始めて4ヶ月程度なのであまり上級な知識は避けて頂けると助かります。
0090デフォルトの名無しさん2006/11/07(火) 20:34:42
>>35
#include <stdio.h>
#include <time.h>
void p(int i) { printf("%d ", i); fflush(stdout); }
int proc(void)
{
int a, b, c, d, e; double x, y, z, f[200];

for (e = 1; e < 200; e++)
f[e] = (double)e * e * e * e * e;
for (e = 1; e < 200; e++)
for (p(e), d = 1; d < e; d++)
for (c = 1; c < d && (z = f[c] + f[d]) < f[e]; c++)
for (b = 1; b < c && (y = f[b] + z) < f[e]; b++) {
for (a = 1; a < b && (x = f[a] + y) < f[e]; a++)
;
if (x == f[e])
return !printf("\na=%d b=%d c=%d d=%d e=%d\n",
a, b, c, d, e);
}
return printf("not found\n");
}
int main(void)
{
clock_t t = clock();
proc();
printf("%g\n", difftime(clock(), t) / CLOCKS_PER_SEC);
return 0;
}
0091デフォルトの名無しさん2006/11/07(火) 20:39:18
パスワードはパスワード用のライブラリ関数を使うべき
0092デフォルトの名無しさん2006/11/07(火) 20:42:01
[1] 授業単元: プログラミングI(C)
[2] 問題文(含コード&リンク): 引数で受け取った全角文字列を逆順に入れ替える
int reverse(char *str)を作成せよ。
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン: VC 6.0
 [3.3] 言語: C
[4] 期限:明日まで
[5] その他の制限: インクルードはstdio.hのみでお願いします。

「C言語プログラミング」と文字列に入れたら「グンミラグロプ語言C」と出力されるようにお願いします。
0093デフォルトの名無しさん2006/11/07(火) 20:43:08
お願いします
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):ある商店でメロンを販売している。この商店では購入個数が増えると1個あたりの単価が安くなる。メロン1個の仕入価格は1000円である。またメロンの購入個数と単価の関係は以下のようになっている。
 5個未満:1個あたり2000円
10個未満:1個あたり1900円
15個未満:1個あたり1500円
20個未満:1個あたり1400円
20個以上:1個あたり1200円
客がn人買いにきたとして、格客の購入個数を入力し、それぞれの支払い価格と商店の総販売価格と総利益出力するプログラムを作成せよ。nはプログラム開始時に読み込むこと。
[3] 環境
 [3.1] OS:Windows
 [3.3] 言語:C++
[4] 期限:明日
0094デフォルトの名無しさん2006/11/07(火) 20:47:19
>>89
password[MAX]=abcd;
↓
password[MAX]="abcd";

y[MAX] = *strcat(argv[2], x);
↓
sprintf(y, "%s%s", argv[2], x);

for(i=0;i<=3;i++){
flag *= (y[i] == password[i]);}
↓
flag=(strcmp(y, password)==0);
0095デフォルトの名無しさん2006/11/07(火) 20:59:06
>>89
return忘れてるぞ
0096デフォルトの名無しさん2006/11/07(火) 20:59:26
>>92
文字コードの指定はないのか?
内部で判別するの?
シフトJIS限定?
0097デフォルトの名無しさん2006/11/07(火) 21:03:46
>>92
>引数で受け取った全角文字列を逆順に入れ替える
>〜と出力されるように

どっちだ?
むしろ出力したら駄目なんじゃないかな?かな?
0098922006/11/07(火) 21:04:37
文字コードの指定はありませんでした。
0099892006/11/07(火) 21:17:45
レスありがとうございます。
>>94
あ、「"」つけるの忘れてました。

y[MAX] = *strcat(argv[2], x);
↓
sprintf(y, "%s%s", argv[2], x);
についてですが、sprintfは、まだ習って無いです。strcatを使って出来ないですかね?
strcatにアスタリスクを付けなければ、うまくいきそうなのですが、
それだとコンパイルに通らないですし。

>>95
あ、リターンも忘れてました。
0100デフォルトの名無しさん2006/11/07(火) 21:21:46
(;´Д`)つ $man strcat
0101922006/11/07(火) 21:21:48
#include <stdio.h>
int reverse(char *str)
{
char *p, tmp;
p = str;
for( ; *p != '\0' ; p++);
for( ; p-str > 0 ; str++){
tmp = *(--p);
*p = *str;
*str = tmp;
}
return 0;
}
main(void)
{
char str[30]="abcde";
printf("reverse関数実行前\n%s\n",str);
printf("reverse関数実行後\n");
reverse(str);
printf("%s",str);
return 0;
}

1バイト文字をreverse関数で逆順に並べ替えて、main関数で出力はできたのですが、
2バイト文字だと文字化けしてしまいます。
0102デフォルトの名無しさん2006/11/07(火) 21:23:27
ここが合ってるのかわからないのですが質問させていただきます。

今逆行列を求めるプログラムを作っていて
完全陰解法とSOR法では作り終えてるんですが
行列を増やすとそれほど精度が出ない(発散してしまう)ので困っています。
他に逆行列(n元一次方程式)を解く方法はないのでしょうか?
またよいサイトなどありましたら教えてください。
0103!=942006/11/07(火) 21:24:40
>>99
> strcatにアスタリスクを付けなければ、うまくいきそうなのですが、
うん、strcatでもいけるんだな。
ただ、strcatは何を返すの?そして、*演算子は何をするもの?

char y[MAX];

と定義した変数yの型は何?配列とポインタ理解してる?
0104デフォルトの名無しさん2006/11/07(火) 21:30:18
>>92
int reverse(char *str)
{
char *p, tmp;
p = str;
for( ; *p != '\0' ; p++);
for( ; p-str > 0 ; str+=2){
tmp = *(--p,--p);
*p = *str;
*str = tmp;
tmp = *(p+1);
*(p+1) = *(str+1);
*(str+1) = tmp;
}
return 0;
}
0105922006/11/07(火) 21:39:07
みなさんありがとうございました。
2バイト文字が正常に逆順に出力されました。

宿題ではないのですが、
もしこれが1バイト文字、2バイト文字が混合されていた場合はどうすればいいのでしょうか?
0106デフォルトの名無しさん2006/11/07(火) 21:41:17
cygwin
[1] 情報演習のスキル�T
[2] 素数を求めるプログラム
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] cygwin
 [3.3] C
[4] 期限: 11月14日


お願いします。
0107デフォルトの名無しさん2006/11/07(火) 21:42:34
>>105
文字コードがわからなきゃムリ
0108デフォルトの名無しさん2006/11/07(火) 21:44:44
>>105
1) 固定長のwchar_tに変換して処理→単一の処理、変換の必要あり
2) 文字種(1バイト文字か2バイト文字か)を判別して処理→エンコードごとに処理が別、変換の必要なし
0109デフォルトの名無しさん2006/11/07(火) 21:45:48
文字コードの種類によって判別法は違う。
UNICODEは全部2バイトだから判別する必要なし
JISはエスケープシーケンスの切り替えを検出
シフトJISは2バイト文字の1バイト目かどうか調べる
EUCは最上位ビットを検査
0110デフォルトの名無しさん2006/11/07(火) 21:51:27
cygwin ってコンパイラなん
0111デフォルトの名無しさん2006/11/07(火) 21:53:32
>>106
#include <stdio.h>
int main()
{
char s[8]
puts("素数を入力してください");
gets(s);
return 0;
}
0112再帰式2006/11/07(火) 21:56:05
[1] 授業単元:非線形方程式の解(反復法)
[2] 問題文(含コード&リンク):x^3-2x+5=0の近似解を反復法により計算せよ。
  参考URL(反復法):http://ja.wikipedia.org/wiki/%E5%8F%8D%E5%BE%A9%E6%B3%95_(%E6%95%B0%E5%80%A4%E8%A8%88%E7%AE%97)
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:不明
 [3.3] 言語:C
[4] 期限:明日の午前中までにお願いいたします

�@
#include <stdio.h>
#include <math.h>
#define g(x) (pow(x, 3)+2*x-5)/(2*pow(x, 2))
int main(void)
{ double e,f,x,x1;

e=pow(10,-7.0);
f=fabs(x1-x);
x1=1000;

while(f > e)
{ f=fabs(x1-x);
x=x1;
x1=g(x);
}

printf("解は%1.16lf\n",x1);
return 0;
}

0113再帰式2006/11/07(火) 21:57:49
�A
#include <stdio.h>
#include <math.h>
int main(void)
{
double e,f,x,x1,Xn;

e=pow(10,-7.0);
f=fabs(x1-x);
x1=1000;

while(f > e)
{
Xn=(pow(x, 3)+2*x-5)/(2*pow(x, 2));
f=fabs(x1-x);
x=x1;
x1=Xn;
}

printf("解は%1.16lf\n",x1);
return 0;
}

�@と�Aの違いはどこなのでしょうか?
できれば�Aで実行して成功させたいのですが、どこがおかしいのか分かりません。
アドバイスお願いいたします。
0114デフォルトの名無しさん2006/11/07(火) 21:59:52
>>105 winXPなんだしS-JIS決め打ちで。
/*
  pが指すマルチバイト文字の長さを返す
  このへんはmbrlenとか使ったほうがいい気もするけど
  stdio.hしか使うなという条件を守るために使わない
*/
size_t mblen(const char*p){
    /* S-JIS決め打ち */
    return (*p&0x80) ? 2 : 1;
}
/*
 指定したメモリブロックをreverseする
*/
void memrev(char*str,size_t n){
    char*p = str+n;
    if(str == p)return;/*C言語のポインタの有効範囲の仕様を守るため*/
    for(;str < --p;++str){
        char c=*str;*str=*p;*p=c;
    }
}
/*
 マルチバイト文字を考慮したreverse
*/
void reverse(char*str){
    int len = 0;
    while(str[len]){
        int c = mblen(str+len);
        memrev(str+len,c);
        len+=c;
    }
    memrev(str,len);
}
0115デフォルトの名無しさん2006/11/07(火) 22:00:52
>>106
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int *sieve_of_eratosthenes(int upper) {
    int i, notprime, *integers = (int*)malloc(sizeof(int) * (upper + 1));
    for (i = 2; i <= upper; i++) integers[i] = 1;
    integers[0] = integers[1] = 0;
    for (i = 2; i <= upper / 2; i++) {
        notprime = i;
        while ((notprime += i) <= upper) integers[notprime] = 0;
    }
    return integers;
}
int is_prime(int n) {
    int *sieve = sieve_of_eratosthenes(n), ret = sieve[n];
    free(sieve);
    return ret;
}
int main(void) {
    int upper_num, *sieve, i;
    printf("MAX?:");
    scanf("%d", &upper_num);
    sieve = sieve_of_eratosthenes(upper_num);
    for (i = 2; i <= upper_num; i++)
        if (sieve[i]) printf("%4d", i);
    free(sieve);
}
0116デフォルトの名無しさん2006/11/07(火) 22:07:10
[1] 授業単元:
[2] 問題文(含コード&リンク):第1因数に含まれる第2因数と第3因数の間にある文字列を返す関数を作る(因数はすべて文字列)
[3] 環境
 [3.1] Linux
 [3.2] gcc 3.4
 [3.3] C
[4] 期限: 11/9
[5] その他の制限:特になし

0117デフォルトの名無しさん2006/11/07(火) 22:07:52
>>115
    for (i = 2; i <= upper / 2; i++) {
+        if (!integers[i]) continue;
        notprime = i;

これがないと篩になってないかと。
0118デフォルトの名無しさん2006/11/07(火) 22:10:47
>>115
なんで表示してるの?
0119922006/11/07(火) 22:16:58
みなさんいろいろありがとうございました。
0120デフォルトの名無しさん2006/11/07(火) 22:20:01
>>93
#include<stdio.h>
int get_price(int number){
if(number<5) return 2000;
if(number<10) return 1900;
if(number<15) return 1500;
if(number<20) return 1400;
return 1200;
}
int main(void){
int i, n, m;
int total_price=0, total_profit=0;

printf("客の人数を入力してください ");
scanf("%d", &n);
for(i=0;i<n;i++){
printf("購入個数を入力してください ");
scanf("%d", &m);
total_price+=m*get_price(m);
total_profit+=m*(get_price(m)-1000);
printf("\n支払い価格 %d 円\n", m*get_price(m));
}
printf("\n総販売価格 %d 円\n総利益 %d 円\n", total_price, total_profit);
return 0;
}
0121デフォルトの名無しさん2006/11/07(火) 22:28:41
>>108-109
堅苦しいことを言えば、そもそもwchar_tはUnicodeと決まっているわけではないし、
文字集合がUnicodeでも、符号化にUTF-8やUTF-16を使っていれば、固定長とは限らないわけで。
0122デフォルトの名無しさん2006/11/07(火) 22:59:42
>>116
これはシンタックスエラーな問題文ですね
0123デフォルトの名無しさん2006/11/07(火) 22:59:58
>>99
y[0]='\0';
strcat(y, argv[2]);
strcat(y, x);
または
strcpy(y, argv[2]);
strcat(y, x);
0124デフォルトの名無しさん2006/11/07(火) 23:00:43
>>116
s/因数/引数/g
でいいのかな?
0125デフォルトの名無しさん2006/11/07(火) 23:05:19
>>124
というより、いろんな意味に取れるのが問題かと…

>>116 のやりたい事は何となく分かるんだけどね
コマンド
./a.out futongafuttonda uton utton
実行結果
gaf
ってところか
0126デフォルトの名無しさん2006/11/07(火) 23:09:09
>>125
>関数を作る
main も関数には違いないけど、多分題意とは違うとおもふ。
0127802006/11/07(火) 23:30:05
>>90
めちゃはえー。こんなにも差がでるのか orz
0128デフォルトの名無しさん2006/11/07(火) 23:53:22
>>127
事前に200までの5乗を計算するだけでも現実的時間で終わるよ
0129デフォルトの名無しさん2006/11/07(火) 23:55:10
for文の重なりが把握できるのは3つまでな俺
0130デフォルトの名無しさん2006/11/07(火) 23:58:44
>>128
計算するアルゴリズムはほとんど一緒なんだが、
多倍長整数の計算が遅くて><

double で計算するなんて思いつきもしなかった…
0131デフォルトの名無しさん2006/11/08(水) 00:06:24
さすがFPUはんやで
0132デフォルトの名無しさん2006/11/08(水) 00:09:37
>>130
long long使ってもいいんじゃない?
>>35はVC++6.0だからわからんけど、最近のなら対応してる
0133OS2006/11/08(水) 00:16:50
[1] 授業単元: オペレーティングシステム
[2] 問題文(含コード&リンク):
第4回課題 セルオートマトンの動作推移を表現する。
・渋滞の様子をC++を使って表現する。
・空白セルと塗りつぶしセルの二つを用意し、塗りつぶしセルは、前が空白セルの場合は、進むことが出来るが、塗りつぶしセルの場合は、進むことが出来ない。(進行方向は左。)
・時間経過と共に、どのような推移をするのかを示す。(塗りつぶしセルがなくなった時点で終了。)
・結果表示は、別ウィンドウが望ましいが、コマンドライン上で構わない。
以下に、例を示す。

問題 □□■□■□が与えられるとする。
t=1 □■□■□□
t=2 ■□■□□□
t=3 □■□□□□
t=4 ■□□□□□
終了

[3] 環境
 [3.1] OS: windows
 [3.2] コンパイラ名とバージョン: VC6.0
 [3.3] 言語: C、C++ (出来ればC++が望ましい。)
[4] 期限: 2006年11月8日 23:59まで(出来れば23時まで。)
[5] その他の制限: 特になし
0134OS2006/11/08(水) 00:18:38
宜しくお願いします。
0135 ◆rqrMes8uog 2006/11/08(水) 00:50:42
[1] 授業単元: C++プログラミング
[2] 問題文(含コード&リンク):
最初にあなたは 1 から 99 までの範囲で数を一つ頭に思い浮かべます.
推測値を提示し,その推測が当たっているかどうか,
当たっていなければより大きいか小さいかを繰り返し質問して,
あなたからの答に基づいて推測値を改善し,
最終的にあなたが思い浮かべた数を言い当てるプログラムを作成しなさい.

[3] 環境
 [3.1] OS:WindowsXP
 [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
 [3.3] 言語:C++
[4] 期限: 2006年11月8日(水)23:59まで
[5] その他の制限:
・質問への答え方では,「当たりなら0,もっと小さければ1,
  もっと大きければ2を入力してください」といったルールを示す。
 ・質問に対する想定外の答え方には警告を出す
 ・正しい数を当てるまでにかかった回数を数えて,その回数に応じたメッセージを出す.
 ・コンピューターからの最初の質問は「50ですか?もっと大きい?小さい?」とする。

以上です。C++を始めたばかりです。
>>133と期限がかぶってしまいまして、すいません。
どうか宜しくお願いします!
0136デフォルトの名無しさん2006/11/08(水) 01:10:29
>>132
VC6なら型名は__int64、printfの変換指定子は%I64dね。
0137デフォルトの名無しさん2006/11/08(水) 01:41:55
>>133
すまん、俺自身セルオートマトンをいまいち理解してないのだが、
これって塗りつぶしセルが時間に従って左側に移動しているだけであって、
空白セル云々は関係ないように見えるんだが(例を見る限り)
0138デフォルトの名無しさん2006/11/08(水) 01:43:16
>>135
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2898.cpp
0139デフォルトの名無しさん2006/11/08(水) 02:09:29
>>133
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2899.txt
0140デフォルトの名無しさん2006/11/08(水) 02:32:07
>>82
鬼才だなwワロタww
0141デフォルトの名無しさん2006/11/08(水) 02:53:58
>>86はgotoは絶対に使ってはいけないと信じている雑魚プログラマ
0142デフォルトの名無しさん2006/11/08(水) 02:59:18
>>117
確かに。マイテンプレを修正しておく。
0143デフォルトの名無しさん2006/11/08(水) 02:59:50
>>75
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2900.c
0144デフォルトの名無しさん2006/11/08(水) 03:00:01
Cの文法にgotoがある限り使われても文句は言えんだろが
0145デフォルトの名無しさん2006/11/08(水) 03:06:06
俺は極力使わないが多重ループを抜けるための一手段ではあるな

そもそも機能を覚えさせようとしてるだけであって
推奨してるわけではないだろう

goto文の是非にあたってはここで議論すべきないようではないし
0146 ◆rqrMes8uog 2006/11/08(水) 03:24:13
ありがとうございました。かなり助かりました。
0147OS2006/11/08(水) 04:49:05
>>133
おそらく、発展問題として、今後
□□■
は
□■□
となるが、
■□■
は
■■□
となる左側で止めてしまう場合があるのです。

この問題は、渋滞の研究に使うものなので、□は、動ける場所、■は、渋滞していて動けない場所というものです。
0148OS2006/11/08(水) 05:01:07
ですが、取りあえずは、セルが左側に移動するものを第一段階として作りたかったので、宜しく御願いします。

発展問題に、左側で止めた場合、n秒後に、止めが解除されるとしてプログラムを作れというものもあります。
nは、コマンドラインから入力。(入力方式は問わない。)

(例)
t=1 ■□■
t=2 ■■□
t=3 ■■□
t=4 ■■□
t=5 ■□□

この場合、n=2と指定します。■■□の状態で、2秒、膠着状態が続いてますので。

今、この場合のプログラムも考えてますが、どうも徹夜気味です。宜しくお願いします。
0149デフォルトの名無しさん2006/11/08(水) 11:51:13
[1]計算機プログラミング
[2]
● 2つの自然数を入力して、その間にある素数を表
示するプログラムを作成しましょう。
■ プロジェクト名:07prime ファイル名:07prime.c
■ 入力:整数(自然数)を2つ
■ 大小関係が逆でも対応できるようにすること。
■ 処理:2つの自然数の間で素数の場合、その数を表示
する
■ 素数:1と自分自身以外は割り切れない数
■ 出力:素数の値
■ 自分の学籍番号下4桁と下4桁+100で試してみよう
■ ソースコードを印刷し、自分の学籍番号下4桁と下4桁
+100の結果を記入して、提出しましょう
[3]WindowsXP
[4]11月13日
01501152006/11/08(水) 12:12:35
isprimeは不要だった。

>>149
#include <stdio.h>
int main(void) {
    int i, j, min, max, temp;
    scanf("%d%d", &min, &max);
    if (min > max) {
        temp = min;
        min = max;
        max = temp;
    }
    for (i = min; i <= max; i++) {
        for (j = 2; j <= i; j++) if (i % j == 0) break;
        if (i == j) printf("%5d", i);
    }
    return 0;
}
0151デフォルトの名無しさん2006/11/08(水) 12:17:43
>>47 誰か教えてくれないでしょうか??(>>49に変更点が書いてあります。)
0152デフォルトの名無しさん2006/11/08(水) 12:33:05
>>151
画面表示までやるのか、表示はgnuplotに任せちゃっていいのか
0153デフォルトの名無しさん2006/11/08(水) 13:19:40
>>151
>>69

69は0.02になってるけどな
表示くらい自分でできるだろ
0154デフォルトの名無しさん2006/11/08(水) 15:30:08
[1] 授業単元: プログラミングC
[2] 問題文(含コード&リンク): 名前と5教科の点数(国語、数学、社会、理科、英語)と
基準点を入力して、基準点以上の該当科目と点数を表示する関数
void search(int *mark,int std)を作成せよ。
mark:点数配列 std:基準点
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:VC6.0
 [3.3] 言語: C
[4] 期限: 決まってないです。
[5] その他の制限: 現在、配列とポインタのところをやっています。

よろしくお願いします。
0155デフォルトの名無しさん2006/11/08(水) 15:39:02
その仕様通りに作るとおかしなことになるけど
それで間違いないの?
01561542006/11/08(水) 16:00:35
〔名前「テストユーザー」
国語の点数:「40」
数学の点数:「50」
社会の点数:「60」
理科の点数:「70」
英語の点数:「80」
基準点:「60」
テストユーザーさんの60点以上の科目は〕
(社会の点数:60
理科の点数:70
英語の点数:80)

〔〕の処理をmain関数で、
「」をscanfでキーボードから入力し
()の部分をsearch関数内でやるのだと思うのですが
0157デフォルトの名無しさん2006/11/08(水) 16:13:17
[1] 授業単元:コンピュータプログラミングおよび演習
[2] 問題文(含コード&リンク):
   1、自然数n を一つ読み込み、n が2 でも3 でも割り切れない場合は「!」を、
   そうでない場合は「@」を画面に書き出すプログラムを作成せよ。
   2、自然数n を一つ読み込み、それに続いて画面に2, 4, 6, ... 2n を(都合n 個)
   画面に書き出すプログラムを作成せよ。
   3、自然数n を一つ読み込み、それを2 で何回割ると0 になるかを数え、その回
   数を画面に書き出すプログラムを作成せよ。なお、割り算において割り切れ
   ない場合は結果を切り捨てて整数にするものとする。
[3] 環境
 [3.1] OS:WindowsXP
 [3.2] コンパイラ名とバージョン: (不明)
 [3.3] 言語: (C++)
[4] 期限: 明日の正午までには…

お願いいたします。授業内容が早すぎてまともにできません…
0158デフォルトの名無しさん2006/11/08(水) 16:16:11
こんなうんこみたいな課題が出てるのに
授業が早いなんて信じられない
0159デフォルトの名無しさん2006/11/08(水) 16:20:24
>>157
void func1(int n)
{
printf("%c\n",(n%2 != 0 && n%3 != 0) ? '!' : '@');
}

void func2(int n)
{
int i;
for(i = 2; i<=2*n; i*=2)
printf("%d,",i);
}

void func3(int n)
{
int c=0;
while((n>>c) != 0)c++;
printf("%d回\n",c);
}
0160デフォルトの名無しさん2006/11/08(水) 16:31:23
>>148
言いたいことは大体分かるんだが、どうにも例が怪しい。
t=4とt=5の間の遷移はおかしくないか?
そもそも147-148は誰に向けて言ってるの?
0161デフォルトの名無しさん2006/11/08(水) 16:33:48
>>154
#include <stdio.h>
#include <stdlib.h>
char subject[6][7] = {"国語","数学","社会","理科", "英語","基準点"};
void search(int *mark,int std)
{
int i;
for(i=0; i<5; i++)
if(mark[i] >= std)
printf("%sの点数:%d\n",subject[i],mark[i]);
}
int main(int argc, char *argv[])
{
int mark[6];
int i;
char name[64];
printf("名前:");
scanf("%s",name);
for(i=0; i<6; i++)
{
printf("%sの点数:",subject[i]);
scanf("%d",&mark[i]);
}
printf("%sさんの%d点以上の科目は\n",name,mark[5]);
search(mark, mark[5]);
return 0;
}
0162デフォルトの名無しさん2006/11/08(水) 16:37:34
>>157
訂正
void func2(int n)
{
int i;
for(i = 2; i<=2*n; i+=2)
printf("%d,",i);
}
0163デフォルトの名無しさん2006/11/08(水) 16:47:47
>>154
こんなんどうだべ?環境依存だけんども。
#include <stdio.h>
#define 科目数 5
char* kamoku[科目数] = {"国語", "数学", "社会", "理科", "英語"};
void search(int* mark, int std)
{
int i;
char* name = (char*) mark[5];
printf("名前 : %s\n", name);
for(i=0; i!=科目数; i++)
if(mark[i] >= std)
printf("%s : %d点\n", kamoku[i], mark[i]);
}
int main(void){
int i;
int mark[科目数+1];
char name[] = "与太郎";
for(i=0; i!=科目数; i++){
printf("%s 点数>", kamoku[i]); scanf("%d", &mark[i]);
}
mark[5] = (int) name;
search(mark, 50);
return 0;
}
0164デフォルトの名無しさん2006/11/08(水) 16:54:34
これはひどい
0165デフォルトの名無しさん2006/11/08(水) 16:56:26
チーズフォンデュ吹いた
0166デフォルトの名無しさん2006/11/08(水) 17:08:07
気持ち悪い、キモイじゃなくて気持ち悪い
0167デフォルトの名無しさん2006/11/08(水) 17:11:57
変数名にローマ字を使う人っていまだにいるんだなぁ
0168デフォルトの名無しさん2006/11/08(水) 17:13:28
>>167
業務プログラムを作ってごらん
ローマ字だらけのプログラムになるから
0169デフォルトの名無しさん2006/11/08(水) 17:25:16
俺もダメな奴に教えるときは
kaisuu
とか使うなあ
0170デフォルトの名無しさん2006/11/08(水) 17:32:35
普通、格好良さより読みやすさ重視だべさ。
VC++6.0で通るかは知らんが、こうしたっていいくらいだべ。

#define 科目数 5
#define 末尾 科目数
char* 科目名[科目数] = {"国語", "数学", "社会", "理科", "英語"};
void search(int* mark, int std)
{
int カウンタ;
char* 名前 = (char*) mark[末尾];
printf("名前 : %s\n", 名前);
for(カウンタ=0; カウンタ!=科目数; ++カウンタ)
if(mark[カウンタ] >= std)
printf("%s : %d点\n", 科目名[カウンタ], mark[カウンタ]);
}
01711542006/11/08(水) 17:32:55
ありがとうございました。
おかげさまで完成できました。
>>163さんのは勉強に使わせていただきました。
0172デフォルトの名無しさん2006/11/08(水) 17:39:29
[1] 授業単元:プログラム演習
[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2902.txt
[3] 環境
 [3.1] OS:Windows XP
 [3.2] コンパイラ名とバージョン:VC
 [3.3] 言語: C
[4] 期限:10日まで
[5] その他の制限:
0173デフォルトの名無しさん2006/11/08(水) 17:50:21
[1] 授業単元:画像処理演習
[2] 問題文(含コード&リンク):
jpg画像をファイルから読み込み、それを拡大縮小できるようにし、拡大(または縮小)した画像をjpgで保存するプログラムを作成せよ。
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語: C
[4] 期限:2006/11/13
[5] その他の制限:


よろしくお願いします
0174デフォルトの名無しさん2006/11/08(水) 18:49:09
>>173
それは自分でデコードするのか?
それともlibjpegとか使っていいの?
■ このスレッドは過去ログ倉庫に格納されています