掲載広告募集中です。
テキスト広告承ります。タイトル・PR文・URLの表示が可能となっております。PR文は全角50文字まで可能です。
http://etowns.slyip.net/ad-on/
 
無料ホームページ/ 無料掲示板/ 無料チャット/ 広告を非表示に   Ads by Eタウン
001180
C/C++の宿題片付けます アップローダ
[トップに戻る] [アルバム] [留意事項] [ワード検索] [管理用]
おなまえ
Eメール
タイトル
コメント
参照URL
添付File
暗証キー (英数字で8文字以内)
投稿キー (投稿時 投稿キー を入力してください)
文字色

無題 投稿者:mm 投稿日:2013/07/13(Sat) 09:37 No.8   
[1] 授業単元:二分木の消去関数の作成
[2] 以下のプログラムのノードを消去する関数delNode()を完成させよ。但し、書き加えていいのは
BinTree::BinNode *BinTree::delNode(BinNode *rp,int x){
}
の中だけとする。
#include <iostream>
using namespace std;

class BinTree{
private:
class BinNode{
public:
int idata;
BinNode *left,*right;
BinNode(int a=0){idata=a;left=right=0;}
void printNode(){cout << idata << " ";}
};
BinNode *root;
void traverse(BinNode *rp);
void addNode(BinNode *rp,BinNode *node);
BinNode *delNode(BinNode *rp,int x);
public:
BinTree(){root=0;}
void printTree(){traverse(root);}
void insert(int x){
BinNode *np=new BinNode(x);
if(!root)root=np;
else addNode(root,np);
}
void remove(int x){root=delNode(root,x);}
};

void BinTree::addNode(BinNode *rp,BinNode *node){
if(rp->idata>node->idata){
if(rp->left!=NULL)
addNode(rp->left,node);
else{
rp->left=node;
}
}
else{
if(rp->right!=NULL)
addNode(rp->right,node);
else{
rp->right=node;
}
}
}

BinTree::BinNode *BinTree::delNode(BinNode *rp,int x){
}

void BinTree::traverse(BinNode *rp){
if(rp==NULL)return;
if(rp->left!=NULL){
traverse(rp->left);
}
rp->printNode();
if(rp->right!=NULL){
traverse(rp->right);
}
}


int main(){
BinTree bt; // 空の二進木を作成
int x;

cout << "正整数をいくつか入力せよ --> ";
while(cin >> x && x >0){ // 負数が入力されるまで正整数を入力
bt.insert(x); // x をデータとして持つノードを木に追加
}

bt.printTree(); // bt の木全体を表示する
cout << endl;

while(cout << "削除したい正整数 --> " && cin >> x && x > 0){
bt.remove(x);
bt.printTree();
cout << endl;
}

return 0;
}

[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: g++
 [3.3] 言語: C++

[4] 期限: 7月15日(月)終日
[5] その他の制限:
上でも書いたように、書き加える場所は
BinTree::BinNode *BinTree::delNode(BinNode *rp,int x){
}
の中だけです。
ちなみに実行結果は
正数値をいくつか入力せよ --> 8 10 3 9 5 1 12 4 11 -1
1 3 4 5 8 9 10 11 12
消去したい正数値 --> 8
1 3 4 5 9 10 11 12
消去したい正数値 --> 1
3 4 5 9 10 11 12
消去したい正数値 --> 12
3 4 5 9 10 11
消去したい正数値 --> 1
左エラー:1:そのようなノードはありません
3 4 5 9 10 11
消去したい正数値 --> 12
右エラー:12:そのようなノードはありません
消去したい正数値 --> -1
終了

無題 投稿者:425 投稿日:2013/07/10(Wed) 18:20 No.7   
以下要求仕様に従って「プログラミング管理アプリケーション」を作成せよ。
要求仕様
・UNIX系OS(Red Hat Enterprise Linux 5)の環境上で動作し、主開発言語としてC言
 語を用いる。
・作成したプログラムファイルの管理を行うプログラムを作成する。プログラムのデータは、レコード単位で管理される。1レコード中にプログラムのタイトル名、副タイトル名、作成日付、ファイルのパス名、分類の項目を持つ。タイトル名とは、複数ファイルから構成されるプログラムをまとめた名前である。(例えば、「プログラム管理アプリケーション」)。副タイトル名とは、タイトル名で表されるプログラムの中でそのファイルの機能を示す名前である。(例えば、「メインルーチン」、「ソート関数部」、「入出力機能」等々)。分類とはCソース、Makefile、ヘッダファイル、機能設計書、仕様手引き等の項目を表す。
・プログラム管理として以下の機能を有する。
  −データはファイルとして保存、読み込みができる。
  −複数ファイルから構成されるプログラムの登録ができる。
  −登録済みのプログラムに対して、新規データの追加、既存データの削除や参照ができる。
  −入力したデータの任意の項目に対して、修正ができる。
  −あらかじめ設定されている分類項目の他に、新たな分類項目を追加、削除できる。
  −レコード内の任意の項目をキーとして検索、ソート(昇順・降順)が可能である。また、タイトル名と副タイトル名両方あわせたソートもできるものとする。例えば、タイトルは昇順でソートされ、かつそのタイトル内のレコードについては吹くタイトルで降順にソートできる等々。
  −登録されたデータの一覧表示ができる。
  −以上の機能を任意に選択し実行できる。
実際に、(本演習課題を含めて)自分のこれまでに作った全てのCプログラムと関連するフ
ァイルをこのプログラムに登録して実行せよ


課題問題の実施手順
手順1:機能仕様書を作成せよ。機能仕様書(外部仕様書と呼ばれる場合もある)とは、利用者の観点から、「どのように働くか」を記述する。よって、プログラムがどんな環境で実施されるかは関係ない。
機能仕様書には次のような項目が含まれる。
1.概要:これを読むだけで全体像がわかるような文章(図や表を含んでもいい)を書く。このアプリケーションの用途や利便性についての記述等を含めたりする。なお詳細については、後で別に記述する。
 仕様書自身が大きい場合には、文章全体の構成のついても記述される。
2.使われ方(シナリオ):現実(類型化された)の利用者を想定して、実際に使われる様子を記述する。
 その他に、適宜以下のような項目を含める。
3.フローチャート:これは、全体の動作を説明する補助として書くもので、設計に書くような詳細なフローチャートではない。
4.画面イメージ:表示される画面やウィンドウ、上のフローチャートと組み合わせて、どの場面でどの画面を出して、どういう入力を利用者に促すか記述する。
5.対象外:このプログラムでは、はじめからやらないと決めていることを明記したりする。
手順2:技術仕様書を作成せよ。技術仕様書(内部仕様書と呼ばれる場合もある)とは、プログラミング内部の実装について記述する。動作するOSの条件、データ構造、開発に使うプログラミング言語、ツールの選択、採用するアルゴリズムといった内容について記述する。
手順3:目的とするプログラムの設計を行い、設計書を作成せよ。設計書は、機能仕様書と技術仕様書に従って設計者が記述するものであり、プログラマへの指示を定めるものである。
   設計書には以下の項目が含まれる。
   1.概要:プログラム全体について、大まかに説明する。全体の構成について述べて、個々の部分の詳細については後述する。
   2.全体構成と構成要素に関する各々の説明:図等を駆使してプログラムの設計について説明する。図はあくまでも補助であって、文章できちんと明記する。ここまではプログラム言語にはあまり依存しない書き方をする。
    以下が、ここまでの設計と実際のCプログラムとの対応を表現する部分になる。
   3.プログラム中に自作する関数全てに対する関数仕様:上で説明したプログラム構成要素とCプログラムの関数との対応関係がわかるようにする。
   4.プログラム中で用いる全ての大域変数について、変数名とその内容をまとめたもの:これも設計で定めた大域的なデータとの対応関係が明らかになるようにする。
   5.保存用ファイルで用いるレコードの書式:ファイルを用いる場合には、ファイル中にデータをどのように配置するか等、プログラマにとって必要な情報を記述する。これが明記されていないと、このファイルを用いるプログラマどうしが勝手な解釈で作成されてしまう。
設計を行うには、次のような手順で考える。
  1.プログラム全体の構造を考える。全体を機能ごとに分解して部品化し、部品間の関係を明らかにする。最初から細かい部品にするのではなく、最初は大まかに分解し、部分をさらに細分化してゆく。十分小さな部品にまで分解できれば、ほぼ設計は完成したといえる。
  2.プログラムの構成を説明するために、いくつかの方法がある。必要に応じて組み合わせて表現する。
   ・部品間の静的な関係を説明したい場合には、全体構成図のようなものを記述する。
    このような図によって、プログラムの依存関係なども明らかになる。
   ・処理の流れを説明するならば、処理に応じた制御フローチャートが良いだろう。
   ・データの流れを説明するならば、データの流れを記述したデータフローチャートになる。データを部品間で直接渡すのか、それとも(大域的な)別のどこかから受け渡しするのかも、これによって明らかになる。
  3.各部品を、それぞれCプログラムの関数で作ると考える。関数にはその機能を的確に表す名前をつける。上で作った設計に基づいてデータの受け渡しが引数で行われるか、大域変数を使うのか決まる。また、返り値も決まる。
手順5:アプリケーションを作成させよ。
    全部コーティングをしてからテストするのではなく、まず各関数ごとにデバッグすること。そのためには、デバッグのための関数を作ることも必要になる。
    このように作成するには、各関数を別のファイルに保存して、Makefileを作る必要がある。
     例)ファイルからデータを入力してsortするアプリケーションを考える。
      1.Sort関数だけテストするための仮のmain関数を作る。仮なのでファイル入力なんかしないで、変数にあらかじめデータを埋め込んでsortを呼び出す。
      2.Main関数だけテストするために、mainから呼ばれるsort関数を仮に作る。仮に作るファイルは名前だけで中身はprintf 1行がある程度のものにする。Mainがファイル入力してsort関数が正しく呼ばれれば、引数に渡した内容をプリントすることで正常動作が確認できる。
      3.Mainもsort正しく動くことを各々確認した後で、両方いっしょにして、全体の動作確認を行う。
  各関数の動作確認と修正については、チェックリストを作成し、作成したチェックリ
ストを全て提出せよ。
手順6:全部の関数が完成したら、全体で動作確認を行う。全体での動作確認についても、関数の時と同様に動作確認の度にチェックリストを1部作成し、作成したチェックリストを全て提出せよ。
手順7:アプリケーションの利用手引書を作成せよ。
    これは、プログラムなど知らない利用者が詠むものであることに注意して書くこと。
手順8:完成したアプリケーションを指導教員に動かして見せ、不具合がないことを示せ。これまで作成した文章などに、最終的に完成したプログラムのリストと実行例をつけて提出せよ。


別の問題を例にしたチェックリストと関数仕様書と用意してある。これを参考して、課題にあわせて作成せよ。

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% %
% checklist.tex: チェックリスト %
% %
% 2003/07/03 %
% %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\documentclass{jarticle}

\setlength{\oddsidemargin}{-1in}
\addtolength{\oddsidemargin}{20mm}
\setlength{\textwidth}{170mm}
\pagestyle{empty}

\begin{document}
\begin{table}
\begin{center}
{\Large \bfseries チェックリスト}
\vspace{.5\baselineskip}
\begin{tabular}{|l|l|c|c|c|c|}
\hline
\multicolumn{1}{|c|}{チェック項目}
& \multicolumn{1}{c|}{細目}
&   入 力   &  出力・結果  & 確認 &   不具合等  \\
\hline
\hline
レコードの追加
& 商品名 & & & & \\\hline
& 購入日付 & & & & \\\hline
& 価格 & & & & \\\hline
& 分類 & & & & \\\hline\hline
レコードの削除
& & & & & \\\hline\hline
データの修正
& 商品名 & & & & \\\hline
& 購入日付 & & & & \\\hline
& 価格 & & & & \\\hline
& 分類 & & & & \\\hline\hline
データの検索
& 商品名 & & & & \\\hline
& 購入日付 & & & & \\\hline
& 価格 & & & & \\\hline
& 分類 & & & & \\\hline\hline
% & & & & & \\\hline\hline
データのソート(昇順)
& 商品名 & & & & \\\hline
& 購入日付 & & & & \\\hline
& 価格 & & & & \\\hline
& 分類 & & & & \\\hline\hline
データのソート(降順)
& 商品名 & & & & \\\hline
& 購入日付 & & & & \\\hline
& 価格 & & & & \\\hline
& 分類 & & & & \\\hline\hline
ファイルのセーブ
& & & & & \\\hline\hline
ファイルのロード
& & & & & \\\hline\hline
予算の入力
& 週間 & & & & \\\hline
& 月間 & & & & \\\hline\hline
% & & & & & \\\hline\hline
分類ごとの支出集計
& 週間 & & & & \\\hline
& 月間 & & & & \\\hline\hline
% & & & & & \\\hline\hline
予算残額
& 週間 & & & & \\\hline
& 月間 & & & & \\\hline\hline
% & & & & & \\\hline\hline
拡張機能
& & & & & \\\hline
& & & & & \\\hline
& & & & & \\\hline
& & & & & \\\hline
& & & & & \\\hline
\end{tabular}
\end{center}
\end{table}
\end{document}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% %
% func_spec.tex: 関数仕様書 %
% %
% 2003/07/03 %
% %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\documentclass[a4j]{jarticle}

\pagestyle{empty}

\begin{document}
\begin{table}
\begin{center}
{\Large \bfseries 関数仕様書}
\vspace{.5\baselineskip}
\large
\begin{tabular}{|c|c|l|}
\hline
\multicolumn{2}{|c|}{戻り値の型} & \multicolumn{1}{c|}{関数名}\\\hline
\multicolumn{2}{|c|}{\hspace{1in}} & \hspace{3.8in} \\\hline\hline
引数の型 & 引数の名前 & \multicolumn{1}{c|}{引数の役割}\\\hline
& & \\\hline
& & \\\hline
& & \\\hline
& & \\\hline
& & \\\hline
& & \\\hline \hline
\multicolumn{3}{|c|}{関数の機能}\\\hline
\multicolumn{3}{|c|}{}\\
\multicolumn{3}{|c|}{}\\
\multicolumn{3}{|c|}{}\\
\multicolumn{3}{|c|}{}\\
\multicolumn{3}{|c|}{}\\
\multicolumn{3}{|c|}{}\\
\multicolumn{3}{|c|}{}\\
\multicolumn{3}{|c|}{}\\
\multicolumn{3}{|c|}{}\\
\hline\hline
変数の型 & 変数の名前 & \multicolumn{1}{c|}{変数の役割}\\\hline
& & \\\hline
& & \\\hline
& & \\\hline
& & \\\hline
& & \\\hline
& & \\\hline
& & \\\hline
& & \\\hline
\end{tabular}
\end{center}
\end{table}
\end{document}

無題 投稿者:774 投稿日:2013/04/16(Tue) 17:04 No.6   
【質問テンプレ】
[1] 授業単元:C言語
[2] 問題文(含コード&リンク):
一次配列を指定した数参照(例だと3つ),配列の終わりに到達したら,最初に戻る.
これを数回繰り返すプログラム(例1)
また,例1で特定の条件を満たす場合,次回はその条件を満たした配列の次からスタート.
※例2:条件を満たす数が複数含まれている場合,後ろを優先
例1
a[4]={1,2,3,4,5}
回数3
1回目 a[0]=1,a[1]=2,a[2]=3
2回目 a[3]=4,a[4]=5,a[0]=1
3回目 a[1]=2,a[2]=3,a[3]=4

例2
条件:2の倍数→2と4
a[5]={1,2,3,4,5,6}
回数5
1回目 a[0]=1,a[1]=2,a[2]=3
※a[1]が条件を満たすので,次回はa[2]から
2回目 a[2]=3,a[3]=4,a[4]=5
※a[3]が条件を満たすので,次回はa[4]から
3回目 a[4]=5,a[5]=6,a[0]=1
4回目 a[1]=2,a[2]=3,a[3]=4
※a[1],a[3]が条件を満たすので,次回はa[4]から
5回目 a[4]=5,a[5]=6,a[0]=1

[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン:gcc v3.3
 [3.3] 言語:C
[4] 期限: 4/18
[5] その他の制限:stdio.h stdlib.hのみ
わかりにくい問題でごめんなさい。ヒントだけでもよろしくお願いします。

164代目>>247 投稿者:転載 投稿日:2013/04/07(Sun) 09:21 No.4 ホームページ   
[1] 授業単元:C言語
[2] 問題文(含コード&リンク):
競技かるた問題
次の順序に従って競技かるたの送り札を決定するプログラムを書きなさい。
1) 百人一首を一行31-32文字のひらがなでテキストファイルとして作っておく。
2) テキストファイルを読み取り、現在の 自陣(1-25枚) 敵陣(1-25枚)を決める。
3) 既に読まれた札数とその札を決める。
  既に読まれた札は完全に記憶している(参照可能)こととする。
4) 設定した状況の元で、自陣の札のうち、敵陣に置かれた時に、敵陣札の中で
  決まり字に至るまでの間に最も候補札数の総計の多くなる札を選んで返し札とする。
  ただし最大候補札数の札が複数あった場合は、決まり字の文字数が大きい方、
  それでも決まらないときは乱数を使って選別することとする。
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C/C++言語
[4] 期限: 4月15日
[5]追記

現時点で、
送り札が即読まれると仮定して、敵陣札の決まり字までの文字総数で評価する
ということです。

自陣に一枚 わたのはら+や と わがいほは があり、
敵陣に わたのはら+こ と わすれぢの があり、
既に わびぬれば は既に読まれ、わがそでは は未読だとすると

わたのはら+こ を敵陣に置けば 5 + 5 + 1 = 11 が判断値と考えます。
わがいほは を敵陣置けば 2 + 1 + 1 = 4 (2なのはわがそではが読まれる可能性があるから)

ほとんどの場合 わたのはら を送ることになるでしょう。

実際の競技ではさらに複雑で、自陣での決まり字の位置から「先の部分」で
の判断値がひらめきの下地になっていると思います。

Re: 164代目>>247 - 1128 2013/04/07(Sun) 09:24 No.5
きたねぇコードだ・・・採点よろしく
#include <iostream>
#include <fstream>
#include <algorithm>
#include <sstream>
#include <iomanip>
#include <ios>
#include <locale>
#include <locale.h>
#include <string>
#include <bitset>
std::bitset<100> readCards(const wchar_t *summary){
std::bitset<100> cards;
std::wcout<<summary<<std::endl;
for(;;){
std::string str;
std::getline(std::cin,str);
if(!std::cin)break;
if(str.length()==0)break;
std::istringstream readline(str);
for(;;){
int card;
readline>>card;
if(!readline)break;
if(card<1 || 100<card){
std::wcout<<card<<L"は不正な札番号です"<<std::endl;
continue;
}
cards.set(card-1);
}
}
return cards;
}
int main(void){
#ifdef __GNUC__
setlocale(LC_CTYPE,"");//gccのstd::locale::globalは使いものにならない
#else
std::locale::global(std::locale(""));
#endif
std::wstring karutaMap[100];
std::wifstream karutaFile("小倉百人一首.txt");
std::wcout<<L"札一覧:"<<std::endl;
for(int karutaIndex=0;karutaIndex<100;karutaIndex++){
if(!karutaFile){std::wcout<<L"リードエラー"<<std::endl;return 1;}
getline(karutaFile,karutaMap[karutaIndex]);
std::wcout<<(karutaIndex+1)<<L"=["<<karutaMap[karutaIndex]<<std::endl;
}
karutaFile.close();
std::bitset<100> ownCard=readCards(L"自陣の札を入力[空入力で終了]:");
std::bitset<100> foeCard=readCards(L"敵陣の札を入力[空入力で終了]:");
std::bitset<100> wasRead=readCards(L"既読の札を入力[空入力で終了]:");
std::bitset<100> blkCard=~(ownCard|foeCard|wasRead);
std::bitset<100> testTgt=foeCard|blkCard;
if(((ownCard&foeCard)|(ownCard&wasRead)|(foeCard&wasRead)).any())
{std::wcout<<L"重複があります。"<<std::endl;return 1;}
if(ownCard.none()||foeCard.none())
{std::wcout<<L"陣が空です。"<<std::endl;return 1;}
std::wcout<<L"札一覧:"<<std::endl;
for(int karutaIndex=0;karutaIndex<100;karutaIndex++){
std::wcout<<(karutaIndex+1)<<L":";
std::wcout<<(ownCard[karutaIndex]?L"自陣":foeCard[karutaIndex]?L"敵陣":wasRead[karutaIndex]?L"既読":L"空札");
std::wcout<<L":"<<karutaMap[karutaIndex]<<std::endl;
}
int maxScore=-1,maxScoreCard=-1;
for(int ownCardIndex=0;ownCardIndex<100;ownCardIndex++){
if(!ownCard[ownCardIndex])continue;
int score=0;
std::wcout<<L"送り札候補:"<<(1+ownCardIndex)<<L"="<<karutaMap[ownCardIndex]<<std::endl;
std::wcout<<L"評価中...";
for(int strIndex=1;strIndex<karutaMap[ownCardIndex].length();strIndex++){
bool matchFlag=false;
int matchCards=0;
std::wcout<<L"["<<(1+ownCardIndex)<<L"]";
matchCards++;
for(int testTgtIndex=0;testTgtIndex<100;testTgtIndex++){
if(!testTgt[testTgtIndex])continue;
if(karutaMap[ownCardIndex].compare(0,strIndex,karutaMap[testTgtIndex],0,strIndex)==0){
matchFlag=true;
if(foeCard[testTgtIndex])
matchCards++;
std::wcout<<(foeCard[testTgtIndex]?L"[":L"(")<<(1+testTgtIndex)<<(foeCard[testTgtIndex]?L"]":L")");
}
}
if(!matchFlag)break;
std::wcout<<L"="<<matchCards<<L".";
score+=matchCards;
}
std::wcout<<L"..="<<score<<std::endl;
if(score>maxScore){
maxScore=score;
maxScoreCard=ownCardIndex;
}
}
std::wcout<<std::endl<<L"送り札:"<<(1+maxScoreCard)<<L"="<<karutaMap[maxScoreCard]<<std::endl;
return 0;
}


無題 投稿者:名無し 投稿日:2013/01/30(Wed) 14:37 No.3   
[1] 授業単元:c++
[2] 問題文(含コード&リンク):不特定多数名分のローマ字名、漢字名、番号、得点が記入されたデータファイル(seiseki.txt)から、ローマ字名を入力してデータファイル内の情報を検索するプログラムを作成してください。
検索の結果として、該当者が居る場合画面にその情報(ローマ字名、漢字名、番号、得点)を表示し、なおかつその情報が記載された新しいファイル(kekka.txt)が生成されるようにしてください。また、該当者が居ない場合はその旨を表示するようにしてください。
[3] 環境
 [3.1] OS: windows7
 [3.2] コンパイラ名とバージョン: Borland C++ 5.5.1
 [3.3] 言語:C++
[4] 期限: 2013/2/1
[5] その他の制限: 入出力の方法、変数、四則演算、分岐、繰り返し、関数、文字の出入力、文字列、構造体、ファイル処理の範囲内でお願い致します。

[1] [2]

処理 記事No 暗証キー

- Joyful Note -