トップページ⇒tech
1005コメント347KB

あなたの宿題、お姉さんが答えます

■ このスレッドは過去ログ倉庫に格納されています
0001お姉さん NGNG
プログラミングの宿題で行き詰まったら私が相談に乗りましょう。
ただし、お姉さんを5分以上考え込ませる難解なものは受け付けません。
初心者のみお姉さんは歓迎します。
0002名無しさん@お腹いっぱい。 NGNG
ハァハァ… (*´Д`)
0003名無しさん@お腹いっぱい。 NGNG
初心者です、教えてください。
今日のプログラミングの課題で「おまんこをプログラミングせよ」
というのがありました。しかし僕は厨房なのでおまんこを見たこと
もありません。おまんこを見せてくれませんか?
また発展問題として「セクースをプログラミングせよ」というのも
出ました。発展問題を解くと成績が上がるのでぜひ協力してもらい
たいのですが。セクースの相手になってくれますか?
0004名無しさん@お腹いっぱい。 NGNG
>>3 ええ、いいわよ♥
http://www.sikosiko.com/
0005名無しさん@お腹いっぱい。 NGNG
>>4 ドメイン、いやすぎ (;´Д`)
0006名無しさん@お腹いっぱい。 NGNG
内容もすげー
0007名無しさん@お腹いっぱい。 NGNG
(゚Д゚)!!!!!!! http://www.sikosiko.com/image/oman.jpg
0008名無しさん@お腹いっぱい。 NGNG
ヨガー
0009名無しさん@お腹いっぱい。 NGNG
ブラスト
0010>7 NGNG
すげー
0011名無しさん@お腹いっぱい。 NGNG
32ビットアプリ32ビットOSと
16びっと以下同じ
64ビット
ってどうちがうんですか?
0012名無しさん@お腹いっぱい。 NGNG
ビットの数が>>11
0013名無しさん@お腹いっぱい。 NGNG
名前が>>11
0014名無しさん@お腹いっぱい。 NGNG
アドレス空間が>>11
0015名無しさん@お腹いっぱい。 NGNG
全角と半角が>>11
0016お姉さん NGNG
>11
知りません。ごめんね。
0017名無しさん@お腹いっぱい。 NGNG
サポートしてる命令の種類が>>11
0018名無しさん@お腹いっぱい。 NGNG
ハノイの塔ってどうやってとくんですか?
0019名無しさん@お腹いっぱい。 NGNG
マトリクス並みのAIの作り方教えてください。
0020名無しさん@お腹いっぱい。 NGNG
マジレス希望です。
C言語の関数に"strncpy"ってありますが、
この関数を自分で作れという問題がでました。
教えてください。
0021名無しさん@お腹いっぱい。 NGNG
>>20
ネタだろ?
0022名無しさん@お腹いっぱい。 NGNG
>>20
char* strncpy(char* dest , char* src , LONG length)
{
   int i;

   for(i=0 ; i<length ; i++) dest[i]=src[i];
   return dest;
}

char* strncpy(char* dest , char* src , LONG length)
{
   memcpy(dest , src , length);
   return dest;
}
0023名無しさん@お腹いっぱい。 NGNG
char* strncpy(char* d,char* s,int c)
{
for(;c!=0 && *s!='\0';c--) *d++=*s++;
}

もっと短くならんかなぁ...
0024名無しさん@お腹いっぱい。 NGNG
char* いらねぇ void(;_;
0025お姉さん NGNG
みんな、協力ありがと!
20のような初心者歓迎です。
0026お姉さん NGNG
>18
ネット上にソースのってるでしょ?
自分で探そう。見つからなかったら
また来てね
0027お姉さん NGNG
>19
AIについてはlispを少し知ってるくらいなので
知りません。ごめんね。
0028名無しさん@お腹いっぱい。 NGNG
ヤクニタタネー
0029名無しさん@お腹いっぱい。 NGNG
>27 ぴか虫なみの低脳。
0030名無しさん@お腹いっぱい。 NGNG
同意>28&29
0031名無しさん@お腹いっぱい。 NGNG
lisp も知らん。
0032Visual 名無しさん NGNG
char* strncpy(char* d,char* s,int c){
while( (c--) && (*d++=*s++) );
}
0033名無しさん@お腹いっぱい。 NGNG
char *strncpy(char * dst, const char * src, size_t count)
{
 char *start = dst;

 while (count && (*dst++ = *src++))
  count--;

 if (count)
  while (--count)
   *dst++ = '\0';

 return(start);
}
003418 NGNG
みつかんないですー。
0035お姉さん NGNG
>18
yahoo.comでhanoi.cで検索してください。

>31
LISP知らないなら私の勝ちじゃん。
0036名無しさん@お腹いっぱい。 NGNG
4人も書いていながら正しいのは33だけってのもすげえな。
もっとも33はVC++のcrtのソースあたりからの抜粋に見えるが。

以下はFreeBSDのSTRCPY(3)からの抜粋

The strncpy() copies not more than len characters into dst, appending
`\0' characters if src is less than len characters long, and not termi-
nating dst if src is more than len characters long.
0037お姉さん NGNG
なんで32と33はchar型なのかなあ?
voidでいいんじゃない?
003832 NGNG
いや、strncpyなんだからcharの方が自然でしょ。
0039名無しさん@お腹いっぱい。 NGNG
残ったバイトを0フィルする必要ってあるの?
004020 NGNG
みなさん真面目に答えてくれてありがとうです。
本当にネタではないです。

みなさんはプログラムを簡単にされてますが、

strncpyはn個の文字だけ複写します。文字列s2がnより短い場合は、
s1の後ろをn文字までNULLで埋めます。s2の長さがn以上であればNULLで終了する
結果は出ません。s1を返します。

という条件で

char *strncpy(char *,char *,int n);
main()
{ char a[512];

strncpy(a,"itteyosi",4);
printf("%s",a);
}
char *strncpy(char *s1,char *s2,int n)
{ int x;
char *p;
p = s1;


}

肝心な関数の部分が分かりません。
2ちゃんの頭脳よHELP!!!
0041名無しさん@お腹いっぱい。 NGNG
こんだけたくさんヒントやサンプルが出てるのにまだわからないの?
キミはぜんぜんやる気ないのかな?
0042名無しさん@お腹いっぱい。 NGNG
>>37
「voidでいい」もなにも、strncpyは「ANSI/ISO C標準ライブラリ関数」
なんだよ。

>>40
目が悪いのか?
それと、strncpyの仕様を良くみれば分かることだが、通常は
strncpyの後で、文字列をNULターミネートしてやる必要がある。
strncpy(a, "itteyosi", 4);
の後では、a[0]からa[3]には'i', 't', 't', 'e'が入り、a[4]以降は全く
変更されない。この場合はaは自動変数だから、この部分の内容は不定。
従って、これを次の行でprintfに渡した結果も同様に不定だ。
0043名無しさん@お腹いっぱい。 NGNG
VC++です
読み込んだファイルのバイナリデータをメッセージボックスかなにかで表示する
ようはバイナリエディタの表示だけできるようなものが作りたいのですが
アドバイスお願いします。できればサンプルのようなモノがあれば紹介してほしいです。
ファイルを読み込む部分まではできました。表示する部分とユウのが見当もつかない状態です。
0044名無しさん@お腹いっぱい。 NGNG
ファイル読み出しのような処理ができるのに
バイナリ⇒16進文字の変換ができないのか?
近頃の初心者はホント謎だな‥
sprintfのヘルプ読め!
0045名無しさん@お腹いっぱい。 NGNG
>43
コンソールアプリにするなら44と同意見。
ウィンドウに表示したいならとりあえずMFCかSDKか教えてくれ。
004643 NGNG
バイナリ⇒16進はできます。sprintfのヘルプも何回も見ました。
MFCです。何か部分部分はわかるのだけれどいざ組んでみると
つまずいてしまうのです。
具体例をあげてもらえると嬉しいです。
0047名無しさん@お腹いっぱい。 NGNG
16進数に変換できないんじゃなくて
ウィンドウに表示する事が出来ないのネ・・


質問は状況をわかりやすく!
0048名無しさん@お腹いっぱい。 NGNG
bzのソースでも見れば?
http://www.zob.ne.jp/~c.mos/soft/bz.html
0049名無しさん@お腹いっぱい。 NGNG
1.バイナリ⇒16進とsprintfを使って表示したい
  1行分の内容をひとつの文字列に作れますか?
3.文字列を、画面(ウィンドウ)に表示できますか?
2.その方法を繰り返しファイル全体に適用できますか?

というふうにステップごとに解決しないと
自分がどこでつまづいてるのかがわからないの
ではないかな?
0050名無しさん@お腹いっぱい。 NGNG
Win32で、ある特定のプロセスだけGetVersionExの
値を本来のOSバージョンとは違う値を返すようにしたいんですができますか?
ちなみに、その対象となるプロセスのソースコードはありません。

たとえば
osver 4.0 foobar.exe
みたいにして、foobar.exeで呼ばれる GetVersionExとGetVersionのmajorとminorを
それぞれ、4と0に指定したいってことなんだけど…。

kernel32.dllにはいっちゃってるしやっぱり無理?
0051名無しさん@お腹いっぱい。 NGNG
バイブとハイブって親戚かなにかですか?
教えてください。
0052名無しさん@お腹いっぱい。 NGNG
バブーも合わせて三兄弟です。
0053MSDNでdebugで調べてみればーーー NGNG
簡単に・・・
CStirng TempStr ;
TempStr.Format("変数A:%08X\n変数B:%08X",a,b) ;
AfxMessageBox(TempStr) ;
0054名無しさん@お腹いっぱい。 NGNG
ハブも合わせてななかんおうです
0055お姉さん NGNG
>40
これで出来ると思うけど。。解決しちゃってたらごめんね。#include<stdio.h>

void strncpy(char *,char *,int n);
main()
{ char a[512];

strncpy(a,"itteyosi",4);
printf("%s",a);
}
void strncpy(char *s1,char *s2,int n)
{
int i;
for(i=0;i<n;i++)
s1[i]= s2[i];
s1[i]='\0';

}

0056名無しさん@お腹いっぱい。 NGNG
>55のお姉さん
ネタだろ?頼むから、ネタだといってくれ。お願いだ〜。
0057名無しさん@お腹いっぱい。 NGNG
これが本物の実装に最も近いのでは?

void strncpy(char *s1, const char *s2, const size_t n)
{
size_t count = n;
while (n--)
*s1++ = *s2++;
}
0058名無しさん@お腹いっぱい。 NGNG
違う違う。こうだ。

char *strncpy(char *s1, const char *s2, const size_t n)
{
char *r = s1;
size_t count = n;
while (count--) {
if (*s2) {
*s1++ = *s2++;
} else {
*s1++ = '\0';
}
}
return r;
}
0059ブチ NGNG
>>40,55
42 で言われてますが、変数 a は512バイトのメモリを確保はしたものの内容が不定です。
文字列としてデータを扱うためには文字列の最後に NULL ('\0')を
置くことでプログラムはそこが最後だと認識します。
内容が空の場合は 先頭が NULL なわけですね。

それを踏まえると a は配列の先頭にまず NULL を置くことが義務になります。
そうしないとNULL が 512 バイトの中になければ
実装されている strncpy であっても確保していないメモリ領域への上書き(メモリ破壊ももありえます。
0060揚げ足だが NGNG
一般的には、'\0'をNULLと呼ぶのは誤り
0061名無しさん@お腹いっぱい。 NGNG
本当はこうだったりして。

char *strncpy(char *s1, const char *s2, size_t n)
{
memcpy(s1, s2, n);
return s1;
}
0062お姉さん NGNG
>56
ネタじゃないよ。マジだよ。

0063お姉さん NGNG
なにがいけないのよう。
0064名無しさん@お腹いっぱい NGNG
>>63
itteyosi の部分じゃないの?
プログラムはあってんじゃない?
0065お姉さん NGNG
mainの部分は私が書いたんじゃないもん。
0066名無しさん@お腹いっぱい。 NGNG
>>65 お姉さん、可愛いヽ(*´ー`*)ノ
0067いちろうくん NGNG
>>55
おねいさん、ちがうよ。
n=1で呼ばれたときに、S1に何文字書き込まれるか考えてみ。
0068名無しさん@お腹いっぱい。 NGNG
strcpy
を定義して、ヘッダとして呼び出すのにはどうしたらいいんでしょうか?
つまり、他のファイルからの(オリジナル)関数呼び出し参照方法
はどうすればいいのでしょう?

hoge.c
aaa.h <これ?
でhoge.cの中身のヘッダに
#include<aaa.h>
とかいて、呼び出せばいいという認識でよろしいいのでしょうか?


0069お姉さん NGNG
>>68
#include"aaa.h"です。

>>いちろうくん
一文字プラス\0で二文字。だめ?
0070お姉さん NGNG
ところで質問した人は解決したの?
どの案を採用したの?
007120=40 NGNG
みなさんありがとうございまます。

2ちゃんでまで説教されるとは思わなかったですが、
41さん42さんに言われた通り、ちょっと教えて君(死語)になってました。
申し訳ない・・・。

55さん,57さん,58さん方のソースは自分でも出来ました。
自分が出したいプログラムは基礎の丁寧なものなので、
皆さんにとってはバカらしいものかもしれませんが、

”文字列s2がnより短い場合は、 s1の後ろをn文字までNULLで埋めます。
s2の長さがn以上であればNULLで終了する 結果は出ません。”

の部分が解決していません。

プログラムは人それぞれなので、一概に正解とかはないと思いますが、
もう少し自分で考えてみます。
大変参考になりました。
時間ある人がいたら、別ソースも見せてください。

0072さらしあげ NGNG
>お姉さん@ぴか虫レヴェル

>>55
void strncpy(char *s1,char *s2,int n)
{
int i;
for(i=0;i<n;i++)
s1[i]= s2[i];

/* おいおいせっかくコピーしたものを '\0' で上書きかい */
s1[i]='\0';
}

/* n = 3 のとき、 s1[0]=='\0' , s1[1]=='\0' , s1[2]=='\0' */
0073お姉さん NGNG
>>72
n=3のとき
for(i=0;<n;i++)
s1[i]=s2[i];
このループを抜ける時点でs1[0]=i s1[1]=t s1[2]=t
s[i]='\0'
ここでiは一インクリメントされているので4,
s[4]='\0'
結果s1=itt\0
何がいけないのよ。
s[i]='\0'の部分はループに入ってないかんね?
0074お姉さん NGNG
間違った、iは一つインクリメントされてるので3.
s[3]=\0のまちがいね。
007572>お姉さま NGNG
失礼。インデントが無いんで見間違えた。自虐あげ。
0076お姉さん NGNG
>>75
ダサダサ・・・
0077あなたのうしろに名無しさんが・・・ NGNG
>お姉さん@ぴか虫レヴェル>>>>>>72>みじんこ

0078名無しさん@お腹いっぱい。 NGNG
ここまできて33以外正解がないとは…。なんだかなぁ。
33以上の簡潔さには、なかなかなりようがないからしょうがないが。
0079お姉さん NGNG
>>77
あはは。
私の前に何が来るのかが問題だけど。
>>78
出されたものほとんどが動くようですが、質問者のいう条件をすべて満たしてないよう
です。
0080名無しさん@お腹いっぱい。 NGNG
>お姉さん
あなたのもね。

これじゃ駄目?

#include<stdio.h>
void strncpy(char *s1,char *s2,int n)
{
int i;
for(i=0;i<n,s2[i]!='\0';i++){
s1[i]=s2[i];
}
for(;i<n;i++){
s1[i]='\0';
}
return;
}

int main(void){
int i;
char s1[] = "abcdef";
char s2[] = "xyz";

strncpy(s1,s2,5);
for(i=0;i<7;i++){
printf("%d : %c : %d\n",i,s1[i],s1[i]);
}
return 0;
}
0081名無しさん@お腹いっぱい。 NGNG
まんこ見せてください
0082お姉さん NGNG
>>80
これならばnがs2よりも大きかった場合に対応しますね。
あと空白の部分を\0で埋めますね。
これで質問者の意図にはあってるんでしょうか。
0083名無しさん@お腹いっぱい。 NGNG
>>81 ええ、いいわよ♥
http://www.omanko.com/
0084名無しさん@お腹いっぱい。 NGNG
>>71
「NULLで終了する 結果は出ません」←これ意味不明だが…

char *strncpy ( char *s1, char *s2, size_t n )
{
char *r = s1;
while( n-- && (*s1++ = ((*s2)?(*s2++):('\0'))) );
return r;
}
008536=42 NGNG
>>78
予想通りだが、33はVC++のstrncpy実装そのものだった。
しいて言えば、手書きのコードならば0埋めにはmemsetを使うのが普通だろう。

>>82
良く見ろ。戻り値がvoidだ。仮引数もANSI C的には正しくないがな。
それにしても、33という正解が既に出ていながらなぜここまで引っ張る?
008684訂正 NGNG
char *strncpy ( char *s1, char *s2, size_t n )
{
char *r = s1;
while( n-- ) *s1++ = ((*s2)?(*s2++):('\0')));
return r;
}
0087お姉さん NGNG
>>85
何で戻り値がvoidじゃいけないのか教えてください。

多分他に質問が無いからじゃないですか・・・?<なぜ引っ張る
0088名無しさん@お腹いっぱい。 NGNG
>>85(=36=42)
あんたこそ要求されている仕様を良く見てくれ。
33のプログラムは、string.hのstrncpyとは働きが同じだけど、
いま要求されてる仕様(40や71)は満たしてない。
仕様変更には迅速に対応しませう。

ついでにいえば、宿題の答としては返り値のchar *やら
引数のconstやらsize_tやら使わない方が
いかにも自分で考えて作ったみたいでいいでしょ?(<中途半端に親切)

>>86
括弧多いよ。
008980 NGNG
ゴメン、89=80ね。
009080 NGNG
又間違った。
80=88=89=90です。
欝だ氏能。
0091名無しさん@お腹いっぱい。 NGNG
import java.awt.*;
import java.awt.event.*;
import java.applet.Applet;

class CardPanel extends Panel {
ActionListener listener;

Panel create(LayoutManager layout) {
Button b = null;
Panel p = new Panel();

p.setLayout(layout);

b = new Button("one");
b.addActionListener(listener);
p.add("North", b);

b = new Button("two");
b.addActionListener(listener);
p.add("West", b);

b = new Button("three");
b.addActionListener(listener);
p.add("South", b);

b = new Button("four");
b.addActionListener(listener);
p.add("East", b);

b = new Button("five");
b.addActionListener(listener);
p.add("Center", b);

b = new Button("six");
b.addActionListener(listener);
p.add("Center", b);

return p;
}

CardPanel(ActionListener actionListener) {
listener = actionListener;
setLayout(new CardLayout());
add("one", create(new FlowLayout()));
add("two", create(new BorderLayout()));
add("three", create(new GridLayout(2, 2)));
add("four", create(new BorderLayout(10, 10)));
add("five", create(new FlowLayout(FlowLayout.LEFT, 10, 10)));
add("six", create(new GridLayout(2, 2, 10, 10)));
}

public Dimension getPreferredSize() {
return new Dimension(200, 100);
}
}

public class CardTest extends Applet
implements ActionListener,
ItemListener {
CardPanel cards;

public CardTest() {
setLayout(new BorderLayout());
add("Center", cards = new CardPanel(this));
Panel p = new Panel();
p.setLayout(new FlowLayout());
add("South", p);

Button b = new Button("first");
b.addActionListener(this);
p.add(b);

b = new Button("next");
b.addActionListener(this);
p.add(b);

b = new Button("previous");
b.addActionListener(this);
p.add(b);

b = new Button("last");
b.addActionListener(this);
p.add(b);

Choice c = new Choice();
c.addItem("one");
c.addItem("two");
c.addItem("three");
c.addItem("four");
c.addItem("five");
c.addItem("six");
c.addItemListener(this);
p.add(c);
}

public void itemStateChanged(ItemEvent e) {
((CardLayout)cards.getLayout()).show(cards,
(String)(e.getItem()));
}

public void actionPerformed(ActionEvent e) {
String arg = e.getActionCommand();

if ("first".equals(arg)) {
((CardLayout)cards.getLayout()).first(cards);
} else if ("next".equals(arg)) {
((CardLayout)cards.getLayout()).next(cards);
} else if ("previous".equals(arg)) {
((CardLayout)cards.getLayout()).previous(cards);
} else if ("last".equals(arg)) {
((CardLayout)cards.getLayout()).last(cards);
} else {
((CardLayout)cards.getLayout()).show(cards,(String)arg);
}
}

public static void main(String args[]) {
Frame f = new Frame("CardTest");
CardTest cardTest = new CardTest();
cardTest.init();
cardTest.start();

f.add("Center", cardTest);
f.setSize(300, 300);
f.show();
}

public String getAppletInfo() {
return "Demonstrates the different types of layout managers.";
}
}
009285 NGNG
>> 88
で?

> strncpyはn個の文字だけ複写します。文字列s2がnより短い場合は、
> s1の後ろをn文字までNULLで埋めます。s2の長さがn以上であればNULLで終了する
> 結果は出ません。s1を返します。

「NULLで終了する結果は出ません」が意味不明だが、これは善意に解釈して
「NULターミネートされません」という意味だろう。
だとすればこれはANSI/ISO標準のstrncpyの仕様そのものだ。

最後の「s1を返します」をあんたはちゃんと見たのか?
0093名無しさん@お腹いっぱい。 NGNG
なんか車輪の再発明(改悪版)を一生懸命やってるやつがいるなぁ。
仕様の理解のために、自分で実装してみるのは、学習過程で有効なことだが、
未熟なくせに偉そうにしてる、脳味噌空っぽ君が一人二人まざってるよ。
こういう害虫が、世の中悪くするんだよねえ。
009420=40 NGNG
すいません。
>「NULLで終了する結果は出ません」
というのは、文字列の最後にNULLを入れないとゆう意味です。
0095お姉さん NGNG
あたらしい質問待ち。
0096あなたのうしろに名無しさんが・・・ NGNG
あたらしいひつもん…
尾根遺産はおいくつですか。
彼氏いますか。
0097名無しさん@お腹いっぱい。 NGNG
お姉さん教えてください

SQLを使ってある表中の行をコピーしたいのですが
INSERT INTO 表 VALUES((SELECT * FROM 表 WHERE 列=値));
でできますか?

そもそも行のコピーってSQLでできるんでしょうか?

0098お姉さん NGNG
>>97
なんでいきなりSQL。。(^_^;)
この形式だとSELECT以下の条件を満たす値を含む行を複数行
他の表からコピーできると思います。
行のコピーはSQLのオペレーションの中でも最重要だと思いますが。
0099お姉さん NGNG
最重要ってわけでもないか。訂正。割と大切。
0100お姉さん NGNG
SELECT以下で特定のコラムを指定することもできます。
joinを使って二つ以上の表から値を持ってくることも出来ます。
今日はここまで。
0101おやじ NGNG
>>97
SQLでVALUES() 内に副問い合わせってかけたっけ?
コピーするときってVALUESつかったっけ?
あれれ?
忘れた
■ このスレッドは過去ログ倉庫に格納されています