C/C++の宿題を片付けます 96代目 at TECH
[2ch|▼Menu]
[前50を表示]
400:デフォルトの名無しさん
07/09/27 01:26:37
ポインタは危険だから気をつけろよ。

#include <stdio.h>
int main(void)
{
int i;
double data[5] ={10.8, 20.3, 30, 6.40, 10.4, 2.12}, max = 0;
char *p;

for (i = 0; i < 5; i++) {
max += data[i];
}
p = "max = %f, average = %f\n";
printf(p, max, max / 5);
return 0;
}

401:デフォルトの名無しさん
07/09/27 01:28:58
危険なのはレーザーポインタ
ポインタ自身はそこまで危険じゃない

402:デフォルトの名無しさん
07/09/27 01:29:04
問題文を読み返して思ったが

double data[5] ={10.8,20.3,30,6.40,10.4,2.12}:
だと変だな。
最後のコロンは置き換えたが、要素数が間違っているのまでは気づかなかった。
適当に修正してくれよ。


403:デフォルトの名無しさん
07/09/27 01:32:15
>>399
テンプレに沿わない質問に答える気がないならお前が答えなくて良いよ
うっとうしいんだよ

404:デフォルトの名無しさん
07/09/27 01:37:14
テンプレに沿わない質問がうっとおしい

405:デフォルトの名無しさん
07/09/27 01:41:43
>>401>>400にマジレスしているのがかわいらしい


406:デフォルトの名無しさん
07/09/27 01:44:05
>>403
無能乙www

407:デフォルトの名無しさん
07/09/27 01:58:34
>>399が無能だろ。俺は普通に答えているわ、ボケが

408:デフォルトの名無しさん
07/09/27 02:08:18
文字列いじる程度の簡単な奴だけだろw
ちょっと難しいのになると出てこないくせに

409:デフォルトの名無しさん
07/09/27 02:10:24
テンプレに従ってなくても答えられるけど、従ってくれたほうが読みやすいことが多いね

410:デフォルトの名無しさん
07/09/27 02:24:52
408 名前:デフォルトの名無しさん 投稿日:2007/09/27(木) 02:08:18
文字列いじる程度の簡単な奴だけだろw
ちょっと難しいのになると出てこないくせに
↑なんだこいつ?きめぇ。初歩的なもの以外、答えていないと思ってんのか?
お前がテンプレに沿った質問の仕方をしていないからって、答えないよと言っているだけで
テンプレに沿っていないけど初歩的ともいえる問題に答えることすら出来ないんだろ?w
gdgd言うなら別に答えなくて良いっつってんじゃん、ここはお前が主のスレじゃねーよ
答える側は任意

411:デフォルトの名無しさん
07/09/27 02:26:46
double data[5] ={10.8,20.3,30,6.40,10.4,2.12};

int main()
{
int last_index = sizeof(data)/sizeof(data[0]);
if (last_index-5)printf("This program is abnormal\n");// 平気か調べる。
for (double *p=data,sum=0.0;p!=data[last_index];p++){
sum+=*p;
}
char output_string[1024];
sprintf(output_string,"sum=%f,avg=%f",sum,sum/(float)last_index);
puts(output_string);
return 0;
}

死ね!

412:デフォルトの名無しさん
07/09/27 02:49:45
[1] 授業: 教科書
[2] OS Windows
[3]問題
double data[5] ={10.8,30,6.40,10.4,2.12}:
配列の全要素の合計と平気を求めるプログラムをポインタを使って作成しなさい 
誰か宜しくお願いします
ちなみに初心者です

413:デフォルトの名無しさん
07/09/27 03:01:06
いいかげんこのネタやめろw

414:デフォルトの名無しさん
07/09/27 03:02:22
>>396
node の定義や必要そうな include もこちらで補うのかい?

415:デフォルトの名無しさん
07/09/27 05:56:53
>>396
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>

struct node {
    char element;
    struct node *next;
};

int check(struct node *p, struct node *mid)
{
    int i, j, n = mid->element - '0';
    struct node *temp;
    for(i=0, temp = p; temp!=mid; i++, temp=temp->next);
    if(i!=n) return 0;
    for(i=0; i<n; i++, temp=temp->next) if(temp->next==NULL) return 0;
    for(i=0; i<n; i++, p=p->next) {
        for(temp=mid, j=0; j<n-i; j++, temp=temp->next);
        if(p->element != temp->element) return 0;
    }
    return 1;
}

416:デフォルトの名無しさん
07/09/27 05:59:16
続き
struct node* mirror_image(struct node *list)
{
    struct node *p, *buf = NULL, *temp, *ret = (struct node*)malloc(sizeof(struct node));
    int max = 0;
    ret->next = NULL;
    for(p=list->next; p!=NULL; p=p->next) {
        for(temp=p->next; temp!=NULL; temp=temp->next) {
            if(isdigit(temp->element) && temp->element - '0' > max) {
                if(check(p, temp)) {
                    buf = p;
                    max = temp->element - '0';
                }
            }
        }
    }
    if(buf) {
        int i, l = 2 * max + 1;
        for(i=0, temp = ret; i<l; i++, buf = buf->next) {
            temp = temp->next = (struct node*)malloc(sizeof(struct node));
            temp->element = buf->element;
        }
        temp->next = NULL;
    }
    return ret;
}

417:デフォルトの名無しさん
07/09/27 07:02:54
>>396
眠いのに朝からやってやったお(^ω^)
ループ文なしでやってみたお。
URLリンク(kansai2channeler.hp.infoseek.co.jp)

418:デフォルトの名無しさん
07/09/27 07:11:59
- '0' とか意味無かったお・・・。冗長すぎワロタ欝出し脳

419:デフォルトの名無しさん
07/09/27 11:01:25
>>365

420:デフォルトの名無しさん
07/09/27 11:09:09
>>396 1/2
char *createcs(struct node *list) {
 char *cs = 0;
 int i = 0;
 struct node *p;
 for (i = 0, p = list->next; p; i++, p = p->next) continue;
 cs = (char *)malloc(sizeof(char) * (i + 1));
 for (i = 0, p = list->next; p; i++, p = p->next) cs[i] = p->element;
 cs[i] = '\0';
 return cs;
}

421:デフォルトの名無しさん
07/09/27 11:09:41
>>396 2/2
struct node *mirror_image(struct node *list) {
 char *cs = createcs(list);
 struct node *mirror = 0;
 int i, j, n, maxn_index = -1;
 for (i = 0; i < strlen(cs); i++) {
  if (!isdigit(cs[i])) continue;
  
  n = cs[i] - '0';
  if (i < n || (strlen(cs) - 1 - i) < n) continue; // 無理
  if (n < cs[maxn_index] - '0') continue; // 無駄
  for (j = 0; j < n; j++) { // n個チェック
   if (cs[i - (j + 1)] != cs[i + (j + 1)]) break;
  }
  if (n == j && cs[maxn_index] - '0' < n) maxn_index = i;
 }
 cs[maxn_index + (cs[maxn_index] - '0') + 1] = '\0';
 if (0 < maxn_index) {
  mirror = initclist(&cs[maxn_index - (cs[maxn_index] - '0')]);
 } else {
  mirror = (struct node *)calloc(1, sizeof(struct node));
 }
 free(cs);
 return mirror;
}

422:デフォルトの名無しさん
07/09/27 11:12:47
>リストを配列にコピーするのは御法度です

423:デフォルトの名無しさん
07/09/27 11:20:08
(ノ∀`) アチャー

424:デフォルトの名無しさん
07/09/27 11:22:00
>>396
リストの先頭が空って、なんか気持ち悪くない?

425:デフォルトの名無しさん
07/09/27 13:34:59
[1] 授業単元: プログラミング技術
[2] 問題文(含コード&リンク): 四則演算を関数としてもっているプログラム。
実数と整数の両方に対応し、式と結果を表示。
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:Borland C++ Compiler 5.5
 [3.3] 言語:C
[4] 期限:10月1日
[5] その他の制限:scanfを使用、関数はPlus(float a,float b)。
main関数では2つの数字を入力、関数Plusを呼び出し。
考えでは↓
実数では、float c; c=a+b;
整数では、int d; d=(int)a+(int)b;
最後にprintfを使って表示します。

宜しくお願いします<(_ _)>

426:デフォルトの名無しさん
07/09/27 13:52:40
>>425
#include <stdio.h>

float Plus(float,float);

int main()
{
float a,b;

printf("1つ目=>");
scanf("%f",&a);
printf("2つ目=>");
scanf("%f",&b);

printf("float:%f\nint:%d",Plus(a,b),(int)Plus((int)a,(int)b));
return 0;
}

float Plus(float a,float b)
{
return a+b;
}

C++でもいいなら関数オーバーロードを使った方がいいと思うよ

427:デフォルトの名無しさん
07/09/27 15:00:40
[1] ファイル入出力
[2] 引数で渡された文字列をファイルに出力する関数を作り、入力した文字列をファイルに出力する。
[3] 環境
 [3.1]WindowsXP
 [3.2]BorlandC++
 [3.3]C++

#include <stdio.h>
#include <string.h>

void sdata(char str);

void main(void)
{
char str[128];

scanf("%s",str);
}

void sdata(char str)
{
FILE *fp;

fp = fopen("Return.txt","w");

fwrite(str,sizeof(str),1,fp);
}
一応自分でこんな感じかなみたいのはあるんですが…ここからよく分からないのです。

428:425
07/09/27 16:14:56
>>426さん ありがとうございます。
四則の問題があるので、Plus()関数に
int s;
printf("1.+ 2.- 3.* 4./ =>");
scanf("%d",&s);
if(1==s){return a+b;
}else if(2==s){
return a-b;
}else if(3==s){
return a*b;
}else if(4==s){
return a/b;
}
と追加してみたら
1つ目=>4
2つ目=>2
1.+ 2.- 3.* 4./ =>4
1.+ 2.- 3.* 4./ =>3
float:8.000000
int:2
と出力されました。
1.+ 2.- 3.* 4./ =>のところを1回だけ表示するにはどうすると良いでしょうか?

429:デフォルトの名無しさん
07/09/27 16:55:26
[1] 授業単元: プログラミング技術
[2] 問題文(含コード&リンク):読み込んだ整数の段数を持つピラミッドを表示するプログラム
例:3
  *
 ***
*****
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:Borland C++ Compiler 5.5
 [3.3] 言語:C
[4] 期限:10月1日
[5] その他の制限:scanf,forを使用

430:デフォルトの名無しさん
07/09/27 17:04:03
#include <stdio.h>

int main(void)
{
int i, j, n;

scanf("%d", &n);

for(i=0; i<n; i++) {
for(j=0; j<n-1-i; j++) putchar(' ');
for(j=0; j<2*i+1; j++) putchar('*');
putchar('\n');
}

return 0;
}


431:デフォルトの名無しさん
07/09/27 17:25:37
>>428
>int s;
>printf("1.+ 2.- 3.* 4./ =>");
>scanf("%d",&s);
をPlus関数からmain関数に移し、Plus関数は新たに引数としてsを受け取るようにする

432:デフォルトの名無しさん
07/09/27 17:27:04
>>429
#include<stdio.h>
int main(int c,int v){
if(c==1){
scanf("%d",&v);
main(v+1,v);
}
else{
int i;
if(c!=2)main(c-1,v);
for(i=0;i<v-c+3/2;i++)printf(" ");
for(i=0;i<2*c-3;i++)printf("*");
printf("\n");
}
return 0;
}

433:デフォルトの名無しさん
07/09/27 17:36:09
>>429
#include <stdio.h>
int padd(int n, char c) {
 if (!n) return;
 putchar(c);padd(n - 1, c);
}
void pyramid(int n, int m, char c) {
 if (n <= m) return;
 padd(n - m - 1, ' ');
 padd(2 * m + 1, c);
 puts("");
 pyramid(n, m + 1, c);
}
int main() {
 int n;
 scanf("%d", &n);
 pyramid(n, 0, '*');
}


434:デフォルトの名無しさん
07/09/27 17:36:19
>>428 関数名が悪い
#include <stdio.h>
#include <stdlib.h>
float calc(float,float,int);
int main()
{
int i,s;
float a,b;
char mode[]="+-*/";
printf("1つ目の数=>");scanf("%f",&a);
printf("2つ目の数=>");scanf("%f",&b);
printf("演算子\n");
for(i = 0;i < sizeof(mode)-1;i++){
printf("%d.%c\n",i+1,mode[i]);
}
printf("=>");scanf("%d",&s);

printf("%f %c %f = %f",a,mode[s-1],b,calc(a,b,s));
return 0;
}

float calc(float a,float b,int s)
{
switch(s){
case 1:return a+b;
case 2:return a-b;
case 3:return a*b;
case 4:if(b == 0){printf("0では割れない");exit(1);
}else{return a/b;}
default:printf("演算子指定が正しくない");exit(1);
}
}

435:425
07/09/27 18:23:54
>>431さん、>>434さん ありがとうございました。


436:デフォルトの名無しさん
07/09/27 20:34:23
test

437:デフォルトの名無しさん
07/09/27 23:08:36
[1] 授業単元:
[2] 問題文(含コード&リンク): URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: gcc 3.4
 [3.3] 言語: C
[4] 期限: 9月28日18:00まで
[5] その他の制限: 特にないです

どちらか1つだけでも結構ですので、どうぞよろしくお願いします

438:fubu ◆dFztVLlF36
07/09/27 23:20:04
>>390
ありがとうございますつД`)

439:デフォルトの名無しさん
07/09/27 23:29:36
[1] 授業単元:C言語
[2] 問題文(含コード&リンク):構造体(詳細は下記)
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: VC
 [3.3] 言語: (C/C++ どちらでも可)
[4] 期限: [9/30]
[5] 問題文
「本」の商品名、価格、ページ数を10冊分入力し、
10冊分の価格の昇順・降順にソートするプログラムを作成しなさい。

よろしくお願いします

440:デフォルトの名無しさん
07/09/27 23:48:59
>>439
それぞれの限界値は指定しないのか?

441:デフォルトの名無しさん
07/09/27 23:51:00
>>439
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
struct bk{
string n;int v,p;
void r(){cin>>n>>v>>p;}
void w(){cout<<n<<" "<<v<<" "<<p<<endl;}
bool operator<(const bk&b)const{return v<b.v;}
};
int main(){
bk b[10];
for(int i=0;i<10;i++)b[i].r();
sort(b,b+10);
for(int i=0;i<10;i++)b[i].w();
return 0;
}

442:デフォルトの名無しさん
07/09/27 23:51:31
>>437
1つ目 改行が多いって言われたのでこっちで
URLリンク(kansai2channeler.hp.infoseek.co.jp)

443:デフォルトの名無しさん
07/09/28 00:14:32
>>440
すいません…
商品名[10]、価格[4]、ページ数[3]を入れるのを失念しておりました…
ですので、
>>441
ありがとうございます!!
こちらのソースを元になんとか自分で考えてみます。


444:デフォルトの名無しさん
07/09/28 00:45:51
>>437
2つ目
URLリンク(kansai2channeler.hp.infoseek.co.jp)

445:デフォルトの名無しさん
07/09/28 01:20:44
>>437 先越されたけど2つ目 君の瞳に映った僕に乾杯
URLリンク(kansai2channeler.hp.infoseek.co.jp)

446:デフォルトの名無しさん
07/09/28 07:35:42

----【即系サイト×優良サイト=即会い即やり!】-----------------------

優良出会い系サイトと即出会えるサイトを併用して使い、即会いライフを楽しんでいます。
これが面白いほど会える☆ 会った後は・・・
俺の場合、出会い系サイト3つで女の子と週2〜3で出会えてます。
これ以外にもお気にの女の子とは週1で会ってます。

今回は皆さんにも出会いを楽しんでもらいたいので、俺が使っている
登録後一日以内に出会えたサイトを紹介するブログ始めました。
皆も休日にエンジョイしてください!

↓↓↓
【即出会えるサイト紹介ブログ】
URLリンク(deaigets.blog97.fc2.com)

--------------------------------------------------------------------

447:437
07/09/28 09:35:59
>>442
>>444
>>445
本当にありがとうございます
助かりました

448:デフォルトの名無しさん
07/09/28 11:20:28
任意の長さの文字列(英字のみ)データをファイルから読み込み、辞書順に並べ替えて
最終結果のみを表示するプログラムを作成する宿題なんですが、ファイルを読み込もうと
するところでなぜか止まってしまいます。原因がよくわからないので助けてください…。

Cテキスト
URLリンク(kansai2channeler.hp.infoseek.co.jp)

読み込みファイル用テキスト(これじゃなくてもOK)
URLリンク(kansai2channeler.hp.infoseek.co.jp)


細かい指定は、
・英字の大文字小文字に関しては凝らなくていい
・データ最大数は1000
・文字列の最大長は64
・データは改行で区切られている


449:デフォルトの名無しさん
07/09/28 11:28:03
>>448
そういうときは、色々な変数の値をprintfで吐き出すと良いよ

> scanf("%s,in_filename");

450:448
07/09/28 12:01:37
なんというくだらないミス\(^O^)/

申し訳ありませんでした……

451:デフォルトの名無しさん
07/09/28 12:50:24
ファイル読めない時のエラーメッセージもだしとけよ

452:デフォルトの名無しさん
07/09/28 15:00:32
[1] 授業単元: プログラミング演習
[2] 問題文(含コード&リンク):
/****memo.txt********/
atsusa a ts u s a
au a u
awatadashii a w a t a d a sh i i
awa a w a
/*********************/

このmemo.txt というファイルがあるとして、
このファイルを読み込み、右の「a,ts,u,s,a」という単位で
かかれてある右の列(2列目)を(atsusaを1列目、a,ts,u,s,aを2列目)
a
ts
u
s
a
と表示できるようにしなさい。

[3] 環境
 [3.1] OS:LINUX
 [3.3] 言語:C
[4] 期限:早いほうがいいです
[5] その他の制限:なし



453: ◆EtzJSByuaQ
07/09/28 16:43:58

【質問テンプレ】
[1] 授業単元:プログラミング演習
[2] 問題文(含コード&リンク):圧力P一定の下、温度変化量ΔTしたとき、1molの理想気体のガス容積の変化量ΔVを算出する関数を作成しなさい
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:CPad for Borland C++Compiler
ver2.31
 [3.3] 言語:C++
[4] 期限:2007年09月28日20時くらいまで


本当にわからなくて困っています。よろしくお願い致します。

454: ◆vLIz8KOkPM
07/09/28 17:29:14
[1] 授業単元: プログラミング演習
[3] 環境
 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C
[4] 期限: 9月29日(土)午後9時まで
[5] その他の制限: ポインタ、構造体、配列、関数まで習ったので、この範囲内でお願いします。


[2] 問題文(含コード&リンク):
**発展課題**について【下に、発展課題の問題文、自分の作成したプログラムをのせます】、
各口座のデータをバイナリファイルに保存する機能(口座データが変更される度にfwriteで)
各口座のデータをバイナリファイルから読み込む機能(プログラム起動時に1 回のみfreadで)を追加せよ.実行例を下に示す。

% ./kadai13
口座データ読込み(1:ファイルから2:初期値を使用)? 1
口座番号を入力してください: 9012
暗証番号を入力してください: 0123
引出し額を入力してください: 20000
ありがとうございました.残高は518600 円です
口座データ保存(1:ファイルへ2:保存しない)? 1
口座番号を入力してください: ← 口座番号入力に戻る

発展課題の問題については>>455
それに対する自分のプログラムは>>456

455: ◆vLIz8KOkPM
07/09/28 17:29:46
****************発展課題の問題文****************

ATM(Automated Teller Machine; 現金自動預け払い機) システムを実現するプログラムを作成する.
最初に,氏名,口座番号,暗証番号,預金残高を要素とする構造体を定義し,512 人分の口座が作成可能なようにせよ.
また,初期値として次のように構造体の内容を設定せよ.

• 田中太郎の口座番号は1234 で,預金残高を1,234,560 円に設定する.
• 山田花子の口座番号は5678 で,預金残高を 987,600 円に設定する.
• 鈴木一郎の口座番号は9012 で,預金残高を 538,600 円に設定する.
• 暗証番号は口座番号に1111 を足して10000 で割った余りに設定する.

このとき引出しの機能を実現せよ。具体的には,口座番号の入力,暗証番号の入力と確認,支払額の入力,預金残高の更新をするプログラムを作成せよ.
実行例を以下に示す

% ./kadai10
口座番号を入力してください: 5000 ← 存在しない
暗証番号を入力してください: 0123
口座番号または暗証番号が間違っています.
口座番号を入力してください: 9012
暗証番号を入力してください: 5555 ← 間違っている
口座番号または暗証番号が間違っています.
口座番号を入力してください: 9012
暗証番号を入力してください: 0123
引出し額を入力してください: 1000000 ← 預金額より多い
預金額が不足しています.
口座番号を入力してください: 9012
暗証番号を入力してください: 0123
引出し額を入力してください: 20000
ありがとうございました.残高は518600 円です.
口座番号を入力してください: ← 始めに戻る

456: ◆vLIz8KOkPM
07/09/28 17:35:06
**********発展課題について自分が作成したプログラム***************
#include<stdio.h> #include<string.h> #define MAC 256
main(){
char save[MAC]; int account; int code; int draw; int i;
struct{
char name[MAC]; int account; int code; int balance;
}ATM[500];
strcpy(ATM[0].name,"田中太郎"); ATM[0].account=1234; ATM[0].code=(ATM[0].account+1111)%10000; ATM[0].balance=1234560;
strcpy(ATM[1].name,"山田花子"); ATM[1].account=5678; ATM[1].code=(ATM[1].account+1111)%10000; ATM[1].balance=987600;
strcpy(ATM[2].name,"鈴木一郎"); ATM[2].account=9012; ATM[2].code=(ATM[2].account+1111)%10000; ATM[2].balance=538600;
printf("あなたの口座番号を入力して下さい:"); fgets(save,MAC,stdin); sscanf(save,"%d",&account);
for(i=0;i<=500;i++){ if(account==ATM[i].account) break; }
if(account!=ATM[i].account){ printf("そのような口座は存在しません.\n"); }
else{ printf("暗証番号を入力して下さい:"); fgets(save,MAC,stdin); sscanf(save,"%d",&code);
for(i=0;i<=500;i++){ if(code==ATM[i].code) break; }
if(code==ATM[i].code){ printf("%s 様ですね.\n",ATM[i].name); printf("引出し金額を入力して下さい:"); fgets(save,MAC,stdin); sscanf(save,"%d",&draw);
if(draw<0){ printf("ERROR!!\n"); }
else if(draw>ATM[i].balance){ printf("金額が不足しています.\n"); }
else if(draw<=ATM[i].balance){ printf("預金残高は %d 円です.\n",ATM[i].balance-draw); }}
else if(code!=ATM[i].code){ printf("認証に失敗しました.\n"); }}
return(0);
}

457: ◆vLIz8KOkPM
07/09/28 17:40:24
長文で申し訳ないですが、是非ともよろしくお願いします。m(_ _)m

458:デフォルトの名無しさん
07/09/28 18:00:37
[1] 授業単元:C言語
[2] 問題文(含コード&リンク):文字列AB、CD、EF、GHがある。キーボードから文字を入力しこの文字列があればそれを取り出す。
                  全部取り出したら終了する。
[3] 環境
 [3.1] OS:WindowsXP
 [3.2] コンパイラ名とバージョン: BCC5.5
 [3.3] 言語:C
[4] 期限: 2007/10/1
[5] その他の制限:実行例
            現在:AB、CD、EF、GH
            文字を入力してください:AB
            ABはありました。
            現在:CD、EF、GH
            文字を入力してください:TR
            TRはありません。
            現在:CD、EF、GH
            文字を入力してください:
                ・
                ・
                ・
            現在:GH
            文字を入力してください:GH
            GHはありました。
            これで終了します。

459:デフォルトの名無しさん
07/09/28 18:46:37
#include <stdio.h>
#include <string.h>
int main(void){
  char *a[]={"AB","CD","EF","GH"},b[9],c[]="現在:%s",d[]="、%s",*e;int i;
  while(1){
    e=c;
    for(i=0;i<sizeof(a)/sizeof(a[0]);++i){
      if(a[i]){
        printf(e,a[i]);
        e=d;
      }
    }
    if(e==c) break;
    printf("\n文字を入力してください:");
    scanf(" %8[^\n]",b);
    for(i=0;i<sizeof(a)/sizeof(a[0]);++i){
      if(a[i] && !strcmp(a[i],b)){
        printf("%sはありました。\n",b);
        a[i]=0;
        goto found;
      }
    }
    printf("%sはありません。\n",b);
    found:;
  }
  puts("これで終了します。 ");
  return 0;
}



460:デフォルトの名無しさん
07/09/28 19:02:44
gotoかよw

461:デフォルトの名無しさん
07/09/28 21:50:48
[1]授業単元:プログラミング演習
[2]問題文:ポインタをつかって@変数aのアドレスを獲得する。A変数bのアドレスを変数aのアドレスの4バイト後方におきたい。B変数aのアドレスの4バイト後方に(a+90)の値を代入する。CA、Bの結果をprintf文で出力。
[3]環境
[3.1]Windows、Visual stdio Japan2005
(注)エラーが出ると思いますが、結果は出ます。
お願いします。

462:デフォルトの名無しさん
07/09/28 21:58:40
変数の型は?

463:デフォルトの名無しさん
07/09/28 22:12:58
一気に宿題されすぎでおれの宿題が答えられてないな。。。
おれも片付けに参加しようかね。

464:デフォルトの名無しさん
07/09/28 22:16:59
どれ?

465:デフォルトの名無しさん
07/09/28 22:48:52
>>459 >>460

URLリンク(blogs.wankuma.com)
URLリンク(blogs.wankuma.com)

466:デフォルトの名無しさん
07/09/28 23:10:13
>>452
どの程度自由度があるかわかんね.
"memo.txt"というファイル名に対して,a ts u saを表示するだけでいいの?
それとも,そのコメント風の部分も評価しなきゃいけないの?

467:デフォルトの名無しさん
07/09/28 23:28:39
goto文使うとプログラム読みにくくなるしループとか抜け出すならbreakとかあるからな。
俺も極力使うなって言われたけど中にはそっちの方が分かりやすいって人もいるんじゃない?

468:デフォルトの名無しさん
07/09/28 23:35:31
>467
この例だと分かりにくいぞw
判定ループは関数化して、戻り値で ありました/ありません 表示だろ、普通。

469:デフォルトの名無しさん
07/09/28 23:58:10
条件判定部にsizeof(a)/sizeof(a[0])なんて書いてるのみると、
深い考えがあってgoto使ってるようには見えないけどな

470:デフォルトの名無しさん
07/09/29 00:05:25
goto無しで作ってみるか?

471:デフォルトの名無しさん
07/09/29 00:18:17
>>470
横槍で良く分かってないけど、コレで良いか?

for(i=0;i<sizeof(a)/sizeof(a[0]);++i){
if(a[i] && !strcmp(a[i],b)){
printf("%sはありました。\n",b);
a[i]=0;
break;
}
}
if(i==sizeof(a)/sizeof(a[0])) printf("%sはありません。\n",b);


472:デフォルトの名無しさん
07/09/29 00:22:35
それだと、最後のifがムダだって言いたいんだろ

473:デフォルトの名無しさん
07/09/29 00:37:36
じゃあこうか?

char *format;
・・・
format = "%sはありません。\n";
for(i=0;i<sizeof(a)/sizeof(a[0]);++i){
if(a[i] && !strcmp(a[i],b)){
a[i]=0;
format = "%sはありました。\n";
break;
}
}
printf(format,b);

474:452
07/09/29 00:39:29
/****memo.txt********/
atsusa a ts u s a
au a u
awatadashii a w a t a d a shi i
awa a w a
/*********************/
ちょっといろいろ考えてたんだけど。
このファイルを読み込み、右の「a,ts,u,s,a」という単位で
かかれてある右の列(2列目)を(atsusaを1列目、a,ts,u,s,aを2列目)
a
ts
u
s
a
という風な形で、ファイル"output1.txt"と出力するようにしなさい。
ってのがいいかな。
”atsusa a ts u s a”のスペースがくるたびに改行して配列にいれて、その1つ目を無視して2つ目から
配列にいれて出力すればいんだけどどう書けばいいのかわからなくて。


475:デフォルトの名無しさん
07/09/29 00:48:16
フラグ使って一つ目のスペースがくるまで飛ばせば?

476:デフォルトの名無しさん
07/09/29 01:01:46
>>461
型はintの整数です。

477:デフォルトの名無しさん
07/09/29 01:05:30
変数bのアドレスは宣言時に決まるから、aのアドレスを得てからその4バイト後ろをbのアドレスにするってのは無理

478:デフォルトの名無しさん
07/09/29 01:17:52
>>474
ファイルのフォーマットが今ひとつ分かんないので、チョー手抜き。
1行は254文字以下、行末にスペースが無い、単語間のスペースが1つという条件。
#include <stdio.h>
#include <string.h>
int main()
{
FILE *ifp, *ofp;
char line[256];
char *pos;
if((ifp = fopen("memo.txt", "r")) == NULL) { return 1; }
if((ofp = fopen("output1.txt", "w")) == NULL){ fclose(ifp); return 1; }
while(fgets(line, 256, ifp) != NULL){
if((pos = strchr(line, ' ')) != NULL){
for(pos++;*pos != '\0';pos++){
if(*pos == ' '){ fprintf(ofp, "\n"); }
else{ fprintf(ofp, "%c", *pos); }
}
}
}
fclose(ifp); fclose(ofp);
return 0;
}

479:デフォルトの名無しさん
07/09/29 03:43:34
[1] 授業単元:C言語基礎
[2] 問題文(含コード&リンク):
ファイルにN×Nの整数行列が2つ書き込まれている。この2つの行列積を求め、
解を違うファイルに書き込みなさい。
ただし、2つのN×N整数行列のデータは
3
1 2 3
5 6 7
1 2 3

3 2 1
3 4 5
6 7 8

のように書き込まれているとする。
(先頭の値で次元Nを指定している。)
[3] 環境
 [3.1] OS: (Linux)
 [3.2] コンパイラ名とバージョン: (gcc)
 [3.3] 言語: (C言語)
[4] 期限: 07年9月30日まで
[5] その他の制限:入力ファイル、出力ファイルはともに任意のファイル名を
指定できるようにする。

「257」の方のプログラムが見た感じ似ていたので、挑戦してみたのですが
やはり無理でした…

480:459
07/09/29 04:58:00
何か夜中にいろいろやりとりあったみたいやね。
とりあえず>>458はgotoまずかったらテキトーに直しといて。
1番いいのは>>468だけど、>>471>>473に置き換えてもいいんじゃないかな。
講師がソースろくすっぽ見ないってんなら関係ないけど。

481:デフォルトの名無しさん
07/09/29 05:17:34
>>476
型が int なら
int a, b;
int b, a;
のいずれか(環境依存)で a の4バイト後ろに b が配置されるけど題意の様に
『a のアドレスを得てから』は無理だな
出題者は &b = (&a)++; が可能だとでも思ってるのかな

482:デフォルトの名無しさん
07/09/29 05:39:05
>>474
strtok() 使えば簡単じゃね?禁止されてるなら

char buf[100]; // に "atsusa a ts u s a\n" が入ってると考えてね

char *top, *ptr;
top = strchr( buf, ' ' );
if( top ) {
  top++;
  while( 1 ) {
     ptr = strchr( top, ' ' );
     if( ptr ) *ptr = '\n';
     else break;
  }
  printf( "%s", top );
}
で出力できると思うけど、区切りの ' ' が複数連続すると余計な改行が発生するから30点くらい?




483:デフォルトの名無しさん
07/09/29 07:11:26
>>479
>>316 に追加で
int main(void){
FILE *fp_in, *fp_out;
int N=0, column, row;
matrix_t *a, *b, *c;

fp_in=fopen("ファイル", "r");
if(fp_in==NULL) return 1;
fp_out=fopen("違うファイル", "w");
if(fp_out==NULL){
fclose(fp_in);
return 1;
}
fscanf(fp_in, "%d", &N);
a=matrix_alloc(N, N);
b=matrix_alloc(N, N);
for(column=0;column<N;column++)
for(row=0;row<N;row++) fscanf(fp_in, "%lf", &a->data[column][row]);

for(column=0;column<N;column++)
for(row=0;row<N;row++) fscanf(fp_in, "%lf", &b->data[column][row]);

c=matrix_mul(a, b);
for(column=0;column<N;column++){
for(row=0;row<N;row++) fprintf(fp_out, " %.0f", c->data[column][row]);
fprintf(fp_out, "\n");
}
fclose(fp_in);
fclose(fp_out);
return 0;
}

484:デフォルトの名無しさん
07/09/29 07:39:15
>>474
#include<stdio.h>

int main(void)
{
char buf[1000];
FILE *fp=stdin;
int is_top=1;

while(1)
{
if(fscanf(fp, "%[^ \t\n]", buf)==1){
if(!is_top) printf("%s\n", buf);
is_top=0;
}
else if(fscanf(fp, "%[ \t]", buf)==1)
{
}
else if(fscanf(fp, "%1[\n]", buf)==1)
{
is_top=1;
}
else
{
break;
}
}
return 0;
}

485:デフォルトの名無しさん
07/09/29 11:44:39
>>454->456をお願いしますm(__)m

486:デフォルトの名無しさん
07/09/29 11:47:41
>>453
double dv(double p,double dt){return 8.314/p*dt;}

487:デフォルトの名無しさん
07/09/29 12:05:27
>>485
456の動きが455の表示の例と違うんだけど、それは無視して良いんかな?

488:479
07/09/29 12:19:43
>>483
matrix_t *a, *b, *c; 部分でエラーが出てしまいます。
あと、ファイル指定は>>257の方のような、キーボードから行える形にしてもらいたいのですが・・・
よろしくお願いします。

489:デフォルトの名無しさん
07/09/29 12:31:35
>>488
>>483 をよく読んでから
>>257 の必要な部分をコピペでおk
あと、変数名はどちらか合わせないといけない

490:479
07/09/29 14:50:00
>>489
すみません。そのプログラムを作成してもらえないでしょうか?
力不足でプログラムを応用して完成することが無理なんです・・・

491:デフォルトの名無しさん
07/09/29 14:51:56
それをやらなければ身につかんだろうが

492:デフォルトの名無しさん
07/09/29 14:52:51
[1] 授業単元:
[2] 問題文(含コード&リンク): 下記
[3] 環境
 [3.1] OS: (Windows)
 [3.2]
 [3.3] 言語: (C)
[4]9/29
かなりの初心者でさっぱりです。ヨロシク願いします。

以下のプログラムは、入力された10個の数値を引き算し、その結果を表示するプログラムです。
9〜11行目を別の関数(関数名はFuncDev)とし、修正しなさい。
ただし、グローバル変数は使わないこと。また、FuncDev内のローカル変数名は任意とする。
FuncDev関数は以下の定義とする。

int FuncDEv(void)
FuncDev関数の戻り値は、画面入力されたint型データとする。

#include<stdio.h>
void main(void);
void main(void)
{
int n1,n2;
int nt;
nt=0;
for(n1=0;n1<10;n1++){
printf("0-9の数値を入力:");
scanf("%d,&n2");
nt-=n2;
}
printf("結果%dです"nt);
}

493:デフォルトの名無しさん
07/09/29 15:03:33
#include<stdio.h>

int FuncDev(void)
{
int n2;
printf("0-9の数値を入力:");
scanf("%d", &n2);
return n2;
}

void main(void)
{
int n1,n2;
int nt;
nt=0;
for(n1=0;n1<10;n1++){
n2= FuncDev();
nt-=n2;
}
printf("結果%dです", nt);
}

494: ◆vLIz8KOkPM
07/09/29 16:11:51
>487
456のプログラムで大丈夫です。よろしくお願いしますm(__)m

495:474
07/09/29 17:37:56
>478、484
ありがとうございました。
ちょっと作り替えて表示できました。
表示できたこの
a
ts
u
s
a

a
u

a
w
...
とできたのですが、これを
a a a
ts u w
u a
s t
a a
d
a
と言う風にchar型の二次元配列に格納したいんですけど。
このあとに列単位で違う関数に送りたいんですけど可能ですかね。

496:デフォルトの名無しさん
07/09/29 17:40:46
>>494
URLリンク(kansai2channeler.hp.infoseek.co.jp)

497:デフォルトの名無しさん
07/09/29 17:45:48
>>461
>エラーが出ると思いますが、結果は出ます。
こういうこと?

#include <stdio.h>

int main(){
int a , *b;

printf("a?>");
scanf("%d" , &a);

b = &a + 1;
printf("Address:a=>%d , b=>%d\n" , &a , b);

*b = a + 90;
printf("Value:a=>%d , b=>%d" , a , *b);

return 0;
}
まあ、bのアドレスがaの4バイト先にあるわけじゃないけど、出題者はこういうことを言いたいんじゃね?
エラー出ないけどw

498:デフォルトの名無しさん
07/09/29 19:23:14
>>495
#include <stdio.h>
#include <string.h>

int main(int argc, char *argv[]){
    FILE *fp;
    int row = 0, col = 0, max_col = 0, i, j;
    char buf[128], *p, str[128][128][3] = {0};

    if(argc < 2 || (fp = fopen(argv[1], "r")) == NULL) return 0;

    while(fgets(buf, sizeof(buf), fp) != NULL){
        p = strtok(buf, " \n");
        while((p = strtok(NULL, " \n")) != NULL) strcpy(str[row][col++], p);
        row++, col = 0;
    }
    fclose(fp);

    for(i = 0; i < row; i++){
        for(j = 0; str[i][j][0] != '\0'; j++) ;
        if(j > max_col) max_col = j;
    }

    for(j = 0; j < max_col; j++){
        for(i = 0; i < row; i++)
            if(str[i][j][0] != '\0') printf("%2s ", str[i][j]);
            else printf("%*c", 3, 32);
        printf("\n");
    }

    return 0;
}

499: ◆vLIz8KOkPM
07/09/30 01:55:24
>>496
お返事遅れてすみません…
お陰様で助かりました。大変ありがとうございましたm(__)m

500:452
07/09/30 02:29:03
>>495
作ってくれたのはありがたいんですけど、少々考え直しまして。
めんどくさいけど大量にファイルを出力してから、それを入力したほうが
作ってあるプログラムにあわせやすいので。
そこでちょっとまた疑問がでまして。
a
ts
u
s
a

a
w
a

a
u

というファイル(例えばalpa_file.txt)があるとして、この何もかかれていない
行にきたら、それまでの文字をファイル出力して、また次の行にいき、すすんでいって、何もかかれてない行にきたら
また違うファイルに出力みたいにしたいんですけど。

501:デフォルトの名無しさん
07/09/30 02:46:25
URLリンク(kansai2channeler.hp.infoseek.co.jp)
長くなったのでロダの方へ上げました
どうか皆様の知恵をお願いします

502:デフォルトの名無しさん
07/09/30 07:16:59
>>501
>>1嫁。

【質問者へ】
回答者の便宜のため、質問の際は以下を行うことを推奨します。
<略>
・後から問題に付け足しするのはやめましょう。付け足しは作業を無駄にしがちです。


ということでお前はもう質問禁止な方向に。


503:デフォルトの名無しさん
07/09/30 07:34:39
>>502
>>1嫁。
> 気に入らない質問やその他や発言はスルーの方向で。
ということでお前はもう回答禁止な方向に。

504:デフォルトの名無しさん
07/09/30 08:46:53
無限ループの予感。

505:デフォルトの名無しさん
07/09/30 14:39:56
>>503
>>1嫁。
> 気に入らない質問やその他や発言はスルーの方向で。
ということでお前はもう回答禁止な方向に。


>>504
こうですかわかりません><

506:デフォルトの名無しさん
07/09/30 15:41:30
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):口頭で説明されたので問題文はありません。

入力した2文字のアルファベット4組(たとえば ae、bd、ac、ab)を
アルファベット順(上の例だったら ab、ac、ae、bd)に表示せよ
また数字でも同じことをせよ(3、4、2、1→1、2、3、4)

あとリスト構造を使えとか言ってました

[3] 環境
 [3.1] OS:windowsXP
 [3.2] コンパイラ名とバージョン:学校のはよくわからんです
 [3.3] 言語:C
[4] 期限: 2007年10月3日まで
[5] その他の制限:とくにないです

よろしくおねがいします

507:デフォルトの名無しさん
07/09/30 15:50:16
>>506
「リスト構造を使え」というのは、その問題に関しては何か不自然。
もういちど問題を確認することをお勧めする。

508:デフォルトの名無しさん
07/09/30 16:01:02
リストのソートだろ?普通じゃね?

509:デフォルトの名無しさん
07/09/30 16:11:52
>>508
要素数がたった4つに固定されていたら、
リストを使う意味は全く無いと思うけど。

俺は、要素数4つというのは単に説明の例で、
本当はもっと多いか不明のどちらかだと予想してる。

510:デフォルトの名無しさん
07/09/30 17:03:59
>>509
すみません、聞いてみたら4つで固定とは言ってなかったとです。

511:デフォルトの名無しさん
07/09/30 17:55:31
C言語で、二重ループを用いた20行以上のプログラムと二重ループと配列を使った20以上のプログラムをレポートで出されたのですが、何か知っていたら教えてください。
始まりの部分は、
#include<stdio.h>
int main(void)
{
でお願いします
携帯からですいません

512:デフォルトの名無しさん
07/09/30 18:04:41
>>511
知るか(笑)

513:デフォルトの名無しさん
07/09/30 18:45:52
どんだけ漠然としてるんだwwww

514:デフォルトの名無しさん
07/09/30 18:45:59
>>506, >>510
入力はキーボードから。EOF (CTRL-D など)で入力終了。
エラーチェックは特にしていない。挿入ソート。

二文字文字列バージョン:
URLリンク(kansai2channeler.hp.infoseek.co.jp)

整数値バージョン:
URLリンク(kansai2channeler.hp.infoseek.co.jp)

515:デフォルトの名無しさん
07/09/30 18:54:29
>>501
P^-1 は手で計算してよろしい?それとも
プログラム上で計算しないとダメ?

あと #include <stdio.h> だけど C++ でいいの?

516:デフォルトの名無しさん
07/09/30 19:43:45
>>514
面白いな

517:デフォルトの名無しさん
07/09/30 20:32:33
>>501
#include<stdio.h>

int main(void){
int i, j, n, num[9+1];

while(1)
{
printf("行数(1-9):");
scanf("%d", &n);
if(1<=n && n<=9) break;
printf("\nエラー\n");
}

num[0]=num[1]=1;
for(i=0;i<n;i++)
{
num[i+1]=0;
for(j=i;j>=0;j--) num[j+1]+=num[j];
for(j=0;j<=i+1;j++) printf(" %d", num[j]);
printf("\n");
}
return 0;
}

518:デフォルトの名無しさん
07/09/30 20:38:28
言語間違えた orz
#include<iostream>

int main(void){
int i, j, n, num[10];

while(1){
std::cout << "行数(1-9):";
std::cin >> n;
if(1<=n && n<=9) break;
std::cout << std::endl << "エラー" << std::endl;
}

num[0]=num[1]=1;
for(i=0;i<n;i++){
num[i+1]=0;
for(j=i;j>=0;j--) num[j+1]+=num[j];
for(j=0;j<=i+1;j++) std::cout << num[j] << " ";
std::cout << std::endl;
}
return 0;
}

519:デフォルトの名無しさん
07/09/30 21:42:56
>>500
日本語でおk
少し長い文章を書くと内容がめちゃくちゃになるようなので
何をしたいのか最初から箇条書きで書き直し

520:デフォルトの名無しさん
07/09/30 21:48:50
>>515
自分で計算してOKです
そして言語ですが、確認したらCでもC++でも可能との事
問題文のソース例はCの場合でした

521:デフォルトの名無しさん
07/09/30 21:49:34
>>511
>>517

522:デフォルトの名無しさん
07/09/30 21:57:28
サンクス!

523:500
07/09/30 22:01:09
以下のファイル(file1.txt)があるとします。
このファイルをfgetsで読み込んで、文字が書かれてない行にきたら
それまで読み込んだ文字を違うファイル(output_file1.txt)に出力します。
出力したらまた元のファイルの読み込みを始めます。そして文字が書かれてない行に
きたら、また違う別のファイル(output_file2.txt)に出力します。
読み込むファイルfile1.txtが
a
ts
u
s
a

a
w
a

a
u
とすると
出力するファイルoutput_file1.txtに
a
ts
u
s
a
また次の出力するファイルoutput_file2.txtに
w
a
と出力できるようにしたいということです。すみません説明できなくて



524:500
07/09/30 22:02:17
>また次の出力するファイルoutput_file2.txtに
>w
>a

でなくて
a
w
a
です

525:デフォルトの名無しさん
07/09/30 22:25:40
fout=0として書き込む前にチェックするのが普通だろうが、まあいいや。
#include <stdio.h>
int main(void){
char buff[256];int i=1;
FILE *fin=fopen("file1.txt","r"),*fout=fopen("output_file1.txt","w");
while(fgets(buff,sizeof(buff)/sizeof(buff[0]),fin)){
if(buff[0]=='\n'){
fclose(fout);
sprintf(buff,"output_file%d.txt",++i);
fout=fopen(buff,"w");
}else{
fputs(buff,fout);
}
}
fclose(fout);fclose(fin);
return 0;
}



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

5282日前に更新/230 KB
担当:undef