C/C++の宿題を片付けます 76代目
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2006/11/06(月) 09:04:35【質問者へ】
回答者の便宜のため、質問の際は以下を行うことを推奨します。
・質問は【質問テンプレ】を利用してください。
・問題文は、出題されたまま全文を書いてください。
・計算問題は数式をあげ、どのような計算をするのか詳しく説明してください。
・エラーは、その詳細と発生した行を書きましょう。エラーメッセージはコピペしてください。
・後から問題に付け足しするのはやめましょう。付け足しは作業を無駄にしがちです。
・なりすましを防ぐため、トリップを使ってください。名前欄に、「#」に続けて任意の文字列を入力して
投稿すると、その文字列を知らない他人に騙られることを防ぐことができます。
【質問テンプレ】
[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
0449デフォルトの名無しさん
2006/11/13(月) 04:34:46[3.1] Windows
[3.2] Borland C++ 5.5.1 for Win32
[3.3] C
[4] 明後日
char Q(char "
void f(doubl *, 〜〜);
と定義された関数に
double a[4][5];
を
f(a, 〜);
と渡したが「問題のあるポインタの変換」と出るので
f(*a, 〜);
と渡したところ正常に動作。
配列の場合"a"はa[0][0]のアドレスを渡せるのでは…?
*aではa[0][0]の中身を渡してしまいそうなのに何故正常に動くのでしょうか…。
")
0450デフォルトの名無しさん
2006/11/13(月) 04:54:19double (*a)[5] としないとだめだろう?
0451デフォルトの名無しさん
2006/11/13(月) 05:03:48ポインタの深さが違うからエラーがでたんだよー。
0452デフォルトの名無しさん
2006/11/13(月) 05:09:58それに変えてみたらWinXPがエラー吐いて止まった件
0453デフォルトの名無しさん
2006/11/13(月) 05:20:00お前もう一回よく調べてみ。いい加減な事を書くなカス。
0454デフォルトの名無しさん
2006/11/13(月) 05:34:00そういわれても…。
double a[4][5];
を
double (*a)[5];
としたけれどaにscanfから数値を入れると強制終了する…。
0455デフォルトの名無しさん
2006/11/13(月) 05:50:06だからscanf()周りを調べろって。自分の思い込みだけで書くな。
0456デフォルトの名無しさん
2006/11/13(月) 05:53:080457デフォルトの名無しさん
2006/11/13(月) 05:55:27こう書いてあるけど…。
他に何かミスってる可能性ある…?
0458デフォルトの名無しさん
2006/11/13(月) 07:06:110459デフォルトの名無しさん
2006/11/13(月) 08:32:17おいおい、そんな驚き方したら(w
自 分 が エ ス パ ー じ ゃ な い っ て バ レ て し ま う だ ろ ?
0460デフォルトの名無しさん
2006/11/13(月) 09:43:19呼び出された関数側では二次元配列の大きさを知ることはできない。
明示的に示すには、関数の最初を変更しないといけない。
void f(double *, 〜〜);
↓
void f(double [][5], 〜〜);
0461デフォルトの名無しさん
2006/11/13(月) 11:17:14[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):x と y の数値の対を読み込むことを繰り返し、
それぞれの和を出力するプログラムを作れ。ただし,和の計算部分には、
2数の和を計算する関数を作って、それを呼び出すこと。
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン: gcc 3.4
[3.3] 言語: C
[4] 期限: 2006年11月14日
0462デフォルトの名無しさん
2006/11/13(月) 11:37:28#include <stdio.h>
double mysum(double x, double y){
return x+y;
}
main(){
double x, y;
while(1){
scanf("%lf",&x);
scanf("%lf",&y);
printf("%f",sum(x,y));
}
}
0463デフォルトの名無しさん
2006/11/13(月) 11:39:21printf("%f",mysum(x,y));
0464デフォルトの名無しさん
2006/11/13(月) 12:09:09それを使うことが前提なら次は最初から書いてね。ちなみにtolower()は、小文字にできるものは
その小文字を、その他の文字はそのままを返す関数(マクロの可能性もある)で、ctype.hに宣言
されている。
#include <stdio.h>
#include <ctype.h>
void str_lcopy(char dst[], char src[]) {
char *d = dst, *s = src;
while (*s != '\0') {
if (*s >= 'A' && *s <= 'Z') {
*d++ = *s++ - ('A'-'a');
} else {
*d++ = *s++;
}
}
*d = '\0';
}
int main (void) {
char src[128], dst[128];
printf("文字列を入力して下さい >> ");
gets(src);
str_lcopy(dst, src);
printf("src: %s\n", src);
printf("dst: %s\n", dst);
return 0;
}
0465デフォルトの名無しさん
2006/11/13(月) 13:35:23yasashii na...
0466デフォルトの名無しさん
2006/11/13(月) 14:05:08[2] 問題文:
配列に格納されたデータをソートするプログラムを作成するにあたり、
以下の機能を持つ関数を作成しなさい。
・乱数を生成し配列要素に格納する
init_array(int *pa, int n)
・配列要素を1行で画面に出力する
output_array(int *pa, int n)
・指定された2つアドレスのデータを交換する
swap(int *x, int *y)
[3.1] OS: windws xp [3.2] visual studio 2003 [3.3] 言語: C
[4] 期限: 11月16日
[5] その他の制限: 反復構造、ソート、探索、ポインタ、ファイル、構造体
よろしくお願いします。
0467デフォルトの名無しさん
2006/11/13(月) 14:05:18#include <math.h>
main(){
double x,y;
scanf("%d",&x);
y=log(x)/log(2);
printf("%f",y);
}
というプログラムにすると
/tmp/ccIE035m.o(.text+0x2e): In function `main':
: undefined reference to `log'
/tmp/ccIE035m.o(.text+0x48): In function `main':
: undefined reference to `log'
collect2: ld はステータス 1 で終了しました
というエラーがでます。何が間違っているんでしょうか?
0468デフォルトの名無しさん
2006/11/13(月) 14:19:07数学関数ライブラリがリンクされていない。
たぶんgccに-lmを渡せば良い。
0469デフォルトの名無しさん
2006/11/13(月) 14:20:35後scanfを
scanf("%lf",&x);
にしておいて
0470デフォルトの名無しさん
2006/11/13(月) 14:28:21[1] 授業単元:情報処理�U
[2] 問題文(含コード&リンク):2を底とするlogを計算するプログラムを作成しなさい。
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C
[4] 期限:2006年11月10日まで
[5] その他の制限:なし
お願いします。
なんで今ごろバグ取りしてるんだぜ?
0471デフォルトの名無しさん
2006/11/13(月) 16:20:13#include <stdio.h>
#include <stdlib.h>
void init_array(int* pa, int n){
for(; n!=0; n--)
pa[n-1] = rand();
}
void output_array(int* pa, int n){
for(; n!=0; n--)
printf("%d ", *pa++);
}
void swap(int* x, int* y){
_asm{
mov ecx, x
mov edx, y
xchg eax, [ecx]
xchg eax, [edx]
xchg eax, [ecx]
}
}
0472デフォルトの名無しさん
2006/11/13(月) 18:30:52ヒント: maxmin
0473デフォルトの名無しさん
2006/11/13(月) 18:38:480474デフォルトの名無しさん
2006/11/13(月) 18:57:28…
0475デフォルトの名無しさん
2006/11/13(月) 19:02:17Minimaxでは?
0476デフォルトの名無しさん
2006/11/13(月) 19:05:01#include<stdio.h>
#include<stdlib.h>
int main(void){
char buf[256];
long number=0L;
int i;
scanf("%s", buf);
for(i=0;buf[i]!='\0';i++){
if(buf[i]!='0' && buf[i]!='1'){
fprintf(stderr, "%s not binary.\n", buf);
exit(1);
}
number=(number<<1)|(buf[i]=='1');
}
printf("%ld\n", number);
return 0;
}
0477デフォルトの名無しさん
2006/11/13(月) 19:08:040478392
2006/11/13(月) 19:22:590479デフォルトの名無しさん
2006/11/13(月) 19:32:35if(turn == CIRCLE && human == CIRCLE || turn == CROSS && human == CROSS)
0480デフォルトの名無しさん
2006/11/13(月) 19:45:470481デフォルトの名無しさん
2006/11/13(月) 20:09:07ありがとうございます、whileは思いつきませんでした。
0482デフォルトの名無しさん
2006/11/13(月) 20:21:14[2] 問題文(含コード&リンク):
C言語のプログラムにより、端末の画面をうまく利用した
ゲーム等を2週間の間にグループ(3人または2人)で考案すること。
[3] 環境
[3.1] OS: UNIX
[3.2] コンパイラ名とバージョン: cc
[3.3] 言語: C
[4] 期限:11月15まで
[5] その他の制限: VT100制御コードというのを使って画面消去やカーソル移動をさせないといけないらしいです。
3年間プログラミングを習いましたが、基礎的なことしか分かりませんorz
それなのにいきなりの大きな課題・・まったく手がつかず放置状態です
作りたいゲームがいろんなチームとかぶっているので、私のチームは一人神経衰弱を作ることになったんですが、
私がまかせられっきりで班員が手伝おうとしてくれません(というか、唯一普通にプログラミングができるのが私だけみたいです。汗)
乱数を発生させて(?)毎回遊べるようにしたいのですが。。
どうか一番簡単なプログラムでいいので考えてもらえると助かります(TT)色々な課題と重なっていてかなりせっぱつまってます・・
0483デフォルトの名無しさん
2006/11/13(月) 20:26:30エスケープシーケンスのことでいいのかな?
void clear_screen(void){
printf("\x1b[2J"); // 画面を消去する
}
void locate(int x, int y){
printf("\x1b[%d;%dH", y+1, x+1); // 現在のカーソル位置を変更する
}
0484デフォルトの名無しさん
2006/11/13(月) 20:29:05一人で延々とめくるのか?それともコンピュータと対戦?
0485デフォルトの名無しさん
2006/11/13(月) 20:30:12乱数を使う方法かぁ・・・srand()とtime()あたり。
班員が動いてくれないのをどーにかする方法は、あんたが動かなければいい。
0486482
2006/11/13(月) 20:33:45ごめんなさい、1週間前から色々なプログラム見たり、前を振り返ったり先輩に聞いたりしたのですが
どうしても1から作ることができなくてorz
0487482
2006/11/13(月) 20:36:27【参考資料】
●VT100制御コード カーソル移動 画面消去
** vt100.c **
#include <stdio.h>
main()
{
int x,y;
char moji[10];
x=1; y=3;
printf("\033[2J");
printf("\033[9;30HK");
printf("\033[9;31Ha");
printf("\033[9;32Hz");
printf("\033[9;33Hu");
printf("\033[11;30H%1d",x+3);
printf("\033[11;31H%1d",y+5);
printf("\033[13;30H?? ");
printf("%c\n",getchar());
}
0488デフォルトの名無しさん
2006/11/13(月) 20:40:11long number=OL;
number=(number<<1)|buf[i]=='1');
の意味が分かりません。
0489デフォルトの名無しさん
2006/11/13(月) 20:43:18ジャンケンでいいじゃん
0490デフォルトの名無しさん
2006/11/13(月) 20:47:083年間プログラミングを習って、普通にプログラミングができるなら余裕だろ。
int cards[4][13]; // トランプなら1〜13?
int state[4][13]; // 表か裏か
for(i=0;i<4;i+=2) {
for(j=0;j<13;j++) {
cards[i][j] = cards[i+1][j] = rand()%13;
state[i][j] = state[i+1][j] = 0; // 裏
}
}
// カードをシャッフル
int cnt = 0;
while(1) {
int f = 1;
// 表示
while(f) {
// cnt++;
// 入力(1枚目)
// 表にする
// 表示
// 入力(2枚目)
// 表にする
if(同じカードじゃなかったら) {
2枚のカードを裏返す
f = 0;
}
}
if(カードが全部表になったら) break;
}
途中で力尽きた
0491デフォルトの名無しさん
2006/11/13(月) 20:51:28まー・・・マイコンBASICマガジンのバックナンバーでも読んで、移植に励んでくれ。
80年代のなら、短いのもあるだろう。
0492デフォルトの名無しさん
2006/11/13(月) 20:58:21とりあえず「文字を正確に読む」という能力を身に付ければいいんじゃないかな
0493デフォルトの名無しさん
2006/11/13(月) 21:00:51>>482
一応やってみるが、途中で投げ出すかも知れんので保険を用意しておいてくれ。
0494482
2006/11/13(月) 21:04:11すっごい助かります><
まだ、期限延ばしてもらえるかもしれないので大丈夫です!
0495デフォルトの名無しさん
2006/11/13(月) 21:10:09>long number=OL;
よく読め
>number=(number<<1)|buf[i]=='1');
number=(number<<1)|(buf[i]=='1');
だよく読め
分からないならnumber=number*2+(buf[i]=='1');
0496デフォルトの名無しさん
2006/11/13(月) 21:30:38出来そうなのは解いてみる。
0497デフォルトの名無しさん
2006/11/13(月) 21:45:53http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2932.c
1.カードの初期化
2.カードの表示
まで
0498デフォルトの名無しさん
2006/11/13(月) 23:58:02[2] 問題文(含コード&リンク):
トランプを切る方法の一つとして、トランプを2つに分けて両手でばらばらと切る方法がある。
今、トランプは、ジョーカを除いた52枚とする。もし、切り方のうまい人がいて、
トランプを正しく半分(26枚)にして、かつ交互に1枚ずつ切れるとする。
この方法では、何回か行うと元に戻ることが知られている。さて、何回で元に戻るであろうか。
これを計算するプログラムを作成せよ。
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン: visual stdio 2005
[3.3] 言語:C++
[4] 期限:2006年11月20日まで
[5] その他の制限:プログラムの説明もお願いします。
長くてごめんなさい
0499デフォルトの名無しさん
2006/11/14(火) 00:02:01次のプログラムを参考にせよ。
#include<stdio.h>
#define N 52 /* トランプの枚数 */
#define M (N/2) /* その半分の数 */
int main( void )
{
int k;
int cards[ N ]; /* トランプ */
int temp[ N ]; /* 一時的にトランプの札を移動 */
int count = 0; /* 切った回数 */
/* トランプをセット */
for( k=0; k<N; k++ )
cards[ k ] = k+1;
while( 1 ) /* 無限ループ */
{
count++; /* 回数を一回増分 */
temp ← cardsを2つに分けてぱらぱらと切ったものをひとつにしたもの
temp が元に戻っていたら終了(breakする)
cards ← temp
}
printf( "%d 回目で元に戻る", count );
return 0;
}
0500デフォルトの名無しさん
2006/11/14(火) 00:03:12↓↓tempが元に戻っていることの判定法↓↓
https://weblec.kanagawa-u.ac.jp/weblec6/Web/HTML/Th_49/Resume/File_215.ppt
↓↓cardsを2つに分けてぱらぱらと切ったものをひとつにしたもの↓↓
j = 0;
for( i=0; i<M; i++ )
{
temp[ j ] = cards[ i ];
temp[ j ] = cards[ M + i ];
j += 2;
}
0501デフォルトの名無しさん
2006/11/14(火) 03:02:05[2] 問題文(含コード&リンク):
10等分法のアルゴリズムを作成し、x^3-10=0の解を求めるプログラムを作成せよ
なお、許容誤差を10^-7 とし、区間幅が10^-7 を下回ったところで計算を打ち切ること
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: 不明
[3.3] 言語: C
[4] 期限: 2006年11月15日午前中まで
[5] その他の制限: while文を使っての作成お願いします
0502482
2006/11/14(火) 05:24:27あぁ、ありがとうございます!
よければ続きもお願いします・・;;
0503デフォルトの名無しさん
2006/11/14(火) 06:52:50http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2933.c
あまりに操作しにくいので、# define USE_TERMIOSのコメントアウトを外すと、
非標準のライブラリを使っていちいちエンターキーで確定せずに使えるようにした。
0504デフォルトの名無しさん
2006/11/14(火) 13:48:11[2] 問題文(含コード&リンク): キーボードから1以上の整数n を入力し、(i=1からn番目までのi^2を求めるΣ) を計算して結果を画面表示するプログラムを
作成しなさい.ただし,1 未満の整数が入力された場合には再入力ができるように,1 以上の整
数が入力されるまで「scanf()」を繰り返すこととし,計算部分は再帰的プログラムとして作成す
ること.また,この関数のプロトタイプは「int square_sum(int)」とする.
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C
[4] 期限:11月15日まで
[5] その他の制限: なし
お願いします。
0505デフォルトの名無しさん
2006/11/14(火) 14:01:29やる気ない奴らは何もしなかっただけだが、ここに丸投げするのは不正だもんな。
まあ、分からなかった部分の参考にするのはアリだろうけど。
0506デフォルトの名無しさん
2006/11/14(火) 14:48:36そんなことをこのスレで言われても。
問題がとければそれで良し、後は依頼者が何をしようが関知しない、というのでは駄目なのか?
0507デフォルトの名無しさん
2006/11/14(火) 15:56:09n×nのサイズで螺旋状に0から(n二乗ー1)までの数が並ぶ行列を作成し、
画面に表示させるプログラムって配列を使って組むにはどうすればいいでしょうか?
ヒントだけでもいいので教えてください。お願いします。
0508デフォルトの名無しさん
2006/11/14(火) 16:11:04int square_sum(int n)
{
return n * (2 * n + 1)*(n + 1)/6;
}
int main()
{
int n = 0, sum;
while(n < 1){
puts("第何項まで?(1以上) =");
scanf("%d", &n);
}
printf("数列iの2乗の%d番目を含む総和は%d \n", n, square_sum(n));
return 0;
}
0509デフォルトの名無しさん
2006/11/14(火) 16:18:17#include<stdio.h>
int main(void){
int a, b;
int c[100][100]
printf("please input! n = ");
scanf("%d\n",a);
0510デフォルトの名無しさん
2006/11/14(火) 16:27:39int square_sum(int n)
{
if (n < 1) return 0;
return (n + 1) * n / 2 + square_sum(0);
}
0511デフォルトの名無しさん
2006/11/14(火) 16:35:05外側から埋めてけば?
0512デフォルトの名無しさん
2006/11/14(火) 16:46:22ヒント1.方眼紙を用意する。(無ければ紙に線を引いて作ること)
ヒント2.方眼紙にn×nサイズの枠を作り、その中に左上から指示通り数字を埋めていく。
ヒント3.nと、曲がるまでに配置する数値の数と、曲がる回数に法則性がないか考える。
0513デフォルトの名無しさん
2006/11/14(火) 16:47:52その切りかたを何回か繰り返すともとに戻る、ということを前提とするなら、
最大でも52!回繰り返せば十分である。なぜなら、52!回繰り返してもとに戻らないなら、
どこかでループしていて、それ以降も決してもとに戻らないからである。
よって、1回〜52!回繰り返せばもとに戻るわけだが、これらの公倍数である
(52!)!回目にはいずれの場合でももとに戻る。よって、
int main(void){ return printf("(52!)!\n"); }
0514デフォルトの名無しさん
2006/11/14(火) 16:59:04その発想はなかったわ
0515デフォルトの名無しさん
2006/11/14(火) 17:25:06int main(void){
int i, j, k, n;
int **p;
/* 中略 */
k = n*n-1;
for(i=0; i<=n/2; i++) {
for(j=i; j<=n-i-1; j++) p[i][j] = k--;
for(j=i+1; j<n-i-1; j++) p[j][n-i-1] = k--;
for(j=n-i-1; j>i; j--) p[n-i-1][j] = k--;
for(j=n-i-1; j>i; j--) p[j][i] = k--;
}
/*後略*/
}
0516デフォルトの名無しさん
2006/11/14(火) 17:30:41[2] 問題文(含コード&リンク):1から500の中で
任意の数a,b,cの公倍数を求めるプログラムを作成せよ。
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン: BCC5.5
[3.3] 言語: C++
[4] 期限: 11/15まで
[5] その他の制限:なし
自分で考えてみても、手も足もでなかったので教えてください。お願いします。
0517デフォルトの名無しさん
2006/11/14(火) 17:33:310518515
2006/11/14(火) 17:35:52i<=n/2→i<n/2+n%2
0519デフォルトの名無しさん
2006/11/14(火) 17:41:25表示すればいいのか、がわからないです。
0520デフォルトの名無しさん
2006/11/14(火) 17:42:11余裕じゃん
long koubaisuu (int a, int b, int c){
return a*b*c;
}
0521デフォルトの名無しさん
2006/11/14(火) 18:15:07失格。
0522デフォルトの名無しさん
2006/11/14(火) 18:17:190523デフォルトの名無しさん
2006/11/14(火) 18:22:540524デフォルトの名無しさん
2006/11/14(火) 18:24:30500^3 < 2^31-1
0525デフォルトの名無しさん
2006/11/14(火) 18:25:28なんのためにa,b,cが500以下とか言う条件がついてると思ってるんだよ
0526デフォルトの名無しさん
2006/11/14(火) 18:49:28有限時間で公倍数全てを表示することはできない
0528デフォルトの名無しさん
2006/11/14(火) 18:54:28「結果は7個以上出力すること」
です。
0529デフォルトの名無しさん
2006/11/14(火) 19:06:10それすらも思いつかないのか?
お前の肩の上に乗ってるのはなんだ? 漬物石か?
ずいぶんと軽そうな漬物石だこと。
0530デフォルトの名無しさん
2006/11/14(火) 19:17:530531デフォルトの名無しさん
2006/11/14(火) 19:27:070532デフォルトの名無しさん
2006/11/14(火) 19:37:32>>1
>・後から問題に付け足しするのはやめましょう。付け足しは作業を無駄にしがちです。
0533デフォルトの名無しさん
2006/11/14(火) 19:38:11[2] 問題文(含コード&リンク):ローンの利息計算をするプログラムを作る
[3] 環境
[3.1] OS:Windows XP
[3.2] コンパイラ名とバージョン: VC++ 2005
[3.3] 言語: C++
[4] 期限: 今週木曜日
[5] その他の制限:元金、年利率、年間利息(単利)、年間利息(複利)、元利合計(単利)、元利合計(複利)を定義して、元金と年利率のみを cin で入力して20年間分の利息と元利合計(それぞれ単利、複利を別々に)を1年ごとに表示できるように出力する。
よろしくお願いします。
switch をこの課題が出された日に習ったんですが、if と else でいいですよね。
0534デフォルトの名無しさん
2006/11/14(火) 19:44:52500 縛りの文言が公倍数を指すと考えた場合。問題追加部分は無視。
#include <stdio.h>
int gcd(int a, int b)
{
int c;
do {
c = a%b;
a=b;
b=c;
} while(c != 0);
return a;
}
int lcm(int a, int b)
{
return a*b/gcd(a,b);
}
int main()
{
int a,b,c,l,i;
printf("整数を空白で区切って3個入力:");
fflush(stdout);
scanf(" %d %d %d", &a, &b, &c);
l = lcm(lcm(a,b),c);
for(i=l; i<500; i+=l)
printf("%d\n", i);
return 0;
}
0535デフォルトの名無しさん
2006/11/14(火) 19:52:100536534
2006/11/14(火) 19:57:27確かプログラムが正常終了すれば全部フラッシュされるはず。違ったっけ?
>>516
よく見たら c++ だった…。
頭の #include <stdio.h> を #include <iostream> に、
またmain() を以下のものに差し替えてください。
int main()
{
int a,b,c,l,i;
std::cout <<"整数を空白で区切って3個入力:" <<std::endl;
std::cin >> a >> b >> c;
l = lcm(lcm(a,b),c);
for(i=l; i<500; i+=l)
printf("%d\n", i);
return 0;
}
0537534
2006/11/14(火) 20:00:52printf("%d\n", i);
↓
std::cout << i << std::endl;
0538デフォルトの名無しさん
2006/11/14(火) 20:22:090539デフォルトの名無しさん
2006/11/14(火) 20:36:51<cstdio>ならOK。
0540デフォルトの名無しさん
2006/11/14(火) 21:37:25合わせをすべて記述するようなプログラム(たとえばN=3なら(1,2,3),(1,2,4),…
(98,99,100))ってどうやって作ればいいか教えて下さい。
0541デフォルトの名無しさん
2006/11/14(火) 21:50:580542デフォルトの名無しさん
2006/11/14(火) 21:51:57[2]問題文:RSA公開鍵暗号方式の実装について考えてみる。
キーボードからX,e,p,qを入力させ、暗号文(Y)が出力される
プログラムを組め。
以下に実際に行われる計算式が示されているので、それらを
利用して実装せよ。
p*q = n
a = (p-1)*(q-1)
X^e = Y (mod n)
※ ただし、pおよびqは異なる150~200桁程度の素数とし、aとeは互いに素で
あること。また、Xも150〜200桁程度の数とする。素数を求めるプログラム
を組む必要はない。
ヒント:�@ユークリッドの互除法
�Aint型以上の数に対して配列の利用
[3]環境
[3.1]Windows XP
[3.2]gccまたはVisual C++ 6.0
[3.3]CでもC++でも可です。
[4]期限:2006/11/20
[5]その他の制限:特になし。あまり難しいことは習ってないです。
0543デフォルトの名無しさん
2006/11/14(火) 21:53:50#include <stdio.h>
void main(){
int a1, b;
int x1, y, q, r;
printf("2つの正の整数を入力。\n");
scanf("%d %d", &a1, &b);
x1=a1; y=b;
while( 1 ){
q=x1/y;
r=x1-q*y;
if(r==0) break;
x1=y;
y=r;
}
printf("%dと%dの最大公約数は%d。\n", a1, b, y);
if(y==1){
printf("%dと%dは互いに素。\n",a1, b);
}
これぐらいしかわからないです。どうか力をお貸し下さい。
0544デフォルトの名無しさん
2006/11/14(火) 22:07:060545デフォルトの名無しさん
2006/11/14(火) 22:12:51[1] 授業単元:C++によるプログラミング入門
[2] 問題文(含コード&リンク):
1,2,3,…,100までの整数の中からN個の数字を取り出すとして、その組み
合わせをすべて記述するようなプログラム(たとえばN=3なら(1,2,3),(1,2,4),…
(98,99,100))を提出せよ
[3] 環境
[3.1] OS: Windows XP
[3.2] VC 6.0
[3.3] C++
[4] 期限: 2006年11月19日17:00まで
[5] その他の制限:特になし
#include <stdio.h>
#define nmax 100
int i
double data[nmax+1]
main{
scanf("整数N%d\n",&N);
}
これでdata[1],data[2],…,data[N]に整数を入れて
すべての組み合わせをプリントしていこうとおもったんですけど、
for文がいっぱいになってしまうようなものしか思いつきませんでした。
ご協力お願いします。
0546デフォルトの名無しさん
2006/11/14(火) 22:13:02もしかして、誤差を出さない計算ルーチン作らないとダメだったりする?
こういうのって誤差にとてもうるさかったはず。
0547デフォルトの名無しさん
2006/11/14(火) 22:17:00つ ttp://www.faireal.net/articles/8/01/
0548デフォルトの名無しさん
2006/11/14(火) 22:38:40下のプログラムを大枠として作っていただけないですか?
最後の方の三行がわかりません。
#include<stdio.h>
#define N 52 /* トランプの枚数 */
#define M (N/2) /* その半分の数 */
int main( void )
{
int k;
int cards[ N ]; /* トランプ */
int temp[ N ]; /* 一時的にトランプの札を移動 */
int count = 0; /* 切った回数 */
/* トランプをセット */
for( k=0; k<N; k++ )
cards[ k ] = k+1;
while( 1 ) /* 無限ループ */
{
count++; /* 回数を一回増分 */
temp ← cardsを2つに分けてぱらぱらと切ったものをひとつにしたもの
temp が元に戻っていたら終了(breakする)
cards ← temp
}
printf( "%d 回目で元に戻る", count );
return 0;
}
■ このスレッドは過去ログ倉庫に格納されています