C/C++の宿題片付けま ..
[2ch|▼Menu]
655:デフォルトの名無しさん
09/11/09 01:41:35
>>651
()を適当に埋めて整数の桁に現れる数を数え上げる関数
count(int n)を作ってこれを使って完成させな

int count( int n ){
int i,c[10],d;
for(i=0;i<(?);i++) c[i]=( );
while(?){ c[(?)]++;n/=10; }
for(i=d=0;i<10;i++) d+=(c[i]==0)?(?):(?);
return (?);
}

656:656
09/11/09 01:42:47
#include <stdio.h>
int main(void){
  int i, j, ii, count, digit[10];
  for(i=1000; i<10000; i++){ // sqrt(1000) = 31.6227
    for(j=0;j<10;j++) digit[j]=0;
    ii = i*i;
    for(j=0;j<8;j++) { // 10,000*10,000 = 100,000,000
      digit[ii%10] = 1;
      ii /= 10;
      if(ii==0) break;
    }
    count = 0;
    for(j=0;j<10;j++)
      if(digit[j] == 1) count++;
    if(count==2) {//printf("-->");
      printf("%d %d %d\n", i, count, i*i);
    }
  }
}

657:デフォルトの名無しさん
09/11/09 03:47:58
[1] 授業単元: C言語のポインタ、配列、ファイルの問題です
[2] 問題文(含コード&リンク):
n件のデータを配列に入力しその平均値を出力するプログラムをつくり、
実行部において添字演算子は用いず、*(p+i)と*p++それぞれを用いるパターンを作る
ただし、入出力処理をファイル処理に、入出力ファイル名はコマンドラインで指定する
[3] 環境
 [3.1] OS: とくになし
 [3.2] コンパイラ名とバージョン: とくになし
[3.3] 言語: c言語
[4] 期限: 2009/11/09日中
[5] その他の制限:途中まで出来ている部分を使ってください。
#include<stdio.h>
int main(void)
{
int A[100];
int a,b,i,n,*p;

*p=A[0];
scanf("%d",&n);
for(i=0;i<n;i++){
scanf("%d",*(p+i));
}
for(i=0;i<n;i++){
b+=*(p+i);
}
a=b/n;
printf("%d",a);
return(0);
}
です。よろしくお願いします。

658:デフォルトの名無しさん
09/11/09 05:50:29
>>655-656
ありがとうございます.コンパイルしてみます

659:デフォルトの名無しさん
09/11/09 09:20:08
>>651
#include <stdio.h>

int check(int n)
{
int i, a[2], temp, c = 0;

while(n) {
temp = n % 10;
for(i=0; i<c; i++) if(a[i]==temp) break;
if(i==2) return 0;
if(i == c) a[c++] = temp;
label:
n /= 10;
}
return 1;
}

int main(void)
{
int i;

for(i=1000; i<10000; i++) if(check(i*i)) printf("%d\n", i);

return 0;
}

660:デフォルトの名無しさん
09/11/09 09:21:02
ゴミが残った
label:は消しといて

661:デフォルトの名無しさん
09/11/09 09:29:06
>>659
バグってるぞ

実行結果

1000
2000
3000
3114


662:デフォルトの名無しさん
09/11/09 09:33:09
お前は何を言ってるんだ?

663:デフォルトの名無しさん
09/11/09 09:36:33
>>652>>656も答えはその4つなんだが、どこがバグってるんだろ
表示するのは4桁の整数の方だし

664:デフォルトの名無しさん
09/11/09 10:34:07
正の整数 nの2乗の数に、「10の倍数でなく、
10進数表記で、3種類以上の数字が現れる、
もしくは1種類の数字しか現れない」という
ことが無いものをすべて挙げなさい

665:デフォルトの名無しさん
09/11/09 10:35:27
正の整数 nで、その2乗が10の倍数でなく、
「「10進数表記で、3種類以上の数字が現れる、
もしくは1種類の数字しか現れない」という
ことが無いもの」をすべて挙げなさい

666:656
09/11/09 10:37:30
4桁までの数。
int main(void)
{
  int i;
  for(i=1; i<10000; i++) if(check(i*i)) printf("%04d\n", i);
  return 0;
}

667:デフォルトの名無しさん
09/11/09 10:52:35
で、勝手に問題書き換えてバグがないものをバグって言い張るつもり?

668:デフォルトの名無しさん
09/11/09 10:56:46
>>665>>661とは無関係
>>652への追加課題

669:デフォルトの名無しさん
09/11/09 10:59:29
問題出したきゃ、大学でも専門学校でもどこでもいいから講師になってからにしろよw

670:656
09/11/09 11:01:05
書き換えてないぞ。柿加えた。10の倍数を含まない。
int main(void) {
  int i;
  for(i=1; i<10000; i++) if(i%10) if(check(i*i)) printf("%4d %d\n", i, i*i);
  return 0;
}

671:デフォルトの名無しさん
09/11/09 11:02:37
恥ずかしい突込みをした661が話を逸らそうとして必死にしか見えないんだがw

672:656
09/11/09 11:07:19
1回だけのは除く。
for(i=4; ......


673:デフォルトの名無しさん
09/11/09 11:08:21
講師は問題を解いて説明する
生徒はそれを写す
んだろ?

674:デフォルトの名無しさん
09/11/09 11:12:54
656なら他人の関数使ってないで、自分が書いたやり方でやれよw

675:656
09/11/09 11:34:26
>>670 で、数字が1種類でも動くようにcheck()を改良せよ。

676:デフォルトの名無しさん
09/11/09 11:39:58
>>661
で、どこがバグってるの?

677:デフォルトの名無しさん
09/11/09 11:40:22
>>656
出来ないの?

678:デフォルトの名無しさん
09/11/09 11:50:08
>>675
お前はなんで自分にレスしてんだよw

679:613
09/11/09 14:32:26
関数ポインタをconstで宣言したいんですがー

const int(*func)(void*) = ...
のように宣言すると、funcの挙動としてconstが定義されて(戻り値がconst int型となり)
変数func自体はconst化されず、プログラム中でポインタの書き換えが行えてしまいます。

関数の挙動としては戻り値にconstをつけず、ポインタ自体にconstを当てはめたいのですがー
どなたかいい手法をご存知ないでしょうか?

680:デフォルトの名無しさん
09/11/09 14:35:30
多分 int(* const func)(void*)

681:679
09/11/09 14:42:37
>>680
早レスありがとうございます。が、だめでしたora

682:デフォルトの名無しさん
09/11/09 14:42:39
やってみた

#include <stdio.h>

int func(void)
{
return 1;
}

int main(void)
{
int (* const fun)(void) = func;

printf("%d\n", fun());

return 0;
}

出力結果
1

683:デフォルトの名無しさん
09/11/09 14:44:50
ちなみに

#include <stdio.h>

int func(void)
{
return 1;
}

int func2(void)
{
return 2;
}

int main(void)
{
int (* const fun)(void) = func;

printf("%d\n", fun());

fun = func2;

return 0;
}

const_func2.c: In function 'main':
const_func2.c:19: error: assignment of read-only variable 'fun'

684:デフォルトの名無しさん
09/11/09 14:44:59
そもそも なぜそのようなことをするのか
という疑問のほうが...

685:679
09/11/09 14:47:55
>>680
早レスありがとうございます。が、だめでしたora

686:679
09/11/09 14:49:30
>>680
と思ったら右辺のほうも書き換えないといけないんですね。
両方(*const func)で解決致しました。ありがとうございます。

687:デフォルトの名無しさん
09/11/09 14:49:56
コンパイラ何?ってかそろそろスレ違いなんで

【初心者歓迎】C/C++室 Ver.69【環境依存OK】
スレリンク(tech板)

ここあたりに行こうぜ

688:デフォルトの名無しさん
09/11/09 15:19:21
funcに一度値を設定したら書き換えることが出来ないんだろ?
どういう状況でfuncという変数を使うのか知ってみたい

689:デフォルトの名無しさん
09/11/09 15:27:38
int Stage1( void );
int Stage2( void );
int Stage3( void );

int (* const func[])(void) = { Stage1, Stage2, Stage3 };

{
 while(1) func[now_stage];
}

690:デフォルトの名無しさん
09/11/09 15:45:19
趣味の問題ね()

691:656
09/11/09 16:37:19
>>659 待った?
int check(int n) {
  int i, a[2], temp, c = 0;

  while(n) {
    temp = n % 10;
    for(i = 0; i < c; i++)
      if(a[i] == temp) break;
    if(i == 2) return 0; // check NG
    if(i == c) a[c++] = temp;
    n /= 10;
  }
  if(c == 2) return 1; // check OK
  return 0;
}

692:デフォルトの名無しさん
09/11/09 16:45:16
659は関係ないだろw

693:デフォルトの名無しさん
09/11/09 16:49:14
おいおい、>>675の名前欄は656、つまりお前自身じゃねーかよw
自演で何やってんだよw

694:デフォルトの名無しさん
09/11/09 18:05:46
[1] 授業単元:画像処理
[2] 問題文(含コード&リンク):
  ブレゼンハムのアルゴリズムを用いて、ウインドウ内に線分を描画するプログラムを作成しなさい。
  動作の仕様は2通りの中から選びなさい。(どちらでもよい)

  仕様1(マウスの左ボタンと右ボタンを使用する。候補線を表示はなし。)
  マウスの左ボタンクリック   線分の始点座標の指定
  マウスの右ボタンクリック   線分の終点座標の指定及び線分の描画

  仕様2(マウスの左ボタンだけで操作する。候補線を表示する。)
  マウスの左ボタンクリック   線分の始点座標の指定、及び線分の描画開始
  マウスの移動         始点から線分を絶えず候補として描画。(古い線分は消す)
  マウスの左ボタンクリック   線分の終点座標の確定。線分を描画。

ただし、ライブラリの点を描画するAPI関数を使って線分を引くこと。直線を引くAPI関数を使ってはならない。

[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ: Microsoft Visual C++ 2008 Express Edition
 [3.3] 言語: C++
[4] 期限: 09年11月11日(水)
[5] その他の制限: 特になし

仕様は1と2どちらでもOKなので、簡単なほうで構いません。
よろしくお願いします。


695:デフォルトの名無しさん
09/11/09 18:36:14
[1] 授業単元: C言語
[2] 問題文(含コード&リンク):不定方程式が解を持つか判断して、持つ場合には解を求めるプログラムを作れ
[3] 環境
 [3.1] OS: Windows vista
 [3.2] コンパイラ名とバージョン: Visual C++ 2008
 [3.3] 言語:C++
[4] 期限: 明日まで
[5] その他の制限: 特になし

もしどなたかやっていただけるならばお願いしますm(_)m




696:デフォルトの名無しさん
09/11/09 19:30:06
[1] 授業単元: C言語
[2] 問題文(含コード&リンク): URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
 [3.1] OS: Windows XP
 [3.2] コンパイラ名とバージョン: VC2003
 [3.3] 言語: C
[4] 期限: 明日中
[5] その他の制限: 特になし

697:デフォルトの名無しさん
09/11/09 19:58:10
>>654
ありがとうございます!
シミュレーション内容について詳しく書いたファイルを↓に上げました。
よければよろしくお願いします。

[1] 授業単元:
アルゴリズムとプログラミング
[2] 問題文(含コード&リンク):
URLリンク(kansai2channeler.hp.infoseek.co.jp)
プログラムに使用するデータファイル↓
URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
 [3.1] OS: (Windows/Linux/等々)
Linux
 [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
gcc
 [3.3] 言語: (C/C++/どちらでも可 のいずれか)
C
[4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか)
11月17日
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
特にありません

698:デフォルトの名無しさん
09/11/09 19:59:12
>>696
buf[4] = '\0';

699:デフォルトの名無しさん
09/11/09 20:37:11
#include <iostream>
using namespace std;

int main() {
int a[100],b=-9999;
int i=0,j;

do {
cout << "整数値を入力してください\n";
cin >> a[i];
b += a[i];
i++;
}while( a[i-1] != 9999);

cout << b << '\n';

for(j=0;j<i-1;j=j+1)
cout << a[j] * 3 << '\n';

return 0;
}

このプログラムってループを抜ける条件は9999と入れた時だけですか?

700:デフォルトの名無しさん
09/11/09 21:02:19
>>699
いえ、他にも、100回を超えても何度も何度も操作を続けて
書き込み禁止のメモリに到達したときにも抜けます(異常終了という形で)。

701:デフォルトの名無しさん
09/11/09 21:27:03
>>694
仕様2で
URLリンク(codepad.org)

702:デフォルトの名無しさん
09/11/09 21:29:26
>>700
ありがとうございます

703:604
09/11/09 21:37:51
国語と数学の総合的な平均点も出力する
っていう言葉の意味が分からないんですが、これは、合計を5で割ればいいんですかね?
10で割ればいいんですかね?

704:デフォルトの名無しさん
09/11/09 21:41:36
国語の合計と数学の合計の合計を10で割るのが一番正確だが
国語の平均と数学の平均の合計を2で割ってもまぁ良い

705:デフォルトの名無しさん
09/11/09 21:44:31
[1] 授業単元:データ構造とアルゴリズム設計
[2] 問題文(含コード&リンク):
入力された小文字のアルファベットを,リストを用いて順次格納する.
’−’が入力された時に文字の入力を終了し,それまでに格納された全ての文字を表示するプログラムを作成
せよ.
ただし,リストに格納する際,リストの最後に追加するようにせよ.
例(a, b, c, - と順に入力したときa,b,cと出力される)
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限:特に無し
[5] その他の制限:双方向リストは使わない。
ヘッダは#include <stdio.h>以外は使わない

706:604
09/11/09 21:45:16
>>704
つまり、これは総合的平均っていうのは100を越すことはないという事ですか?


707:デフォルトの名無しさん
09/11/09 23:07:35
>705
制限付きで面白そうなのでやってみようかな

708:デフォルトの名無しさん
09/11/09 23:22:25
>>706
そういうことになるな。

709:デフォルトの名無しさん
09/11/09 23:24:36
>>708
ありがとうございました

710:デフォルトの名無しさん
09/11/09 23:35:40
10進数を2進数に変換するプログラムを 順番通りに表示できるようにするプログラムを配列を使って作るんですが

#include <iostream>
using namespace std;
int main() {
int i,n,bin[32];

cout << "10進数:";
cin >> n;
cout << "2進数:";
for(i=0; i<32; i++) {
bin[i] = n & 1;
n >>= 1;
}
for(i=31; i>=0; i--)
cout << bin[i];
return 0;
}
結局これは、0がいっぱい出てくるから、ダメですかね?
それとも負の数も考慮に入れたから、こういう事になったんですか?


最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

4796日前に更新/214 KB
担当:undef