トップページ⇒tech
1001コメント433KB

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

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2006/10/19(木) 20:39:01
あなたが解けない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] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)

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

【前スレ】
C/C++の宿題を片付けます 74代目
http://pc8.2ch.net/test/read.cgi/tech/1158844912/
【過去スレ一覧】
http://makimo.to/cgi-bin/search/search.cgi?q=C%2B%2B%82%CC%8Fh%91%E8&andor=AND&sf=2&H=&view=table&D=tech&shw=2000
0412デフォルトの名無しさん2006/10/28(土) 11:21:40
そんなレベルの高い回答があったか禿げしく疑問
0413デフォルトの名無しさん2006/10/28(土) 11:25:52
>>411
いろんなプログラムを見たり書いたりしてれば思いつく必要さえなくなるよ

> ただ宿題を頼む側としては、このまま出して大丈夫なのかなぁ?

そこまで真面目な人なら、
ロジックを追って自分なりに書き直してみるのもいいかもね
0414デフォルトの名無しさん2006/10/28(土) 11:35:11
>>410
こうゆうこと?

#include<stdio.h>
#include<stdlib.h>

int main(int argc, char *args[]){
FILE *fp;
int i, c;
if(argc <= 1)return EXIT_FAILURE ;
for(i=1; i<argc; i++){
if((fp = fopen(args[i], "r")) == NULL){
puts("ERROR");
return EXIT_FAILURE;
}
while((c=fgetc(fp)) !=EOF){
putchar(c);
}
fclose(fp);
puts("");
}
return EXIT_SUCCESS;
}
0415デフォルトの名無しさん2006/10/28(土) 11:42:19
>>410
#include<stdio.h>
#include<stdlib.h>
int main(int argc, char *argv[])
{
char cmd[FILENAME_MAX+10];
int i;
for(i=1;i<argc;i++)
{
sprintf(cmd, "type %s", argv[i]);
system(cmd);
}
return 0;
}
0416デフォルトの名無しさん2006/10/28(土) 12:01:48
[1] 授業単元:情報処理概論
[2] 問題文(含コード&リンク):0から99の乱数を使って6×6ビンゴの表を作成しなさい。
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン:BorlandC++
 [3.3] 言語:C++
[4] 期限: 10月30日まで
[5] その他の制限:  
よろしくお願いします。
0417cがわからない学生2006/10/28(土) 12:03:11
[1] 授業単元:情報処理�U
[2] 問題文(含コード&リンク):キーボードから1以上26 以下の整数n を入力し,n 番目のアルファベット(大文字)を画面表示
するプログラムを作成しなさい.例えば,「1」が入力された場合には「A」を,「10」が入力された
場合には「J」を画面に表示する.なお,0 以下,あるいは27 以上の数字が入力された場合に
は再入力できるようにすること.また,if やswitch を用いて26 種類の分岐を作ってはならない.
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名:gcc
 [3.3] 言語:C
[4] 期限:2006年10月31日まで
[5] その他の制限:なし?
0418cがわからない学生2006/10/28(土) 12:04:42
↑↑よろしくお願いしますm(_ _)m
0419デフォルトの名無しさん2006/10/28(土) 12:10:17
>>416
#include<stdio.h>
#include<stdlib.h>
#include<time.h>

#define BINGO_RAND 100

void swap(int *a, int *b){
int temp;

temp=*a;
*a=*b;
*b=temp;
}
int main(void){
int rand_data[BINGO_RAND];
int i, j;

srand(time(NULL));
for(i=0;i<BINGO_RAND;i++)
rand_data[i]=i;
for(i=0;i<BINGO_RAND;i++)
swap(&rand_data[i], &rand_data[rand()%BINGO_RAND]);
for(i=0;i<6;i++){
for(j=0;j<6;j++)
printf(" %2d", rand_data[i*6+j]);
printf("\n");
}
return 0;
}
0420デフォルトの名無しさん2006/10/28(土) 12:13:54
>>417
#include<stdio.h>

int main(void)
{
int n;

while(1)
{
printf("Input value (1-26):");
scanf("%d", &n);
if(n>=1 && n<=26)
break;
}
printf("%c\n", 'A'+(n-1));

return 0;
}
04214192006/10/28(土) 12:15:48
>>416
rand_data[i]=i;
↓
rand_data[i]=i+1;
0422c不明な人2006/10/28(土) 12:19:50
[1] 授業単元:情報処理
[2] 問題文(含コード&リンク):キーボードから,「A」,「B」,「C」,「D」,「K」の5 種類のアルファベットを入力し,それぞれの入
力個数を数えて画面出力するプログラムを作成しなさい.なお,「Z」が入力されるまでキーボ
ード入力を繰り返すこととし,これら6 文字以外の入力はカウントしないようにしておくこと.
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限: 明後日まで
[5] その他の制限: なし
よろしくお願いします。
0423デフォルトの名無しさん2006/10/28(土) 12:20:43
>>421
0-99 の範囲のままでおk
0424デフォルトの名無しさん2006/10/28(土) 12:29:06
>>422
#include<stdio.h>
#include<ctype.h>

int main(void)
{
char check_char[]="ABCDK";
int count[sizeof(check_char)-1]={};
int i;
int moji;

while(1)
{
moji=getchar();
moji=toupper(moji);
if(moji=='Z' || moji==EOF)
break;
for(i=0;check_char[i]!='\0';i++)
if(moji==check_char[i])
count[i]++;
}
for(i=0;check_char[i]!='\0';i++)
{
printf("%c : %d\n", check_char[i], count[i]);
}

return 0;
}
0425c不明な人2006/10/28(土) 12:50:19
ちゃんとできました。ありがとうございました!
0426cがわからない学生2006/10/28(土) 12:51:17
どうもありがとうございました。ちゃんと実行できました。提出に間に合ってよかったです(泣)
0427デフォルトの名無しさん2006/10/28(土) 13:04:17
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):
入力された値(1,2,3,9)と名前により線形リストを作成するものである。
値=1の時、名前を含むノードを線形リストの先頭に追加し、ポインタ sentoがそれを指し示す。
値=2の時、逆に線形リストの最後に追加し、ポインタ saigoがそれを指し示す。
値=3の時、現在の線形リストの状態を先頭から順に表示する。
値=9の時、リスト構築を終了する。
なお各ノードの格納場所として配列workが用意され、最初のノードは名前のみの入力により無条件に作成される。

ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2839.txt
ほとんど出来たんですが、case2 の場合がうまく動いてくれないので
その部分をどう直していいのかが分かりません…
コンパイラは通ってるんですけど、実行結果がうまい事いかないorz
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 2006/10/29 PM02:00
[5] その他の制限: 構造体、ポインタを使用。
0428デフォルトの名無しさん2006/10/28(土) 13:44:18
>>427
work[n].next = &work[n];
は
saigo->next = &work[n];
の誤りだな。
0429デフォルトの名無しさん2006/10/28(土) 13:51:07
>>428
早速ありがとうございます
ちゃんとcase2が正常に動きました
構造体とポインタの部分が難しいです…
0430デフォルトの名無しさん2006/10/28(土) 14:35:24
書き直します。
[2]問題文:実行したファイル名を除いたコマンドライン引数に、複数個指定したすべてのファイルの内容を標準出力に表示するプログラムです。
#include <stdio.h>
int main(int argc, char *argv[]){
int c;
FILE *src;
FILE *dst;
if(argc != 3){
fprintf(stderr, "使い方: %s ファイル名 1 ファイル名 2\n", argv[0]);
fprintf(stderr, "ファイル名 1 をファイル名 2 に copy します。\n");
return 1;
}
src = fopen(argv[1], "r");
if(src == NULL){
perror(argv[1]);
return 1;
}
dst = fopen(argv[2], "w");
if(dst == NULL){
perror(argv[2]);
return 1;
}
while((c = fgetc(src)) != EOF)
fputc(c, dst);
fclose(src);
fclose(dst);
return 0;
}
を参考につくるのですが。
[3]環境
[3.1]OS:Windows XP
[3.2]コンパイラ名とバージョン:gcc
0431デフォルトの名無しさん2006/10/28(土) 14:52:49
>>430
dst = stdin
for(i=1;i<argc;i++) {
src = fopen(argv[i], "r");
if(src == NULL)
continue;
while((c = fgetc(src)) != EOF)
fputc(c, dst);
fclose(src);
}
0432デフォルトの名無しさん2006/10/28(土) 14:53:48
>>431
stdin -> stdout
0433デフォルトの名無しさん2006/10/28(土) 15:04:32
>>431
それをどこに入れたらよいのでしょうか?
0434デフォルトの名無しさん2006/10/28(土) 15:15:35
>>433
♂ -> ♀
キャッ
0435デフォルトの名無しさん2006/10/28(土) 15:21:40
>>433
dst = stdin
↓
dst = stdout
0436デフォルトの名無しさん2006/10/28(土) 15:55:04
>>435
dst = fopen(argv[2], "w");
if(dst == NULL){
perror(argv[2]);
return 1;
を、
dst = stdout
for(i=1;i<argc;i++) {
src = fopen(argv[i], "r");
if(src == NULL)
continue;
while((c = fgetc(src)) != EOF)
fputc(c, dst);
fclose(src);
}
に変えるだけですか?
0437デフォルトの名無しさん2006/10/28(土) 16:02:23
次に来る質問は
「セミコロンがないというエラーが出るんですがどうしたらいいですか?」
だな
04384162006/10/28(土) 16:27:51
出来ました。答えていただいた方
ありがとうございました。
0439デフォルトの名無しさん2006/10/28(土) 17:16:16
んで、ぽまいらはWindowsVistaに乗り換える気があるん?
0440デフォルトの名無しさん2006/10/28(土) 17:45:36
>>439
ない
0441デフォルトの名無しさん2006/10/28(土) 18:42:59
今の彼女から鞍替えするほど魅力はない
0442デフォルトの名無しさん2006/10/28(土) 19:36:24
自分が乗り換える気は無くてもメーカーPCはいやでもVistaが載るだろうね
04433842006/10/28(土) 19:44:38
>>408
ありがとうございます(`・ω・´)
0444デフォルトの名無しさん2006/10/28(土) 19:47:12
[1] 授業単元:システムプログラミング
[2] 問題文(含コード&リンク):
多倍長整数を使うことによって、フィボナッチ数列の100番目までを
正しく計算するプログラムを作成しなさい。
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] borland
 [3.3] C言語
[4] 期限: 本日中
[5] その他の制限: 特に無し。

途中までは問題なかったのですが、
突然原因不明のエラーが出てくるようになってしまいました。
http://www-2ch.net:8080/up/download/1162032169809635.yw2OjQ
コンパイラは何の文句も言ってくれません。
助けてください。お願いします。
0445デフォルトの名無しさん2006/10/28(土) 19:48:51
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):入力された数値の総和を求めるプログラムを作成せよ。
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン: VC++ 6.0
 [3.3] 言語: C++
[4] 期限: 2006年10月30日
[5] その他の制限:まだ習い始めて間もないです。
         変数:総和、入力した数値
         1. 総和を0とする。
         2. 最初の数値を入力する。
         3. 入力した値が-1でない限り以下の処理を繰り返す。
         3.1. 入力した数値を総和に加算する。
         3.2. 次の数値を入力する。
         4. 総和を画面に表示する。
          入力終了は値-1の入力によって検出する。
      と言う方法でやるようにと言われてます。
お願いします。
0446デフォルトの名無しさん2006/10/28(土) 19:58:14
>>444
まずは main 関数内の head_a, head_b, head_t の領域を確保しましょう。
0447デフォルトの名無しさん2006/10/28(土) 20:06:54
>>444
at main ():
struct digitへのポインタだけ作って、実体が宣言されてないんだが。
head_a->next = head_a->prev = head_a;
でコケるぞ。

で、ロジックも何がしたいのか良く分からん。
head_aが二つ前の要素、head_bが一つ前の要素、head_tが現在の要素のように
見えるんだが、add()では全然そのような計算をしていない。
0448デフォルトの名無しさん2006/10/28(土) 20:14:52
>>444
どう途中まで問題ないんだよw
main始まってすぐ落ちてるじゃねーか
0449デフォルトの名無しさん2006/10/28(土) 20:21:55
#include <stdio.h>

int main (void) {
  int sum;  // 総和
  int input;  // 入力した数値

  sum = 0;

  printf ("入力された数の総和を表示します。\n");
  printf ("入力を終了するときは、-1を入力してください。\n");
  while (1) {  // ずっと繰り返す
    scanf ("%d", &input);  // inputに値を入力
    if (input == -1) break;  // inputが-1のときループを抜ける
    sum += input;  // 総和にinputを足す
  }

  printf ("総和は %d です。\n", sum);
  return 0;
}
0450デフォルトの名無しさん2006/10/28(土) 20:22:37
すいません、>>449は>>445宛てです。
04514442006/10/28(土) 20:30:58
>>446
ありがとうございます!
最初で落ちなくなりました。
きっちり確保してあげなきゃいけないんですね…。

>>447
head_aが現在の要素、head_bが一つ前の要素、
head_tは退避用の一時リストのつもりです。
わかりにくいソースでごめんなさい。

解答ありがとうございました、助かりました。多謝です。
0452デフォルトの名無しさん2006/10/28(土) 20:35:47
すいません。
449のはC言語じゃないんですか?
C++じゃないと怒られます。
0453デフォルトの名無しさん2006/10/28(土) 20:54:34
>>452
思いっきり勘違いしてました。ごめんなさい。C++だとこうなります。

---

#include <iostream>

using namespace std;

int main (void) {
 int sum;         // 総和
 int input;        // 入力した数値
 
 sum = 0;
 
 cout << "入力された数の総和を表示します。" << endl;
 cout << "入力を終了するときは、-1を入力してください。" << endl;

 cin >> input;       //最初の数値を入力する
 while (input != -1) {  // inputが-1でない間繰り返す
  sum += input;     // 総和にinputを足す
  cin >> input;     // 次の数字を入力する
 }
 
 cout << "総和は " << sum << " です。" << endl;
 return 0;
}
0454デフォルトの名無しさん2006/10/28(土) 21:15:35
>>451
多倍長整数の演算部分とフィボナッチ部分を分けた方が見やすいと思う
0455デフォルトの名無しさん2006/10/28(土) 21:33:17
453 ホントありがとうございます。
どこのどなたかもわかりませんがホントにありがとうございます。
これからは、なるべく自力で出来るようにがんばります。
0456デフォルトの名無しさん ◆HOZlQYR1MY 2006/10/28(土) 21:58:33
[1] 授業単元:情報技術�U
[2] 問題文(含コード&リンク):初期値 N を0とし、N←2*N+3で更新されるNを10回順に出力するプログラムをwhile文を利用して作成せよ。(漸化式N(i+1)=2*N(i)+3、初期値N(0)=0で表される数列のN(0)〜N(9)の値を順に出力するプログラムです。)作成したプログラムを提出せよ。
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限:2006/11/8

まだ1年なのでよく分からないのでよろしくお願いします。
0457デフォルトの名無しさん2006/10/28(土) 22:05:26
文系か・・・
こんな授業とるなよw
0458デフォルトの名無しさん2006/10/28(土) 22:06:35
int n = 0;
int i = 0;
while(i < 10) {
/* printf で好きなように出力 */
n = 2*n+3;
}

2年になったらもっとわからなくなるんでない?
0459デフォルトの名無しさん2006/10/28(土) 22:28:25
C++言語で
繰り返し計算をしててその結果を随時for文の中に
coutを入れて発散してないか(計算がおかしくないか)
見ているのですが、今一回一回改行する設定にしてて
DOS画面にバーッと下のほうに出てくるような感じになっているのですが、
これをDOS画面の一番最初の数字のところだけどんどん更新させる事はできないのでしょうか?
ご存知の方がおられましたら教えてください。よろしくお願いします。
0460デフォルトの名無しさん2006/10/28(土) 22:30:46
>>459
\r
0461デフォルトの名無しさん2006/10/28(土) 22:38:23
>>460
すみません・・・やっても使い方がわからず
ググっても"/r C++言語"などと調べても
中の人からいい検索結果が返ってきません。
申し訳ないんですがやりかたを書いていただけないでしょうか?
0462デフォルトの名無しさん2006/10/28(土) 22:40:54
>>460
と思ったらできました!!"¥"という字が文字化け?してたのか
/の左右逆さまの文字になっていて分かりませんでした。
改行と同じように使えばいいのですね!わかりました。ありがとうございました!
0463デフォルトの名無しさん2006/10/28(土) 23:04:16
>>444の方と恐らく同じ授業です。
ここに書いてあるアドバイスを参考に作ってみたのですがよくわかりません。
>>444の方のプログラムを具体的にどう直せばいいでしょうか・・・
プログラム初心者なのにこんな授業取ってしまって非常に困ってます
出来れば回答宜しくお願いします・・・
0464デフォルトの名無しさん2006/10/28(土) 23:05:58
日本では、半角バックスラッシュ(半角\)と半角円記号(半角¥)は事実上同一だと思え。
そして半角スラッシュ( / )は別物。
0465デフォルトの名無しさん2006/10/28(土) 23:15:01
>>463
さすがに同じ授業とってる奴のとほとんど同じなのはまずいだろ
0466デフォルトの名無しさん2006/10/28(土) 23:16:55
>>465
一応変えられる所は出来る限り変えますので・・・
0467デフォルトの名無しさん2006/10/28(土) 23:28:00
そんなんはできるんかいなww
0468初心者2006/10/28(土) 23:38:32
どちら様教えて、VC++プログラミングするときにひとつのボタン押して
他の.exeファイル実行できるようにどうすればいいですか??
0469デフォルトの名無しさん2006/10/28(土) 23:41:16
>>468
スレ違い
あと日本語でおk
0470デフォルトの名無しさん2006/10/28(土) 23:52:09
>>468
マルチは氏ね
0471カッパ2006/10/29(日) 09:45:51
charはカタカナでなんと読みますか?
0472デフォルトの名無しさん2006/10/29(日) 09:46:36
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
2と17と5の倍数を入力した時のみ
終了するプログラムを作りなさい。
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] borland
 [3.3] C言語
[4] 期限: 10月30日の12時まで
[5] その他の制限: 特に無し。

よろしくお願いします。
0473デフォルトの名無しさん2006/10/29(日) 09:55:16
>>472

#include <stdio.h>

int main (void) {
  int input;

  /* ずっと繰り返す */
  while (1) {
    printf ("数値を入力してください。\n");
    scanf ("%d", &input);
    /* nの倍数 <=> nで割った余りが0 */
    if (input % 2 == 0) break;
    if (input % 5 == 0) break;
    if (input % 17 == 0) break;
  }

  return 0;
}
0474デフォルトの名無しさん2006/10/29(日) 10:46:42
>>473
そんないいげんなソースよく公開できるな
匿名ならではw
0475デフォルトの名無しさん2006/10/29(日) 11:04:53
>>474
そんないいかげんな日本語(ry
0476デフォルトの名無しさん2006/10/29(日) 11:09:57
>>474
具体的箇所を示さずオナニーできるのが匿名ならでわなのだw
0477デフォルトの名無しさん2006/10/29(日) 11:22:10
>>476
全くエラー処理してねーじゃん
0478デフォルトの名無しさん2006/10/29(日) 11:23:44
エラー処理ww
0479デフォルトの名無しさん2006/10/29(日) 11:25:21
>>477
具体的箇所(ry
0480デフォルトの名無しさん2006/10/29(日) 11:30:29
>>471
チャーなりキャラクターなり好きに呼べ
0481デフォルトの名無しさん2006/10/29(日) 11:31:32
[1]授業単元:情報処理
[2]問題文:以下のプログラムを参考に、UNIXのgrepコマンド同様に1つ目の引数に示された文字列を持つ行を、2つ目の引数で示されたファイル内から抜き出して表示するプログラムを作ってください。
strlenght関数とstrinclude関数に関しては宣言だけで結構です。
int strinclude(char str1[], char str2[]){
int i, j;
int len1, len2;
len1 = strlength(str1);
len2 = strlength(str2);
if(len1 < len2)
return 0;
for(i = 0; i <= (len1 - len2); i++){

for(j = 0; j < len2; j++){
if(str1[i+j] != str2[j]){
break;
}
}
if(j == len2){
return 1;
}
}
return 0;
}
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] gcc
 [3.3] C言語
[4] 期限:本日中
よろしくお願いします。
0482デフォルトの名無しさん2006/10/29(日) 11:38:42
なんだろう・・・標準関数使ったら殺される勢いなのかな・・・?
0483デフォルトの名無しさん2006/10/29(日) 11:58:25
>>482
よし、じゃああえて標準関数で
>>481

/* 宣言だけで結構らしいので宣言だけする */
int strlenght(char[]);
int strinclude(char[],char[]);

#include<stdio.h>
#include<string.h>
int main(int argc,char**argv){
    char*pattern;
    char buf[1024];
    int lineno;
    if(argc <= 1)return 0;
    pattern = argv[1];
    if(argc > 2)freopen(argv[2],"r",stdin);
    for(lineno=1;fgets(buf,sizeof buf,stdin);++lineno)
        strstr(buf,pattern) && printf("%3d: %s",lineno,buf);
}
0484デフォルトの名無しさん2006/10/29(日) 12:58:42
>>472を教えて下さい。
0485デフォルトの名無しさん2006/10/29(日) 13:01:25
>>484
>>473で問題ないよ
0486デフォルトの名無しさん2006/10/29(日) 15:02:30
>>472あれじゃ意味違ってくるだろ
0487デフォルトの名無しさん2006/10/29(日) 15:10:20
そもそも問題文が曖昧。
0488デフォルトの名無しさん2006/10/29(日) 15:35:04
公倍数なら&&つけりゃええやん
0489デフォルトの名無しさん2006/10/29(日) 18:12:49
#include <stdio.h>
main()
{
int *x;
*x=1;

printf("x=%o *x=%d\n",x,*x);
}


これを実行しろって問題なんだけど、コンパイルできませんでした。
なぜコンパイルできないのですか?
テンプレ無視ってスマソ
0490デフォルトの名無しさん2006/10/29(日) 18:15:41
>>489
return 0?
0491デフォルトの名無しさん2006/10/29(日) 18:17:39
>>489

こんなカンジかな。

#include <stdio.h>
int main(void)
{
int *x;
x=malloc(sizeof(int));
*x=1;

printf("x=%o *x=%d\n",x,*x);
free(x);
return 0;
}
0492デフォルトの名無しさん2006/10/29(日) 18:21:46
>>489
xがどこにも指定されてない。
#include<stdio.h>
int main()
{
int a=1;
int *x;
*x=a;
x=&a;
printf("x=%o *x=%d\n",x,*x);
return 0;
}
0493デフォルトの名無しさん2006/10/29(日) 18:47:45
>>489
俺の環境(gcc-4.1.1)ではコンパイルできた。
0494saga2006/10/29(日) 19:21:26
*x=a;
x=&a;

順番逆じゃない佐賀?
04954892006/10/29(日) 19:37:31
>>493
どうなったんですか?
0496デフォルトの名無しさん2006/10/29(日) 19:39:58
>>495
セグメンテーション違反です (core dumped)
04974892006/10/29(日) 19:40:49
>>496
それってどういう意味なんですか?
0498デフォルトの名無しさん2006/10/29(日) 19:42:19
>>497
プログラムが不正なメモリ操作をしたので強制終了、くらいの意味。
0499デフォルトの名無しさん2006/10/29(日) 19:48:24
>>494
*x=a;自体いらないんだぜ
0500デフォルトの名無しさん2006/10/29(日) 19:55:34
>>489
コンパイルエラーは?
まともなC89コンパイラなら通すはずだと思うんだが。
05014922006/10/29(日) 19:56:47
>>499 こんな感じ?
#include<stdio.h>
int main()
{
int a=1;
int *x;
x=&a;
printf("x=%o *x=%d",x,*x);
return 0;
}
0502デフォルトの名無しさん2006/10/29(日) 21:06:35
CのプログラムをC++に書き直してもらえませんか??
0503デフォルトの名無しさん2006/10/29(日) 21:08:44
CのプログラムをC++に書き換えてもらえませんか??
0504デフォルトの名無しさん2006/10/29(日) 21:41:41
>>503
普通は書き換える必要はありません。
0505デフォルトの名無しさん2006/10/29(日) 21:41:50
[1] 授業単元:コンピューター実習1
[2]   発生させた乱数の値に関して度数分布を求める関数を作る
関数 frequency( データ配列、データ配列の要素数、値の範囲、結果の配列、結果の配列の要素数)
とする。例えば、値の範囲が0〜100で、結果配列の要素数が20であれば、5刻みの区間で
その区間にある値をカウントする。つまり(0〜5、6〜10、11〜15.。。。。  96〜100)
のそれぞれの区間にあるデータの個数を結果として返す。
関数frequency内は、できるだけポインタを使ってきじゅつすること。以下雛形↓
#include <stdio.h>
int main( void )
{ int n;
int x[1024], f[20];
generate_dist( x , 1024, 100);
for(n=0; n<1024; n++) printf("%5d",x[n]);
frequency( x , 1024 , 100, f , 20);
puts("");
for(n=0; n<20; n++) printf("%5d",f[n]);   }
int frequency( int x[], int numx, int r, int f[], int numy)
{

}
int generate_dist( int x[], int num, int r)
{ int *p;
for (p=x; p != &x[num] ; p++ ) {
*p = rand() % (r+1);
*p += rand() % (r+1);
*p += rand() % (r+1);
*p /= 3;      }   }
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:gcc 3.4
 [3.3] 言語: C
[4] 期限: 10月31日
[5] その他の制限:特になし
0506デフォルトの名無しさん2006/10/29(日) 22:26:17
>>505
#include <stdio.h>
#include <stdlib.h>

void frequency( int x[], int numx, int r, int f[], int numy);
void generate_dist( int x[], int num, int r);

int main( void )
{
int n;
int x[1024], f[20];
generate_dist( x , 1024, 100);
for(n=0; n<1024; n++) printf("%5d\n",x[n]);
frequency( x , 1024 , 100, f , 20);
puts("");
for(n=0; n<20; n++) printf("%d: %5d\n",n, f[n]);

return 0;
}
0507デフォルトの名無しさん2006/10/29(日) 22:26:54
つづき
void frequency( int x[], int numx, int r, int f[], int numy)
{
int i;
double tick = (double)r/numy;
for (i = 0; i < numy; i++) f[i] = 0;
for (i = 0; i < numx; i++) {
int n;
n = x[i]/tick;
f[n]++;
}
}

void generate_dist( int x[], int num, int r)
{
int *p;
for (p=x; p != &x[num] ; p++ ) {
*p = rand() % (r+1);
*p += rand() % (r+1);
*p += rand() % (r+1);
*p /= 3;
}
}
0508デフォルトの名無しさん2006/10/30(月) 01:07:34
[1] プログラミング
[2]
# 2つの自然数 a, b に対し, a と b の最大公約数を求める関数 int gcd(int a, int b) を作成せよ.
# 2つの自然数 a, b に対し, その公約数をすべて表示する関数 void print_cd(int , int) を作成せよ.

※ 「a と b の公約数」は「a と b の最大公約数の約数」なので, gcd(a,b) を呼び出して 2 数の最大公約数 g を求めてその全約数を表示すればよい. i = 2, 3, …, g について i が g を割り切るかどうかテストし, 割り切ればそれを表示するようにする.

# main から gcd と print_cd を呼び出し, キーボードから入力した自然数 a, b に対して, 最大公約数とすべての公約数とを表示するようにせよ (表示形式は任意).
[3]
 [3.1] winXP sp2
 [3.2] cygwin
 [3.3] C
[4] 23時59分
[5] 途中までやったんで続きお願いします。最大公約数は出せました

05095082006/10/30(月) 01:08:49
#include<stdio.h>
void gcdprint(int,int);
int gcd(int,int);
int main (void)
{
int a,b;
printf("a bを入力して下さい>>");
scanf("%d %d",&a,&b);
gcdprint(a,b);
return 0;
}
void gcdprint(int a,int b)/*最大公約数を印字する関数*/
{
printf("%d\tgcd\t%d\t=\t%d\n",a,b,gcd(a,b));
}
int gcd(int a,int b)/*最大公約数を計算する関数*/
{
int z;
while((z=a%b)!=0)/*aをbで割った余りをzに代入し*/
{/*zが0以外のあいだにループする*/
a=b;/*aにbを代入し*/
b=z;/*bに余りzを代入する*/
}
return b;/*bに余りzを代入する*/
}
これに埋めて下さい。よろしくお願いします
0510デフォルトの名無しさん2006/10/30(月) 01:58:44
再帰つかえよ
0511デフォルトの名無しさん2006/10/30(月) 02:55:02
void gcdprint(int a,int b)/*最大公約数を印字する関数*/
{
int g, i;
g = gcd(a, b)
printf("%d\tgcd\t%d\t=\t%d\n",a,b,g);
for (i = 1; i < g; i++)
{
if (g & i == 0)
{
printf("%d\n", i);
}
}
}
■ このスレッドは過去ログ倉庫に格納されています