C/C++の宿題片付けます 124代目
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2009/03/02(月) 02:13:06【質問者へ】
回答者の便宜のため、質問の際は以下を行うことを推奨します。
・質問は【質問テンプレ】を利用してください。
・問題文は、出題されたまま全文を書いてください。
・問題文やコードをリンクするときは、一言内容にについて説明をつけましょう。
・計算問題は数式をあげ、どのような計算をするのか詳しく説明してください。
・エラーは、その詳細と発生した行を書きましょう。エラーメッセージはコピペしてください。
・後から問題に付け足しするのはコラー!!です。付け足しは作業を無駄にしがちです。
・なりすましを防ぐため、トリップを使ってください。名前欄に、「#」に続けて任意の文字列を入力して投稿すると、その文字列を知らない他人に騙られることを防ぐことができます。
【質問テンプレ】
[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
【過去ログ検索】 http://chomework.sakura.ne.jp/
【wiki】 http://www23.atwiki.jp/homework/
前スレ
C/C++の宿題片付けます 122代目(実質123代目)
http://pc11.2ch.net/test/read.cgi/tech/1232029287/
0153デフォルトの名無しさん
2009/03/10(火) 02:52:49俺にはこれが限界だ
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8959.txt
0154デフォルトの名無しさん
2009/03/10(火) 02:54:49こう書くと偏るからダメだって言う奴がでるからダメ。
0155デフォルトの名無しさん
2009/03/10(火) 02:59:31randの偏りをなくすのは諦めたw
あと、カードを取ってあがった場合の処理もw
0156デフォルトの名無しさん
2009/03/10(火) 03:07:41または、
for(i=53; i>1; ) {
num = rand() % i--;
temp = allcard[i];
allcard[i] = allcard[num];
allcard[num] = temp;
}
にする。
0157デフォルトの名無しさん
2009/03/10(火) 03:42:250158152
2009/03/10(火) 10:24:48訂正後:printf("%s%s%d ", (i%3==0 || i%10==3 || (i/10)%10==3 || (i/100)%10==3 || (i/1000)%10==3)
0159デフォルトの名無しさん
2009/03/10(火) 11:34:33嫌がらせのように見にくいコード
#include <stdio.h>
#include <string.h>
int main()
{
char buf[256];
int i;
for(i = 1; 1; i++, sprintf(buf, "%d", i))
printf("%s%s%d ", ((i % 3 == 0 || strchr(buf, '3') != NULL) ? "ア" : ""), ((i % 5 == 0) ? "犬" : ""), i);
return 0;
}
0160デフォルトの名無しさん
2009/03/10(火) 11:58:21#include "stdafx.h"
#include <iostream>
#include "windows.h"
using namespace std;
int main(void){
int i;
for(i=1;i<=10000;i++){
if(i%3==0 && i%5!=0){
cout << "ア";
}else if(i%5==0 && i%3!=0){
cout << "犬";
}else if(i%3==0 && i%5==0){
cout << "ア犬";
}
cout << i << endl;
Sleep(500);
}
return 0;
}
0161デフォルトの名無しさん
2009/03/10(火) 12:11:270162デフォルトの名無しさん
2009/03/10(火) 12:12:41*30から*39も全部アホにならないといけないそうだ
300から399も
0163デフォルトの名無しさん
2009/03/10(火) 12:15:49int nabeatu(int n)
を作れ
というのを以前見たような気がする
0164デフォルトの名無しさん
2009/03/10(火) 13:32:530165デフォルトの名無しさん
2009/03/10(火) 13:50:54一度文字列に置き換えて、3が含まれるかチェキするとか。
0166デフォルトの名無しさん
2009/03/10(火) 13:51:44順に10で割っていけば良いか、すまそ。
0168デフォルトの名無しさん
2009/03/10(火) 18:33:38あぁ読み間違えてた
俺もプログラミング習いたてだけど
一応できたわ
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8964.txt
つうか、>>150みたいな短い書き方あるんだな
俺もそういう書き方してえわ
0169デフォルトの名無しさん
2009/03/10(火) 22:12:07誕生日から現在まで何日経過したか、現在の年齢の2項目を表示するプログラムをお願いします。
0170デフォルトの名無しさん
2009/03/11(水) 01:35:21http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8965.txt
コンパイラ:VC++ 2005
日数;満日数
年齢:数え年齢(めんどうなので。満年齢は勝手にどうぞ)
誕生日:1970年以降
現在日付:2038年迄
0171デフォルトの名無しさん
2009/03/11(水) 01:52:00http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8966.txt
投稿してみよう…
0172デフォルトの名無しさん
2009/03/11(水) 01:54:590173デフォルトの名無しさん
2009/03/11(水) 09:04:042行目が曖昧かな?誕生日からというのは、前の誕生日からなのか、
生まれたその日からのどちらか?
0174デフォルトの名無しさん
2009/03/11(水) 09:25:19お誕生日会と誕生日の違いだな。
0175デフォルトの名無しさん
2009/03/11(水) 09:29:37お誕生日”会” ???
0176170
2009/03/11(水) 09:50:29それの方が悩んだ。
0177デフォルトの名無しさん
2009/03/11(水) 10:01:160178170
2009/03/11(水) 10:26:20「年齢計算に関する法律」で検索した。
0179デフォルトの名無しさん
2009/03/11(水) 17:28:080180デフォルトの名無しさん
2009/03/11(水) 17:44:12法律を知らないと書けないと言うか
作ろうとしてるプログラムの内容を知ってないと
作れない
018199
2009/03/11(水) 19:19:390182デフォルトの名無しさん
2009/03/11(水) 19:34:42年齢ハ出生ノ日ヨリ之ヲ起算ス
初日不算入の例外が年齢だよ
出生日が1日目
0183デフォルトの名無しさん
2009/03/11(水) 20:19:050184デフォルトの名無しさん
2009/03/11(水) 20:54:30>>182 例外に含まれるのを見落としてました。
なるほどしかし、法律的には4月1日に生まれた子女は翌年の3月31日
午後12時に1歳に成るとなっている。4月1日午前0時でなく。
満年齢はそれでいいとして、課題は"経過した"日数も…(2項目)だから生まれた日の
翌日が第1日目でいいじゃないかと思う。生まれた当日は何かとバタバタしてるし。
正確に言えば翌日も出生時刻までが0日目で、第2日目てことは無いと思う。
0185デフォルトの名無しさん
2009/03/11(水) 21:06:52http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8967.txt
0186185
2009/03/11(水) 21:12:19http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8968.txt
0187デフォルトの名無しさん
2009/03/11(水) 22:39:41今年って3回もあるんだ
ジェイソンも大変だなw
0188デフォルトの名無しさん
2009/03/12(木) 02:21:34言語・コンパイラ:C・VC++ 2005
日数;満日数
年齢:数え年齢(めんどうなので。満年齢は勝手にどうぞ)
誕生日:1901年以降 <--- new
現在日付:2038年迄 <--- なんとか?
0189デフォルトの名無しさん
2009/03/12(木) 02:46:53struct tmからtime_tをつくるmk_time()つー関数がなんか便利だたよ
0190デフォルトの名無しさん
2009/03/12(木) 02:59:04○ mktime
tm構造体つくる→年月日時分秒メンバを書き換える→mktime()
→localtime_s()でstruct tmに変換
→曜日・日数が自動補完されてうまー
0191デフォルトの名無しさん
2009/03/12(木) 11:27:49よくわからないんだけどCとC++が微妙に構文違うのはなぜなの?
0192デフォルトの名無しさん
2009/03/12(木) 11:44:11struct tm 変数名; // C structが必要
tm 変数名; // C++ structをつけなくていい
C++は、変数の宣言が処理の途中で出来る。等々
0193デフォルトの名無しさん
2009/03/12(木) 15:13:21[1] 授業単元: エムピーアイ
[2] 問題文(含コード&リンク):ガウス消去法を並列化せよ。
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc 3.4
[3.3] 言語: C
[4] 期限: 2009/03/13中
[5] その他の制限:
エムピーアイの問題ですが、後退代入以外完成してます。上三角型の行列を作るところまでは
出来たのであとは単純に答えを計算するだけなのですが、アルゴリズムがわかりません。
なので115行目の”後退代入”のところを埋めて下さいまし。
エムピーアイというか単にC言語のループの書き方のレベルなのでエムピーアイを知らなくても
アルゴリズムがわかれば書けると思います。なおプロセス数はmpirun -np 4 ./a.out
で実行して下さい(添付のインプットファイルが4行4列なので)
0194デフォルトの名無しさん
2009/03/12(木) 19:50:50配列の中の数値をランダムに入れ替えたいんです
たとえば
int A[]={ 1,2,3,4,5,6,7,8,9,10}
↓ランダム
4,9,5,1,8,6,2,10,3,7
教えてください
0195デフォルトの名無しさん
2009/03/12(木) 20:08:15for ( i = 0; i < 100; i++)
{
乱数で0-9の数字を2個( p , q )作成
tmp = A[ p ];
A[ p ] = A[ q ];
A[ q ] = tmp;
}
0196デフォルトの名無しさん
2009/03/12(木) 20:34:59#include <time.h>
int main(void)
{
int ar[]={11,12,13,14,15,16,17,18,19,20};
int size=sizeof(ar)/sizeof(ar[0]);
int i, num, temp;
srand( (unsigned)time( NULL ) );
for(i=size-1; i>=0; i--){
num = rand() % (i + 1);
temp = ar[i];
ar[i] = ar[num];
ar[num] = temp;
printf("%d ", ar[i]);
}
return 0;
}
0197デフォルトの名無しさん
2009/03/12(木) 21:00:29偏りそうにも見えるが、上手くいくのかな?
誰か優しく証明して。
0198デフォルトの名無しさん
2009/03/12(木) 21:15:230199デフォルトの名無しさん
2009/03/12(木) 21:21:01どれぐらい偏るもんなの?
0200デフォルトの名無しさん
2009/03/12(木) 21:24:01単純に処理としての話。
for(i=0; i < size; i++)だと分かるんだけど、
逆でも良いのかなってこと。
0201デフォルトの名無しさん
2009/03/12(木) 21:50:49> for(i=0; i < size; i++)だと分かるんだけど、
> 逆でも良いのかなってこと。
逆のほうが簡潔に書けるって話だな
デバッガで追っかけるとわかる
for(i=0; i < size; i++)で書いてみ
最終的に行き着くのが196になる
0202デフォルトの名無しさん
2009/03/12(木) 21:59:460203デフォルトの名無しさん
2009/03/12(木) 22:32:48出来ました!
ありがとうございます
すごいですね
でも、randを使っているから同じ数字が入りそうなんですけど
なんで同じ数字が入らないんだろう?
0204デフォルトの名無しさん
2009/03/12(木) 22:38:04分かりました
i=size-1と(i + 1)がまだ分かりませんが
なんとか分かるように頑張ります
ありがとうございます
0205デフォルトの名無しさん
2009/03/12(木) 22:40:21ありがとうございますm(_;)m
0206デフォルトの名無しさん
2009/03/12(木) 23:35:10次に、残ったものから1個選んで後ろから二番目に入れる。
これを残り0個になるまで繰り返す。
簡単だろ?
0207デフォルトの名無しさん
2009/03/13(金) 00:30:490208デフォルトの名無しさん
2009/03/13(金) 00:31:240209デフォルトの名無しさん
2009/03/13(金) 01:06:18>>156
0210デフォルトの名無しさん
2009/03/13(金) 07:17:51なるほど
0211デフォルトの名無しさん
2009/03/14(土) 17:04:38[1] 授業単元: データ構造アルゴリズム
[2] 問題文(含コード&リンク):
キューを利用して、プリンタのプリントキューを再現したプログラム(以下に要点を記載)を作成しなさい。
"1”を入力するとキューにデータが追加され"2"を入力するとキューからデータが取り出される
キューが満杯になったり、空になったりした際はその旨をメッセージで表示する。
また、以下の関数を作成し、使用しなさい。
vaio enqueue(int val)キューにデータを追加する
vaio dequeue() キューからデータを取り出す
vaio queue_print()キュー全内容を表示する
以上ですお願いします。
[3] 環境
[3.1] OS: Linux ソラリス
[3.2] コンパイラ名とバージョン: 不明
[3.3] 言語: C
[4] 期限: ([2009年3月15日])
[5] その他の制限: なし
0212デフォルトの名無しさん
2009/03/14(土) 17:10:440213デフォルトの名無しさん
2009/03/14(土) 17:12:100214デフォルトの名無しさん
2009/03/14(土) 17:17:140215デフォルトの名無しさん
2009/03/14(土) 17:17:560216デフォルトの名無しさん
2009/03/14(土) 17:19:25キューを利用して、プリンタのプリントキューを再現したプログラム(以下に要点を記載)を作成しなさい。
"1”を入力するとキューにデータが追加され"2"を入力するとキューからデータが取り出される
キューが満杯になったり、空になったりした際はその旨をメッセージで表示する。
また、以下の関数を作成し、使用しなさい。
void enqueue(int val)キューにデータを追加する
void dequeue() キューからデータを取り出す
void queue_print()キュー全内容を表示する
0217デフォルトの名無しさん
2009/03/14(土) 17:41:08スタックを利用した逆ポーランド電卓を作成しなさい。ただし、演算は四則演算のみとし、数値と数値、数値と演算子の間は半角スペースで区切って入力することとする。
お願いします。
0218デフォルトの名無しさん
2009/03/14(土) 17:42:22>>1
0219デフォルトの名無しさん
2009/03/14(土) 18:05:23[2] 問題文(含コード&リンク):要素数10個の整数配列を用意します。要素を入力し、クイックソートを用いて昇順にソートするプログラムを作成しなさい。
[3] 環境
[3.1] OS: (Linux/)
[3.2] コンパイラ名とバージョン: (わかりません)
[3.3] 言語: (C)
[4] 期限: [無期限]
[5] その他の制限: なし
0220デフォルトの名無しさん
2009/03/14(土) 18:56:32[2] 問題文 スタックを利用した逆ポーランド電卓を作成しなさい。ただし、演算は四則演算のみとし、数値と数値、数値と演算子の間は半角スペースで区切って入力することとする。
[3] 環境
[3.1] OS: (Linux)
[3.2] コンパイラ名とバージョン: (gcc)
[3.3] 言語: (C)
[4] 期限: [3/16]
[5] その他の制限: なし
0221デフォルトの名無しさん
2009/03/14(土) 19:03:19勝手に色々想像した。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8974.txt
0222デフォルトの名無しさん
2009/03/14(土) 19:08:530223デフォルトの名無しさん
2009/03/14(土) 19:11:100224デフォルトの名無しさん
2009/03/14(土) 20:01:14dequeue()の戻り値もvaioだぞw
0225デフォルトの名無しさん
2009/03/14(土) 20:14:08#include<stdio.h>
#include<stdlib.h>
#define N 10
int f(const void*a,const void*b){
 return *(const int*)a-*(const int*)b;
}
int main(){
 int a[N],i;
 for(i=0;i<N;++i)scanf("%d",a+i);
 qsort(a,N,sizeof(int),f);
 for(i=0;i<N;++i)printf("%d ",a[i]);
}
0226デフォルトの名無しさん
2009/03/14(土) 20:19:180227デフォルトの名無しさん
2009/03/14(土) 20:28:390228デフォルトの名無しさん
2009/03/14(土) 20:56:28for(i=0;i<N;++i)printf("%d ",a[i]);
なんか気持ち悪いな
0229デフォルトの名無しさん
2009/03/14(土) 20:57:42意図が読めないなんてピュアな方ですねw
0230デフォルトの名無しさん
2009/03/14(土) 21:09:19#include<stdio.h>
#include<stdlib.h>
int s[99],p;
void push(int n){s[p++]=n;}
int pop(void){return s[--p];}
int main(){
 char b[99];
 for(;scanf("%98s",b)==1;){
  switch(*b){
   case'+':push(pop()+pop());break;
   case'-':push(pop()-pop());break;
   case'*':push(pop()*pop());break;
   case'/':{int t=pop();push(pop()/t);}break;
   default:push(atoi(b));
  }
  printf("%d\n",s[p-1]);
 }
}
0231デフォルトの名無しさん
2009/03/14(土) 21:12:190232230
2009/03/14(土) 21:13:380233デフォルトの名無しさん
2009/03/14(土) 21:17:42[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8975.txt
データを表示する場合に,データの昇順と降順の両方向での表示が選択で
きるように,このプログラムに変更してください
[3] 環境
[3.1] OS:Win
[3.2] コンパイラ名とバージョン:gcc 3.4
[3.3] 言語:C
[4] 期限: 2009/03/16
[5] その他の制限: ありません
よろしくお願いします
0234230
2009/03/14(土) 21:18:22#include<stdio.h>
#include<stdlib.h>
int s[99],p;
void push(int n){s[p++]=n;}
int pop(void){return s[--p];}
int main(){
 char b[99];
 for(;scanf("%98s",b)==1;printf("%d\n",s[p-1]))
  switch(*b){
   int t;
   case'+':t=pop();push(pop()+t);break;
   case'-':t=pop();push(pop()-t);break;
   case'*':t=pop();push(pop()*t);break;
   case'/':t=pop();push(pop()/t);break;
   default:push(atoi(b));
  }
}
0235デフォルトの名無しさん
2009/03/14(土) 21:24:110236デフォルトの名無しさん
2009/03/14(土) 21:27:49void PrintTreeRev(BinNode *p){
if (p != NULL) {
PrintTree(p->right);
PrintData(p->data);
PrintTree(p->left);
}
}
を追加してメニューから呼ぶようにしろ
0237236
2009/03/14(土) 21:28:40逝ってくる
0238デフォルトの名無しさん
2009/03/14(土) 21:33:53微妙に質問が質問として成立してないんじゃね?
OS自体がプログラムだから、プログラムとして違いがあるし、
OSの機能を使うプログラムの場合も、OSが違うからプログラムとして違いがある。
>>234
いい感じ
でも、"%98s"じゃなく、"%98[^\n]"じゃないとダメぽ
0240デフォルトの名無しさん
2009/03/14(土) 21:48:53すんません。
勘違いしてました。
scanf一回で、式を全部持ってくるのかと思ってました。。。
0242デフォルトの名無しさん
2009/03/14(土) 22:12:01出来ました!ありがとうございます!
0243デフォルトの名無しさん
2009/03/14(土) 22:54:57[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8976.txt
[3] 環境
[3.1] OS:ウィンドウズvista
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C
[4] 期限: [2009年3月15日]
[5] その他の制限:なし
お願いします
0244デフォルトの名無しさん
2009/03/15(日) 00:23:05http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8977.txt
0245デフォルトの名無しさん
2009/03/15(日) 00:37:130246デフォルトの名無しさん
2009/03/15(日) 01:19:150247デフォルトの名無しさん
2009/03/15(日) 01:19:53ありがとうございます
0248デフォルトの名無しさん
2009/03/15(日) 01:49:26[2] 問題文 スタックを利用した逆ポーランド電卓を作成しなさい。ただし、演算は四則演算のみとし、数値と数値、数値と演算子の間は半角スペースで区切って入力することとする。
逆ポーランド電卓
逆ポーランド記法の数式を入力してリターンキーを押すと答えを表示してくれるもの。スタックを使用して以下のように計算する。
1.数値なら、そのままスタックにつむ
2.演算子なら、2つの数をスタックからおろして演算を行い、その結果を再びスタックにつむ。
※逆ポーランド記法とは演算子を後ろに置く記法。例えば1+2は12+に、(1+2)*3は12+3*になる。逆ポーランド記法は後置法ともよばれる。
[3] 環境
[3.1] OS: (unix)
[3.2] コンパイラ名とバージョン: (gcc)
[3.3] 言語: (C)
[4] 期限: [3/16]
[5] その他の制限: なし
よろしくお願いします。
0249デフォルトの名無しさん
2009/03/15(日) 02:08:17>>220と>>234を見ろ。
なんというか、まあ、お前らのところ本当にどうしようもないのしかいないんだな
0250デフォルトの名無しさん
2009/03/15(日) 02:18:350251デフォルトの名無しさん
2009/03/15(日) 02:24:17■ このスレッドは過去ログ倉庫に格納されています