←検索窓の楽しみ方
  ショッピングモール  掲示板ランキング


【掲示板ご利用上の注意】

 ※題名は具体的に!
 ※学校の課題の丸投げ禁止!
 ※ソースの添付は「HTML変換ツール」で字下げ!
 ※返信の引用は最小限に!
 ※環境(OSとコンパイラ)や症状は具体的に詳しく!
 ※返信付き投稿の削除は禁止!
 ※マルチポスト(多重投稿)は慎んで!

 詳しくはこちら


 本当はこんなに大きく書きたくはないのですが、なかなか守っていただけなくて…。
 守ってくださいね。お願いします。(by管理人)

C言語ソース⇒HTML形式ツール   掲示板1こちら


管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    記事検索    ログ    タグ一覧

No.4011

入力された値を降順に並び替えて表示させたい
投稿者---たまご(2005/06/12 01:44:48)


はじめまして。C言語初心者です。
「入力された値を降順に並び替えてカンマ区切りで表示させる」
という課題を考えている途中なのですがわかりません。
条件は
/値は配列で管理する
関数DataSortの引数はpData1,pData2で両方とも整数のポインタ変数
pData1とpData2を比較してpData2が大きければ値を入れ替える。
ぬ瓩蠱佑呂覆
とあるので、試行錯誤で以下のように作ってみました。
ソート部分や結果の表示部分がおかしいのだろうなとは思うのですが・・・。
どなたか教えてください!

#include <stdio.h>
#define N 5

void DataSort(int *pData1,int *pData2);
void main()
{
    int kazu[5];
    int *p1;
    p1=kazu;
    printf("数値をカンマ区切りで5個入力してください\n>");
    scanf("%d,%d,%d,%d,%d",&kazu[0],&kazu[1],&kazu[2],&kazu[3],&kazu[4]);
    DataSort(p1,p1+1);
}


void DataSort(int *pData1,int *pData2)
{
    int i,j,w;
    
    for(i=0;i<N-1;i++)
    {
        for(j=N-1;j>i;j--)
        {
         if(*(pData1+j-1)<*(pData2+j))
         {
            w=*pData1;
            *pData1=*pData2;
            *pData2=w;
         }
        }
    }
    for(i=0;i<N;i++)
    {
        printf("%d",*pData1);
        if(i!=N-1)
        {
            printf(",");
        }
        pData1++;       
    }
}
    




この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:入力された値を降順に並び替えて表示させたい 4012 si 2005/06/12 03:58:16
<子記事> Re:入力された値を降順に並び替えて表示させたい 4015 たまご 2005/06/12 16:51:13


No.4012

Re:入力された値を降順に並び替えて表示させたい
投稿者---si(2005/06/12 03:58:16)


良くコードを見ましょう

if(*(pData1+j-1)<*(pData2+j)){
    w=*pData1;    /*    ↑何処指してるの */
    *pData1=*pData2; /*  比較してる物と交換してる物違うけど*/
    *pData2=w;
}


この投稿にコメントする

削除パスワード

No.4014

Re:入力された値を降順に並び替えて表示させたい
投稿者---elder(2005/06/12 13:57:00)


コードの前にまずは課題の条件ですね。
私ならDataSort()をこのように書きます。

void DataSort(int *pData1, int *pData2)
{
    if (*pData1 < *pData2) {
        int temp = *pData1;
        *pData1 = *pData2;
        *pData2 = temp;
    }
}




この投稿にコメントする

削除パスワード

No.4015

Re:入力された値を降順に並び替えて表示させたい
投稿者---たまご(2005/06/12 16:51:13)


siさま、Elderさま、ありがとうございました。
お二人のおかげでやっと解決できてすっきりしました。

siさまに指摘されておかしいことに気づきました。
比較しているものと交換しているものが違うことに全然気づかなかったなんて・・・。ありがとうございます。
Elderさまのソースのように変えてみたところ上手く動いてくれました!ありがとうございます。
以下はお二人のアドバイスを基に作り直したものです。
これで何とか降順に並ばせることができました。
まだまだ改善の余地がありそうですが・・・。
また困ったときにはご指導お願いします。

#include <stdio.h>
#define N 5

void DataSort(int *pData1,int *pData2);
void main()
{
    int kazu[5];
    int *p1,i,j;
    p1=kazu;    
    printf("数値をカンマ区切りで5個入力してください\n>");
    scanf("%d,%d,%d,%d,%d",&kazu[0],&kazu[1],&kazu[2],&kazu[3],&kazu[4]);
    printf("並び替え後:");
    for(i=0;i<N-1;i++)
    {
        for(j=N-1;j>i;j--)
        {
         DataSort(p1+j-1,p1+j);
        }
    }   
    for(i=0;i<N;i++)
    {
        printf("%d",*p1);
        if(i!=N-1)
        {
            printf(",");
        }
        p1++;
    }

}
void DataSort(int *pData1,int *pData2)
{
    int i,w;
                if(*pData1<*pData2)
                {
                    w=*pData1;
                    *pData1=*pData2;
                    *pData2=w;
                }
}

    




この投稿にコメントする

削除パスワード

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    記事検索    ログ    タグ一覧




掲示板提供:Real Integrity