[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 2chのread.cgiへ]
Update time : 06/15 06:15 / Filesize : 299 KB / Number-of Response : 887
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

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



1 名前:デフォルトの名無しさん [2008/02/04(月) 23:32:19 ]
あなたが解けない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] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)

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

【前スレ】
C/C++の宿題を片付けます 103代目
pc11.2ch.net/test/read.cgi/tech/1200318925/

844 名前:デフォルトの名無しさん mailto:sage [2008/03/29(土) 14:31:01 ]
>>841
勉強用に捻くれたコードにしてみた。
#include<stdio.h>
int main(void){
    int n;
    printf("整数を入力してください:");
    for(scanf("%d",&n);n>0;n-=10)
        printf("%.*s",n,"1234567890");
    return 0;
}

845 名前:844 mailto:sage [2008/03/29(土) 14:31:36 ]
おっとアンカミス
s/841/840

846 名前:デフォルトの名無しさん mailto:sage [2008/03/29(土) 14:42:21 ]
ありがとうございます!
上京したてで友達がいない中、予習してまして…

847 名前:デフォルトの名無しさん mailto:sage [2008/03/29(土) 14:50:16 ]
勉強用に、の意味がわからない

848 名前:デフォルトの名無しさん mailto:sage [2008/03/29(土) 16:14:46 ]
勉強用に捻くれたコードを提示すると、捻くれた知識が身に付くだけだぞ。

849 名前:デフォルトの名無しさん mailto:sage [2008/03/29(土) 17:55:02 ]
と、捻くれた人が言ってます

850 名前:デフォルトの名無しさん mailto:sage [2008/03/29(土) 18:43:08 ]
>>840>>844 は師匠と弟子か?
もしそうならスレ立てしてそっちでやれよ
ついでに俺は前置きで
> こんなの書いても現段階だと悪影響にしかならん気はするぞ
って書いておいたんだがな

851 名前:デフォルトの名無しさん mailto:sage [2008/03/29(土) 18:55:00 ]
>って書いておいたんだがな
どこに?

852 名前:デフォルトの名無しさん mailto:sage [2008/03/29(土) 19:11:50 ]
>>850
>>840 と >>844 は師匠と弟子か? 
いや、まったく関係なし。
単に暇つぶしで適当かつ、それなりに捻くってコードを書いただけ。
真面目なコードは既に出てたし、こういう捻った書き方もあるよーってね。

#まぁぶっちゃけprintfの書式で遊んでみたかっただけなんだけど。



853 名前:デフォルトの名無しさん mailto:sage [2008/03/29(土) 19:16:56 ]
勉強用に、って自分の勉強のことか

854 名前:デフォルトの名無しさん mailto:sage [2008/03/29(土) 21:07:15 ]
変なコードを書くときは、一々捻くれたとか書かないでそのまま書く。
そういうことを書くとちょっと変わった俺臭がきついから。

855 名前:デフォルトの名無しさん mailto:sage [2008/03/29(土) 21:10:10 ]
いよいよCにすら関係なくなってきたぞ

856 名前:デフォルトの名無しさん mailto:sage [2008/03/29(土) 23:39:59 ]
まぁ、ぶっちゃけ、これらを習って最終的に何を作る目的があるのか?
自分も大学生時代にC言語の授業はあったけど、そこで習ったことだけじゃ通用せんが
必要なことは習っていた。その後、自分でライブラリを調べて、日ごろの使用目的に応じて
必要なプログラムを作るようになった。そうなるのが望ましい。

857 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 00:22:05 ]
まあここに来るのは「プログラムの宿題マンドクサ。誰かにやってもらおう」って人だから、望むべくもないかもね。

858 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 00:36:29 ]
それくらいの人の方がうれしい
単位がかかってるとか理解できないからもっと簡単にしてくれとかちょっとうざい

859 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 00:43:56 ]
何でも良いから宿題かもん

860 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 00:46:37 ]
ひまなら project Euler でもやってれば

861 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 00:48:37 ]
おおやってみるdクス

862 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 12:55:14 ]
[1] 授業単元:アルゴリズム
[2] 問題文(含コード&リンク):() 指定文字列と一致する文字列が規定の文字列に存在するかどうかを2分探索法で探索するプログラム
[3] 環境
 [3.1] OS: (Windows/Linux/等々) linux
 [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
 [3.3] 言語: (C/C++/どちらでも可 のいずれか) C
[4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか)3月31日AM9:00まで
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)特になし
上記のプログラムの作り方が分かりません。文字列は2つとも配列に格納してある状態です。よろしくお願いします。



863 名前:862 mailto:sage [2008/03/30(日) 12:57:51 ]
↑書き忘れました。
規定の文字列というのは2分探索法ですので aaabbcのように辞書順にソートされている1行の文字列です。

864 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 13:32:09 ]
 | 1 2 3 4… 9
---------------------
1| 1 2 3 4… 9
2| 2 4 6 8… 18
3| 3 6 9 12… 27
4| 4 8 12 16… 36
以下省略

と、いった感じの九九の表をforを使って作りたいのですが、どうしたらよいのでしょうか?



865 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 14:02:38 ]
int main()
{
int i, j;
const int max = 9;

printf(" |");
for (i = 1; i <= max; i++) {
printf(" %3d", i);
}
printf("\n--+");
for (i = 1; i <= max; i++) {
printf("----");
}
for (i = 1; i <= max; i++) {
printf("\n%2d|", i);
for (j = 1; j <= max; j++) {
printf(" %3d", i * j);
}
}
return 0;
}

866 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 15:06:39 ]
>>862
mainは適当に書いたから書き直したほうがいいかも
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6186.c


867 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 15:09:28 ]
>>862
二分探索には標準ライブラリ関数bsearchを使いました。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int cmp( const void* key, const void* elm )
{
  return strcmp( (const char*)key, *(const char**)elm );
}

int main(void)
{
  // 規定の文字列。辞書順にソートされていること。
  static const char* const table[] = {
    "abc", "def", "ghi", "jkl", "mno", "pqr", "stu", "vwx", "yz",
  };
  const char** hit;
  char str[101];

  printf( "検索文字列:" );
  scanf( "%100s", str );
  hit = (const char**)bsearch( str, table, sizeof(table)/sizeof(*table), sizeof(*table), cmp );
  if( hit )
    printf( "'%s'は%d番目に存在します。\n", str, hit-table );
  else
    printf( "'%s'は存在しません。\n", str );
  return 0;
}

868 名前:867 mailto:sage [2008/03/30(日) 15:21:42 ]
>>863を把握していなかった。修正。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int cmp( const void* key, const void* base )
{
  const char* key_str = (const char*)key;
  return strncmp( key_str, (const char*)base, strlen(key_str) );
}

int main(void)
{
  static const char base[] = "aaabbc"; // 規定の文字列
  const char* hit;
  char str[101];

  printf( "検索文字列:" );
  scanf( "%100s", str );
  hit = (const char*)bsearch( str, base, strlen(base), 1, cmp );
  if( hit )
    printf( "'%s'は%d文字目から存在します。\n", str, hit-base+1 );
  else
    printf( "'%s'は存在しません。\n", str );
  return 0;
}

869 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 18:03:32 ]
>>864
int x,y;
puts(" | 1 2 3 4 5 6 7 8 9\n------------------------------"
for(x=1; x<10; x++)
{
printf("%d | ", x);
for(y=1; y<10; y++)
printf("%d ", x * y);
}

870 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 18:08:44 ]
>>869

871 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 20:50:16 ]
〉〉868
アルゴリズムの問題なのだから、bsearchを使うのはだめなんじゃないか?アルゴリズムを作って使う課題なのだろうし。

872 名前:デフォルトの名無しさん mailto:sage [2008/03/31(月) 22:57:05 ]
C++ のSTLのvectorで、要素の最後から開放していくのはこんな感じであってますか?

std::vector<Hoge*>::reverse_iterator itr = v.rbegin() ;
while( false == v.empty() )
{
delete *itr++ ;
v.pop_back() ;
}




873 名前:デフォルトの名無しさん [2008/03/31(月) 23:11:01 ]
基本的に領域の開放は無理だろ swapでやるしか無いのでは?
ブロックごとに管理して100個使わなくなったら解放とかじゃないか

874 名前:デフォルトの名無しさん mailto:sage [2008/03/31(月) 23:11:47 ]
constでない操作を呼び出した時点でiteratorは無効になる。
(実装によりたまたま有効なままかもしれないけど)
↓でいいんじゃない。

while(!v.empty()) {
delete v.back();
v.pop_back();
}

875 名前:デフォルトの名無しさん mailto:sage [2008/03/31(月) 23:14:51 ]
pop_backした際にiteratorが無効になるので駄目。
なので
while( ! v.empty() ){
    delete v.back();
    v.pop_back();
}
もしくは
for(std::vector<Hoge*>::reverse_iterator itr = v.rbegin();itr != v.rend();++itr)
    delete *itr;
v.clear();
もしくは
std::for_each(v.rbegin(),v.rend(),boost::checkd_deleter<Hoge>());
v.clear();
あたりをどうぞ。
2番目か3番目がお勧め(3は要boost)

876 名前:デフォルトの名無しさん [2008/03/31(月) 23:18:15 ]
上のソースで、一つずつ領域解放出来るの??? swapしか出来ないと思ってたけど

877 名前:デフォルトの名無しさん mailto:sage [2008/03/31(月) 23:21:33 ]
解放しようとしているものを取り違えている。
v.empty()がtrueだけどメモリがreserveされてる話とは別。

vector<Hoge*>().swap(v);
てことだろうけど、これだとvの中のHoge*が指す先はリークする。

878 名前:デフォルトの名無しさん [2008/03/31(月) 23:22:22 ]
delete v.back();

'delete' のオペランドは非 const ポインタでなければならない

879 名前:デフォルトの名無しさん mailto:sage [2008/03/31(月) 23:23:14 ]
>>878
vがconstなんだろ。それなら無理だ。

880 名前:デフォルトの名無しさん [2008/03/31(月) 23:23:47 ]
>>877
後ろからサイズを小さくしていくならばresize()という関数あるけど駄目なの?

881 名前:デフォルトの名無しさん [2008/03/31(月) 23:24:36 ]
vector<int> v(10000); だが・・・

882 名前:デフォルトの名無しさん mailto:sage [2008/03/31(月) 23:25:26 ]
>>880
元の質問読んでる?vector<Hoge*>の各要素が指す先をdeleteしつvectorをemptyにしたいって言ってるんだよ。



883 名前:デフォルトの名無しさん [2008/03/31(月) 23:31:04 ]
そういうことね

884 名前:デフォルトの名無しさん mailto:sage [2008/03/31(月) 23:39:18 ]
>>875
3番目はboost無くても数行で実装できるよね
www.google.com/search?q=for_each+delete

885 名前:デフォルトの名無しさん mailto:sage [2008/03/31(月) 23:48:18 ]
>>875
うん。今回だとdeleteを適用する関数オブジェクト作るだけだしね。

886 名前:デフォルトの名無しさん [2008/04/01(火) 16:21:58 ]
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6189.txt
[3] 環境
 [3.1] OS:windowsXP
 [3.2] コンパイラ名とバージョン: visual studio 2003
 [3.3] 言語:C言語
[4] 期限:2008年4月2日午前8時
[5] その他の制限:なし

よろしくお願いします






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<299KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef